2016-09-06 59 views
0

我有疑問。如果我強制imagejpeg保存.png文件,是否有問題? 就像這個例子:將imagejpeg強制爲.png

imagejpeg($img,$_SERVER['DOCUMENT_ROOT']."/test.png",80); 

我想用這種方法,因爲我可以用$quality過濾器。 在這種方法中,我有一個保存的約25kb的.png文件,但是如果我使用imagepng,我的圖像大約爲200kb(我使用0-9的$質量等級,但是我沒有看到任何變化,只有-20kb )。 我不想犯一個錯誤,因爲我的網站每秒都會生成.png圖像。

方法2. 我試圖用pngquant壓縮.png圖像,但我不知道當我使用imagepng函數時如何去做。 我嘗試過這樣的事情,但如果我將圖像傳遞給函數,它不起作用。

ob_start(); 
imagepng($img); 
$png = ob_get_clean(); 
file_put_contents($_SERVER['DOCUMENT_ROOT']."/test.png", compress($png); 

function compresss($img) 
{ 
    //... 
} 

在其他情況下,如果我有$png = $_FILES['file']['tmp_name']正在工作。那麼有沒有辦法用pngquant壓縮,或者如果我強制imagejpeg保存.png文件,是否有問題?

+0

使用擴展名「png」保存JPEG沒有特殊問題,但爲什麼不使用擴展名'jpg'代替?只是給它一個不同的文件擴展名不會改變你創建的文件類型。 – iainn

+0

使用imagejpeg總是生成一個JPEG文件 - 即使您將其命名爲blabla.doc。由於質量低,尺寸要小得多。 –

+1

問題是由於格式的細節,PNG只能被壓縮太多。如果你想要一個更小的尺寸,你需要使用包含所有內容的JPEG。 – apokryfos

回答

1

你強迫創建的文件只是文件名。生成的文件將以jpg及其所有屬性顯示。如果您使用imagejpeg()方法,則不會得到壓縮的png文件。

您需要了解兩種格式的區別。雖然jpg是一種在壓縮時丟失圖像信息的壓縮格式,但png是無損格式。 PNG也有一個壓縮級別,但由於沒有圖像信息被破壞,它會更大,作爲一個JPG文件。

如果您使用imagepng($image, $filename, 9),您會得到一個壓縮最好的png文件。

+0

我現在明白了。謝謝!正如我所說,如果我使用$ quality filter的imagepng,我只能得到大約-20kb。我需要更多,因爲我的網站每天產生約50克圖像。你如何評價方法2?我發現pngquant是一個非常好的解決方案,但如果我創建瞭如上所述的函數,則它不起作用。有沒有辦法像tmp_file一樣創建imagepng?所以我可以把它發送到pngquant函數? –

+0

有一些有用的例子[這裏](https://pngquant.org/php.html)。 –