2013-10-31 80 views
17

我想知道如何自動找出最佳壓縮率(小文件大小+無質量損失)。PHP:如何壓縮圖像而不會丟失可見的質量(自動)?

目前我使用imagejpeg()$quality = 85爲每個.jpg

PageSpeed(Chrome插件)建議,降低幾張圖片的質量以節省一些kb。減少的百分比是不同的。

我想寫一個cronjob抓取特定的目錄並優化每個圖像。

PageSpeed或TinyPNG如何計算出最佳優化質量,並且這對於PHP或其他服務器端語言來說是否可能?

+0

您已經在緩存'imagejpeg()'調用,對吧? –

+0

@皮卡:是的,我喜歡。我會以100%的質量調整圖像大小。 cronjob稍後會優化它。 85%的質量是因爲我還沒有算法。 –

回答

27

TinyPNG使用pngquant

Pngquant可以選擇設置所需的質量,類似於JPEG。你可以運行類似於:

<?php system('pngquant --quality=85 image.png'); ?> 

Pngquant website has example code showing how to use pngquant from PHP


對於JPEG,你可以申請無損jpegcrush

JpegMini(商業)和jpeg-archive(免費)是有損並能自動找到一個最小的優良品質爲JPEG。

在PHP中,您可以通過觀察重新壓縮後文件大小的變化大致估算出JPEG壓縮了多少。以相同或更高質量重新壓縮的JPEG文件大小變化不大(但會失去視覺質量)。

如果您重新壓縮JPEG並查看文件大小減半,則保留重新壓縮的版本。如果您看到文件大小隻有10-20%的下降,請保留原文。

如果您正在壓縮自己,請使用MozJPEG(這裏是online version)。

+0

我試過jpegcrush,但它似乎無效。這個perl腳本可以幫助我減少文件大小的10%。 Jpegmini和tinyjpg可以達到70%。任何免費的更好的腳本可以做到嗎? – TomSawyer

+0

@TomSawyer jpegcrush是無損的,並獲得最佳的文件大小/質量比。其他的不是,並且相當於以較低的質量重新保存該文件,增加了更多的失真並且可能具有較低的文件大小/質量比。如果一個工具爲您節省了70%的JPEG,這意味着您已經以浪費的高質量設置創建了該文件。 – Kornel

+0

我不這麼認爲。我試圖用jpgmini和tinyjpg來壓縮很多文件,而且幾乎所有的文件都會被壓縮至少50%,質量也是一樣的,或者你可以根據你的人眼來判斷它們有什麼不同。兩個以上的服務減少我的文件70%的大小,但jpegcrush可以做到10%。你應該嘗試兩個以上的服務來看看區別 – TomSawyer

相關問題