imagealphablending
私は自分のアプリケーション(画像を保存する前に画像のサイズを動的に変更する)で動作するように透明性を確保しようとしてきましたが、とについて多くの誤った方向性を示した後、最終的に問題を絞り込んだと思いますimagesavealpha
。ソース画像に適切な透明度が読み込まれることはありません。
// With this line, the output image has no transparency (where it should be
// transparent, colors bleed out randomly or it's completely black, depending
// on the image)
$img = imagecreatefromstring($fileData);
// With this line, it works as expected.
$img = imagecreatefrompng($fileName);
// Blah blah blah, lots of image resize code into $img2 goes here; I finally
// tried just outputting $img instead.
header('Content-Type: image/png');
imagealphablending($img, FALSE);
imagesavealpha($img, TRUE);
imagepng($img);
imagedestroy($img);
ファイルから画像をロードすることは、アーキテクチャ上深刻な問題になります。このコードは、iPhoneアプリからクエリされるJSON APIで使用されており、この場合、POSTデータでbase64でエンコードされた文字列として画像をアップロードする方が簡単です(より一貫性があります)。どういうわけか画像をファイルとして保存する必要がありますか(PHPが画像を再びメモリにロードできるようにするため)?$fileData
に渡すことができるストリームを作成する方法はありimagecreatefrompng
ますか?