2010-06-15 31 views
1

我用一個簡單的縮略腳本,我寫了,它是非常標準:PHP:imagepng是創建異常大文件

$imgbuffer = imagecreatetruecolor($thumbwidth, $thumbheight); 
switch($type) { 
    case 1: $image = imagecreatefromgif($img); break; 
    case 2: $image = imagecreatefromjpeg($img); break; 
    case 3: $image = imagecreatefrompng($img); break; 
    case 6: $image = imagecreatefrombmp($img); break; 
    case 15: $image = imagecreatefromwbmp($img); break; 
    default: return log_error("Tried to create thumbnail from $img: not a valid image"); 
} 
imagecopyresampled($imgbuffer, $image, 0, 0, 0, 0, $thumbwidth, $thumbheight, $width, $height); 
$output = imagepng($imgbuffer, "$album/thumbs/$imgname.png", 9); 

9是最低質量設置,但是從一個400 x 600的JPEG圖像(在56kB)我得到了一個尺寸爲27 kB的縮略圖(140 x 140)。使用imagejpeg(質量80)而不是imagepng約4kB。

這怎麼可能,特別是在imagepng的最低質量設置?我嘗試使用imagecopy而不是imagecopyresampled,而使用imagecreate而不是真正的顏色版本。不幸的是,圖像出現了某種程度的損壞。

有什麼辦法可以獲得合理小文件大小的PNG縮略圖(140 x 140大約4 kB)?或者我必須使用JPEG?

+1

我不確定兩者之間壓縮方案的確切區別是什麼,但它們明顯不同。如果你想保持透明度,我會說只使用PNG,否則爲什麼不使用JPEG?每個瀏覽器都支持它。在你的用例中JPEG有什麼問題? – Kris 2010-06-15 23:14:35

+0

真的沒有問題想到它!當我第一次寫這個腳本時,出於某種原因使用了imagepng,我只是堅持下去。當我注意到尺寸問題時,我只是好奇這個問題是什麼。 – Rafael 2010-06-24 22:12:14

回答

7

PNG是一種無損格式,並不會產生良好的壓縮比的照片和其他複雜的圖像,在JPEG文件通常被壓縮。

更糟糕的是,如果你轉換JPEG文件,PNG,巴布亞新幾內亞也將重現像素對像素引起JPEG壓縮的壓縮失真。

使用PNG僅適用於計算機圖形和高度壓縮的其他圖像,或當你絕對不能丟失任何數據(或者,如克里斯正確指出的,當你需要一個alpha通道)。

+0

謝謝,這只是我希望的答案 - 它爲我澄清了一切。再次感謝。 – Rafael 2010-06-24 16:44:23

+0

@Artefacto:非常感謝。 – 2012-09-18 16:22:33