2

PNG のサイズ変更と小さなファイル サイズの維持に問題がありました。解決策はこちらにあります

ただし、PNG のサイズを変更すると、画質に関する問題が発生しました。私が見る限り、GD はインデックス付きの 8 ビット カラー パレットを使用しており、テキストが歪んで色が失われます。以下を参照してください。

²スタックオーバーフローでここで見つけた微調整のアイデア: トゥルーカラー画像を作成し、サイズを変更して、新しい画像にコピーするため、リサンプリングされた結果に基づいてパレットが決定され、画像でわかるように画質が向上します上記

// create new image
$newImageTmp = imagecreatetruecolor($newwidth,$newheight);
// we create a temporary truecolor image
// do the image resizing by copying from the original into $newImageTmp image
imagecopyresampled($newImageTmp,$src,0,0,0,0,$newwidth,$newheight,$width,$height);
// create output image
$newImage = imagecreate($newwidth,$newheight);
// copy resized truecolor image onto index-color image
imagecopy($newImage,$newImageTmp,0,0,0,0,$newwidth,$newheight);
// write image to buffer and save in variable
ob_start(); // stdout --> buffer
imagepng($newImage,NULL,6);
$newImageToSave = ob_get_contents(); // store stdout in $newImageToSave
ob_end_clean(); // clear buffer
// remove images from php buffer
imagedestroy($src);
imagedestroy($newImageTmp);
imagedestroy($newImage);

問題: どちらの結果も満足できるものではありません。

1. カラー パレットを決定し、2. 画像のほとんどの色を維持して、3. PNG が元の画像と同じように見え、許容できるファイル サイズになるようにする方法があるに違いないと確信しています。

現在、PNG ではなく JPG のみを使用しています。しかし、解決策をご存知でしたら、私/私たちに知らせていただければ幸いです.

ありがとうございました!

4

2 に答える 2

2

必要なのは交換するだけです

 $newImage = imagecreate($newwidth,$newheight);

 $newImage = imagecreatetruecolor($newwidth, $newheight);

出力$maxImgWidth = 200;

ここに画像の説明を入力

于 2012-11-30T09:25:49.757 に答える
0

PHP の GD フォークには使用可能なパレット生成機能がないため、vanialla libpng 圧縮を使用した PNG32 のみを取得できます。

パレット付きの小さな PNG8 の場合は、pngquant を使用します。例: http://pngquant.org/php.html

そして、advpng または zopfli-png でさらに圧縮します。

于 2014-10-20T22:10:07.003 に答える