質問

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);

imagecopyresized()

よりも imagecopyresampled()を使用した方が、出力画像の品質がはるかに優れていることがわかりました。

他のヒント

カラー透明度インデックスを忘れてください。すべてのレンダリング製品で機能することはありません。代わりに、アルファレイヤーマスクを使用します。

$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バインディングがないため、シェル経由でアクセスする必要があることです。通常、共有ホストでは許可されていません。

" How do Iへのdyceyの回答を参照サイズ変更..." 。基本的に、他の操作を行う前に背景全体を透明にする必要があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top