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); $filename=”http://localhost.com/snapshots/picture.png"; $img=imagecreatefrompng($filename); $this->_response->setHeader('Content-Type','image/png'); imagepng($img,null,9); 图像处理(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 imagepng($img,null,0);-->尺寸=225K imagepng($img,null,1);-->尺寸=85.9K imagepng($img,null,2);-->尺寸=83.7K imagepng($img,null,3);-->尺寸=80.9K imagepng($img,null,4);-->尺寸=74.6K imagepng($img,null,5);-->尺寸=73.8K imagepng($img,null,6);-->尺寸=73K imagepng($img,null,7);-->尺寸=72.4K imagepng($img,null,8);-->尺寸=71K imagepng($img,null,9);-->尺寸=70.6K 这些结果看起来准确吗?我不确定为什么质量为0时,图像大小大于实际大小 其次,这是在PHP中压缩图像,然后在浏览器中渲染图像以提高性能的最佳方法 根据建议,最好在保存时压缩一次图像-我挖掘了flash程序调用的代码以生成快照- $video = $this->_getParam('video'); $imgContent = base64_decode($this->_getParam('snapshot')); file_put_contents("snapshots/" . $video . ".png", $imgContent); $video=$this->_getParam('video'); $imgContent=base64_decode($this->\u getParam('snapshot'); 文件内容(“快照/”$video..png“,$imgContent); 编辑 根据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); $video=$this->_getParam('video'); $imgContent=base64_decode($this->\u getParam('snapshot'); 文件内容(“快照/”$video..png“,$imgContent); $filename=“快照/”$video。“.png”; $img=imagecreatefrompng($filename); imagejpeg($img,'test.jpg',75); 这是一个三步的过程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); $file
这是最好的解决方法。您还不了解最后一个参数,这不是质量,而是压缩级别,因此增加它将减小图像大小。不管怎样,我以前使用过这种方法来压缩png图像,效果很好,所以我认为你应该继续使用它。1-结果似乎很准确,因为
0
表示不压缩
品质
压缩级别:从0开始(否
压缩)至9
0
ed文件比原始文件大是正常的(首先可以稍微压缩)。您需要了解文件压缩和PHP GD图像构造函数
2-IMHO,最明智的选择是在将png文件上传到服务器之前压缩它们(当然,只有在您有选择的情况下才会声明:静态,很少文件)
为此提供帮助:
如果它是动态的,php就是选择。因为PNG使用无损数据压缩,所以在PNG图像中实现良好压缩的唯一方法是将其保存为调色板(而不是真彩色)并减少颜色数量。您似乎正在处理某种屏幕截图。如果使用有损压缩,即另存为JPEG,则可能会获得较小的文件大小。在这两种情况下,都会减少文件大小和图片质量。您也可以尝试GIF格式,对于小图形,GIF格式往往较小 最后但并非最不重要的一点是,您应该压缩图像一次(通常在上传图像时),而不是每次提供图像时。我想你的代码只是一个快速测试,但我只是以防万一 更新问题的答案:
我不熟悉PHP图像函数,但您可能应该结合使用和。也,考虑是否需要保留原始PNG以供将来参考,或者可以丢弃它。原始图像的位深度是多少?我不太清楚什么是位深度意味着?谢谢?你需要一个PHP解决方案吗?谢谢MCK -是的,我知道最后一个参数是压缩级别,但是在PHP手册上,它把它称为质量。这就是我用这个词的原因。谢谢你确认我走上了正确的道路。谢谢Chouchenos-我在某个地方读到,无论你指定的压缩级别是什么,大小都不能超过原始图像-但我想在评论之前我需要了解整个文件压缩的内容。谢谢你的链接-现在我没有选择在上传之前压缩它们,所以我必须使用此选项-但感谢提供的资源。非常感谢。请看我编辑的问题,我在哪里发布了保存png文件的代码感谢Alvaro提供了很好的提示-我没有想到将它们最初保存为jpg或gif格式-现在有一个flash网络摄像头录像机,它可以记录视频并将快照图像创建到我正在阅读的目录中在浏览器中显示-我可能需要进行适当的修复,并查看图像最初是如何保存的,而不是每次压缩图像,因为@Chochenos也建议了相同的方法-谢谢请查看我编辑的问题,我在哪里发布了保存png文件的代码谢谢Alvaro-我能够使用您提到的功能创建一个jpg文件,将大小降低一倍。但是现在我有一个2步的过程-步骤1)使用文件内容-生成图像。步骤2)使用imagecreatefrompng和imagejpeg压缩图像。另外,我也不需要保留原始的png文件。所以我需要第三步删除该文件。所以这三个步骤的过程-这是最好的方法吗-thanksI已经更新了这个问题,包括您建议的生成jpg文件的方法-谢谢