簡體   English   中英

PHP持續壓縮PNG

[英]PHP continually compress PNG

我正在嘗試使用骯臟的方法壓縮PNG文件,直到達到目標標記為止。 但是我正在努力進行壓縮。 我知道在最后一點,我將壓縮設置為0,但這是因為我希望文件已被壓縮。

1)上傳帶有表單的png

2)當大小大於25000時,將其壓縮5(imagepng())

我需要使用緩沖區重新捕獲圖像,而不是不斷保存(我認為這是一種好方法)。 以下代碼不是我的生產代碼,而是確切的方法。

$postedImg = $_FILES['file']['tmp_name'];
$size = filesize($postedImg); // eg 35000
$info = getimagesize($postedImg);
$mime = $info['mime'];
if($mime === 'image/png') 
    $img = imagecreatefrompng($postedImg);

    while($size > 25000){
        ob_start();
        imagepng($img , NULL, 5);
        $obImgStr = ob_get_contents();
        $img = imagecreatefromstring($obImgStr);
        ob_end_clean();
        $size = filesize($obImgStr);
    }
    imagepng($img, 'image/goes/here.png', 0);

PNG壓縮是無損的 如果將其壓縮為5,然后再次壓縮為5,則最終仍為5。 同樣,當最終輸出圖像為0時(只有在5時第一次嘗試達到25k時才會發生),實際上,您正在做的是撤消您剛剛進行的任何壓縮。 這是因為壓縮完全不影響圖像的質量(該選項的文檔名稱具有誤導性)。 就像一個zip一樣...它所做的只是減小文件的大小,缺點是文件的另一端需要重新膨脹。

解決此問題的更好方法是逐步壓縮它,例如從1開始,然后是2,然后是3,直到獲得所需的大小。 即便如此,正如上面評論中所述,您可能永遠也無法獲得目標尺寸。

暫無
暫無

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

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