PHP不断压缩PNG

时间:2015-03-09 02:10:29

标签: php

我正在尝试压缩PNG文件,直到我使用dirty-ish方法达到目标标记。但我正在努力让任何压缩进行。我知道在最后一点,我将压缩设置为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);

1 个答案:

答案 0 :(得分:2)

PNG压缩无损。如果你将它压缩到5,然后再压缩到5,那么你最终会将其压缩为5。同样地,当你最终将图像输出为0时(只有当你第一次尝试5点击到25k时才会出现),你实际做的是撤消你刚才做的任何压缩。这是因为压缩不会影响图像的质量(该选项的文档名称具有误导性)。它就像一个拉链...它所做的只是减小文件大小,缺点是文件需要在另一端重新充气。

更好的方法是逐步压缩它,从例如开始1,然后2,然后3,直到你得到你想要的大小。即便如此,正如上面的评论所说,你可能永远无法达到你的目标规模。