php / Laravel - 如何按文件大小压缩上传的图像文件

时间:2016-04-08 02:42:50

标签: php image laravel-5 laravel-5.2 image-compression

我发现图像可以压缩一定比例。例如:

$compressed_img = compress($source_img, $destination_img, 90);

在这种情况下,$source_img的大小将减少到原始大小的90%。 如果原始大小为$source_img 100kb,则$compressed_img的大小为90kb。

我一直在尝试做的是确定是否根据原始大小压缩目标文件,并确定将按字节减少多少大小。

例如,如果您需要确保所有上传的文件都低于200kb 如果上传的尺寸已经轻于,则不能更改尺寸?

这是伪代码。

if($source > 200kb){
    $compressed = compressByByte($source, 200kb);
}//Again, this is a sude code!

由于源文件的大小不同,使用compress()函数是不切实际的。

任何建议将不胜感激。 (我在Laravel 5.2中使用php)

1 个答案:

答案 0 :(得分:0)

我认为你从错误的假设开始,当你压缩图像时你可以指定压缩因子,但这并不意味着输出是原始大小的90%,它很大程度上取决于图像的内容,有些图像可以更好地压缩其他图像(单色图像可以比普通照片小)。

那说你能做的就是

  1. 循环所有图像
  2. 检查图像是否大于您定义的阈值大小(例如200k
  3. 对于每个图像,将图像的压缩版本保存为临时文件
  4. 使用临时尺寸面对原始图像尺寸,您可以选择保留原始尺寸或使用新的压缩尺寸。
  5. 请记住,增加JPEG中的压缩会降低图像的质量,如果压缩过高,您会开始在图像中看到低难度的错误,通常我们不会在85下使用压缩。