php 压缩过的图片失真,php压缩图像显示不同的结果

标签:php

我正在使用firebug页面速度实用程序,其中一个建议是压缩图像 – 所以我编写了以下代码来压缩图像

$filename="http://localhost.com/snapshots/picture.png";

$img = imagecreatefrompng($filename);

$this->_response->setHeader('Content-Type', 'image/png');

imagepng($img,null,9);

imagedestroy($img);

现在实际图像大小为154K

所以我通过提供不同的质量水平进行实验,这就是我发现的

imagepng($img,null,0); --> Size = 225K

imagepng($img,null,1); --> Size = 85.9K

imagepng($img,null,2); --> Size = 83.7K

imagepng($img,null,3); --> Size = 80.9K

imagepng($img,null,4); --> Size = 74.6K

imagepng($img,null,5); --> Size = 73.8K

imagepng($img,null,6); --> Size = 73K

imagepng($img,null,7); --> Size = 72.4K

imagepng($img,null,8); --> Size = 71K

imagepng($img,null,9); --> Size = 70.6K

这些结果看起来是否准确 – 我不确定质量为0的原因 – 图像尺寸大于实际尺寸.

其次,这是PHP在压缩图像之前压缩图像以提高性能的最佳方式.

基于这些建议,最好在保存时压缩图像一次 – 我挖掘了闪存程序调用的代码以生成快照 –

$video = $this->_getParam('video');

$imgContent = base64_decode($this->_getParam('snapshot'));

file_put_contents("snapshots/" . $video . ".png", $imgContent);

EDITED

根据Alvaro的建议,我对代码进行了以下修改,生成了一个很小的jpg文件

$video = $this->_getParam('video');

$imgContent = base64_decode($this->_getParam('snapshot'));

file_put_contents("snapshots/" . $video . ".png", $imgContent);

$filename="snapshots/".$video.".png";

$img = imagecreatefrompng($filename);

imagejpeg($img,'test.jpg',75);

所以现在这是一个3步骤的过程

>使用file_put_contents创建初始图像

>使用imagecreatefrompng和imagejpeg压缩文件并生成较小的图像

>删除原始图像

这是解决问题的最佳方式吗?

最佳答案:

由于PNG使用无损数据压缩,因此在PNG图像中实现适当压缩的唯一方法(边缘情况除外)是将其保存为调色板(而不是真彩色)并减少颜色数量.您似乎正在处理某种屏幕截图.如果使用有损压缩,即可以保存为JPEG,则可以获得较小的文件大小.在任何一种情况下,都可以减小文件大小和图像质量.您也可以尝试使用GIF格式,对于小图表,这种格式往往较小.

最后但并非最不重要的一点是,您应该压缩图像一次(通常在上传时),而不是每次都提供图像.我想你的代码只是一个快速测试,但我提到以防万一.

回答更新的问题:

我不熟悉PHP图像功能,但您应该使用imagecreatefrompng()和imagejpeg()的组合.另外,请考虑是否需要保留原始PNG以供将来参考,或者您可以丢弃它.

标签:php

来源: https://codeday.me/bug/20190515/1110033.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值