簡體   English   中英

使用 GD/PHP 調整大小時優化 PNG - 如何確定調色板?

[英]Optimize PNG when resizing with GD/PHP - How to determine color palette?

我在調整 PNG 大小和保持小文件大小時遇到​​了麻煩。 解決方案在這里找到

但是,在調整 PNG 大小時,我遇到了圖像質量問題。 據我所知,GD 使用索引的 8 位調色板,它會扭曲文本並且顏色會丟失,請參閱:

²我在stackoverflow 中找到的調整想法:創建真彩色圖像,調整其大小,然后將其復制到新圖像,因此調色板是根據重新采樣的結果確定的,並且圖像質量更好,如您在圖像中所見以上

// 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 看起來與原始圖像相似並且具有可接受的文件大小。

現在,我只看到 JPG 而不是 PNG。 但是,如果您知道解決方案,請告訴我/我們,我們將不勝感激。

謝謝!

您只需要更換

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

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

輸出$maxImgWidth = 200;

在此處輸入圖片說明

PHP 的 GD 分支沒有可用的調色板生成,因此您只能通過 vanialla libpng 壓縮獲得 PNG32。

對於帶有調色板的小型 PNG8,請使用 pngquant,例如http://pngquant.org/php.html

然后用 advpng 或 zopfli-png 進一步壓縮它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM