2014-07-21 34 views
0

我必须上传符合最大宽度尺寸和最大文件大小的图像文件。PHP - 压缩映像以满足文件大小限制

我有代码检查宽度大小,并调整图像大小以满足最大图像宽度。

然而,当我保存文件,我可以将质量

imagejpeg($imgObject , 'resized/50.jpg' , 50); //save image and set quality 

我想要做的是避免设定一个标准的质量,为被提交的图片来自质量变化高度和可能低开始。

图像的质量应尽可能高,不超过最大文件大小限制。

我唯一的解决方案是以不同的质量保存图像的几个版本,检查每个文件的大小,并选择最好的一个。这有效,但非常缓慢并且过程密集。

有关如何做得更好的建议?

谢谢

+0

如果您决定采用“多个版本”路线,您可以创建一个简单的学习算法,根据之前结果的平均值在第一次迭代中选择维度。这将使算法随着时间的推移更有效率。 – BazzyTK

回答

-1

不幸的是,估计最终文件的大小并不是你可以做的,因为你无法访问JPEG编码器的内部状态。

你可以做的一件事是压缩一个较小的图像版本并从那里推断。宽度和高度减少4意味着计算机只能处理十六分之一的像素。这里的诀窍是如何准备有代表性的测试图像。使用imagecopyresampled()或imagecopyresized()缩小图像将不起作用。它太多地改变了压缩特性。相反,你想要做的是每第四个8x8片从原来的图像复制:

$width1 = imagesx($img1); 
$height1 = imagesy($img1); 
$width2 = floor($width1/32) * 8; 
$height2 = floor($height1/32) * 8; 
$img2 = imagecreatetruecolor($width2, $height2); 
for($x1 = 0, $x2 = 0; $x2 + 8 < $width2; $x1 += 32, $x2 += 8) { 
    for($y1 = 0, $y2 = 0; $y2 + 8 < $height2; $y1 += 32, $y2 += 8) { 
     imagecopy($img2, $img1, $x2, $y2, $x1, $y1, 8, 8); 
    } 
} 

压缩在不同的质量级别较小的图像和获取尊重的文件大小。将它们乘以16来得出对于原始图像会得到什么的相当好的估计。

+0

有趣,谢谢。 – user1017063

+0

你有没有例子? – Bytemain

0

不,这是最佳的可能。