PNGのサイズを変更するときにアルファを正しく管理する方法をすべて調べました。透明性を維持することができましたが、完全に透明なピクセルに対してのみです。これが私のコードです:
$src_image = imagecreatefrompng($file_dir.$this->file_name);
$dst_image = imagecreatetruecolor($this->new_image_width, $this->new_image_height);
imagealphablending($dst_image, true);
imagesavealpha($dst_image, true);
$black = imagecolorallocate($dst_image, 0, 0, 0);
imagecolortransparent($dst_image, $black);
imagecopyresampled($dst_image, $src_image, 0, 0, 0, 0, $this->new_image_width,
$this->new_image_height, $this->image_width, $this->image_height);
imagepng($dst_image, $file_dir.$this->file_name);
このソース イメージから始めます。
リサイズされた画像は次のようになります。
この問題について私が見たほとんどすべてのフォーラム投稿の解決策は、次のようにすることです。
imagealphablending($dst_image, false);
$transparent = imagecolorallocatealpha($dst_image, 0, 0, 0, 127);
imagefill($dst_image, 0, 0, $transparent);
このコードの結果は、アルファの保存に失敗します。
他の解決策はありますか?アルファブレンディングで何か不足していますか? なぜそれが他の人にはうまくいくのに、私にはまったく失敗するのでしょうか? MAMP 2.1.3 と PHP 5.3.15 を使用しています。