Pngからサムネイルを作成するときに、pngの透明度を維持しようとして問題がありますか?どんな助けでも素晴らしいでしょう、ここに私が現在やっていることがあります:
$fileName= "../js/ajaxupload/tees/".$fileName;
list($width, $height) = getimagesize($fileName);
$newwidth = 257;
$newheight = 197;
$thumb = imagecreatetruecolor($newwidth, $newheight);
imagealphablending($thumb, true);
$source = imagecreatefrompng($fileName);
imagealphablending($source, true);
imagecopyresized($thumb, $source, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);
imagesavealpha($thumb, true);
imagepng($thumb,$newFilename);
私は過去にこのようにして成功しました:
_$thumb = imagecreatetruecolor($newwidth, $newheight);
imagealphablending($thumb, false);
imagesavealpha($thumb, true);
$source = imagecreatefrompng($fileName);
imagealphablending($source, true);
imagecopyresampled($thumb, $source, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);
imagepng($thumb,$newFilename);
_
imagecopyresampled()
よりもimagecopyresized()
を使用した方が、出力画像の品質がはるかに優れていることがわかりました。
色の透明性インデックスを忘れてください。すべてのレンダリング製品で機能することはありません。代わりに、アルファレイヤーマスクを使用します。
$image = imagecreatetruecolor($size, $size);
imagealphablending($image, false);
imagesavealpha($image, true);
$trans_layer_overlay = imagecolorallocatealpha($image, 220, 220, 220, 127);
imagefill($image, 0, 0, $trans_layer_overlay);
imagecopyresized は透明度を適切にサポートしていません。
imagecopymerge は行いますが、サイズは変更されません。
ソリューション?おそらく、手動でサイズを変更することになります。
これらの関数は、基礎となるgdlibライブラリにアクセスします。これは素晴らしいおもちゃですが、ニースの結果をもたらすものではありません。オプションがある場合は、代わりに imagemagick を使用してください。欠点は、現時点では適切なphpバインディングがないため、シェルを介してアクセスする必要があることです。シェルには通常、共有ホストでは許可されていません。
「サイズを変更するには...」に対するdyceyの回答 を参照してください。基本的に、他の操作を行う前に、背景全体を透明にする必要があります。