43

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

5 に答える 5

85

私は過去にこのようにして成功しました:

$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()

于 2008-11-23T23:23:17.693 に答える
14

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

$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);
于 2011-02-22T20:59:10.590 に答える
3

これらの関数は、基礎となる gdlib ライブラリにアクセスします。これは素晴らしいおもちゃですが、良い結果をもたらすものではありません。オプションがある場合は、代わりにimagemagickを使用してください。欠点は、現在、適切な php バインディングがないことです。そのため、共有ホストでは通常許可されていないシェル経由でアクセスする必要があります。

于 2008-11-23T23:32:41.263 に答える
1

imagecopyresizedは透明度を適切にサポートしていません。

imagecopymergeは行いますが、サイズは変更されません。

ソリューション?おそらく手動でサイズを変更することになるでしょう。

于 2008-11-23T23:12:26.657 に答える
1

「サイズを変更するにはどうすればよいですか...」に対するdyceyの回答を参照してください。基本的に、他の操作を行う前に、背景全体を透明にする必要があります。

于 2008-11-23T23:06:38.837 に答える