- 浏览: 344979 次
文章分类
最新评论
-
亚当爱上java:
"给pre-commit添加可执行权限:chmod ...
svn强制要求提交注释--pre-commit钩子 -
rosasyou:
不知道这篇文章是怎么才让人看的?估计不是浏览器兼容问题。 ,与 ...
Zend Framework的DB处理 -
jinjiankang:
$youngest=`svnlook youngest $sv ...
svn备份策略 -
wangxc:
你好,我按照你介绍的方法在创建完weekly_backup.p ...
svn备份策略 -
yangfuchao418:
...
关于memcached的浅见
http://blog.lizhigang.net/archives/228 这次乐高的题目是如何提高图片的压缩率。帮助公司省流量的费用。 整个过程持续一周。最终的结果相当让人满意,压缩率比之前提高了67.5%,为公司每个月省下至少2W多RMB的流量费用=。= 而且这次的研究也让我对图片的压缩有了一定的心得。 马上分享一下: 大家对加水印这块无异议,仅在压缩上面做了文章,我只贴这里的代码。 function resize($image, $width, $height, $crop) { $im = new Imagick(); $im->readImageBlob($image); $input_width = $width; $input_height = $height; $src_width = $im->getImageWidth(); $src_height = $im->getImageHeight(); $width_rate = $src_width/$width; $height_rate = $src_height/$height; if($width_rate>1||$height_rate>1){ if($crop){ if($width_rate>$height_rate){ $width = $src_width/$height_rate; }else{ $height = $src_height/$width_rate; } }else{ if($width_rate>$height_rate){ $height = $src_height/$width_rate; }else{ $width = $src_width/$height_rate; } } $im->resizeImage($width, $height, Imagick::FILTER_CATROM, 1, false); if($crop){ if($width>$input_width){ $im->cropImage ( $input_width , $height , ($width-$input_width)/2 , 0 ); }elseif($height>$input_height){ $im->cropImage ( $width , $input_height , 0 , ($height-$input_height)/2 ); } } } $im->setImageCompression(Imagick::COMPRESSION_JPEG); $im->setImageCompressionQuality(75); $im->stripImage(); $im->setImageFormat(‘JPEG’); $blob = $im->getImageBlob(); $im->clear(); $im->destroy(); return $blob; } function resize($image,$width,$height,$crop) { $imagick = new Imagick(); $imagick->readImageBlob($image); $imagick->setImageCompression($compression_type); $imagick->setImageCompressionQuality(80); if($crop) { $imagick->cropThumbnailImage($width, $height); }else{ $imagick->resizeImage($width, $height, Imagick::FILTER_CATROM, 1, true); } $imagick->stripImage(); $processed_image = $imagick->getImageBlob(); return $processed_image; } function resize($image, $width, $height, $crop) { $imagick = new Imagick(); $imagick->readImageBlob($image); if ($crop) { $imagick->cropThumbnailImage($width, $height); } else { $imagick->resizeImage($width, $height, Imagick::FILTER_LANCZOS, 1, true); } $imagick->setImageFormat(‘JPEG’); $imagick->setImageCompression(Imagick::COMPRESSION_JPEG); $a = $imagick->getImageCompressionQuality() * 0.75; if ($a == 0) $a = 75; $imagick->setImageCompressionQuality($a); $geo = $imagick->getImageGeometry(); $imagick->ThumbnailImage($geo['width'], $geo['height']); $imagick->stripImage(); $blob = $imagick->getImageBlob(); $imagick->clear(); $imagick->destroy(); return $blob; } function resize($image, $width, $height, $crop) { $imagick = new Imagick(); $imagick->readImageBlob($image); $w = $imagick->getImageWidth(); $h = $imagick->getImageHeight(); if ($w > $width || $h > $height) { if ($crop) { $imagick->cropThumbnailImage($width, $height); } else { $imagick->resizeImage($width, $height, Imagick::FILTER_CATROM, 1, true); } } $imagick->setImageFormat(‘JPEG’); $imagick->setImageCompression(Imagick::COMPRESSION_JPEG); $a = $imagick->getImageCompressionQuality() * 0.75; if ($a == 0) { $a = 75; } $imagick->setImageCompressionQuality($a); $imagick->stripImage(); $blob = $imagick->getImageBlob(); $imagick->clear(); $imagick->destroy(); return $blob; } 对300张生产环境下抽取的原始图片进行测试,结果如下: 性能方面都符合要求。除了第3组比示例代码慢5%左右,其他两组都比示例代码更快(1组约快15%,2组约快6%) 之后,综合3组的代码,弄了个best版本,测试结果为,
优化前:
第一小组:
第二小组:
第三小组:
最终解决方案:
看下成绩:
29,220,912 (28,536KB)
11,282,151 (11,018KB) 比示例代码节省: 61.39%
16,281,139 (15,900KB) 比示例代码节省: 44.28%
10,531,926 (10,285KB) 比示例代码节省: 63.96%
2组提交太慢太快,有一处遗漏,其实可以简单提高压缩比到58%左右
9,626,986 (9,401KB) 比示例代码节省: 67.05%
总结 :
1、压缩率尽可能的小,这个要和业务部门商量,找到一个平衡点。(请注意best方法设置品质方法使用获取到当前图片的压缩率然后再取75%,如果当前图片压缩率为60%,如果使用$imagick->setImageCompressionQuality(80)方法将使图片压缩率提高至80%,这会使图片变大!!!)
2、一定要移除图片的exif信息!!!! 这部分内容详情请查看 http://baike.baidu.com/view/22006.htm
3、压缩尺寸使用Imagick::FILTER_CATROM方法对速度有一定的提升,图片本身的品质没有大的变化。
4、$imagick->setImageFormat(‘JPEG’)也很给力。
5、简单算了一下,这几行代码每个月给我们公司省至少2W RMB的流量费用,如果我们的图片库越来越大,那将更加给力了。
发表评论
-
PHP程序员面临的成长瓶颈
2010-10-25 10:06 2015作为Web开发中应用最广泛的语言之一,PHP有着大量的粉丝 ... -
URL重写相关
2010-07-26 18:13 1210初级URL重写指南 http://lamp.lin ... -
关于PHP的mod_rewrite重写模块技术个人觉得最好的一篇文章
2010-07-26 09:30 2254最近手里一个PHP项目要用到mod_rewrite模块,很 ... -
PHP源代码分析- tick(s)
2010-07-24 10:13 1977By Altair, http://www.phpint ... -
php多线程编程
2010-07-21 23:52 1057http://www.cnblogs.com/niniwzw/ ... -
php pcntl_fork和pcntl_fork 的用法
2010-07-21 22:23 2141http://www.jb51.net/article/177 ... -
探讨高并发写入文件内容
2010-07-11 22:48 2825读写相关的问题是永远存在的,文件锁就是为了解决这个问题而做的, ... -
php中,高并发状态下文件的读写
2010-07-11 22:28 8782对于日IP不高或者说并发数不是很大的应用,一般不用考虑这些 ... -
HTTP POST from PHP, without cURL
2010-07-06 17:28 1620Update May 2010: This is one ... -
php fsockopen解决办法。
2010-07-06 15:07 3176Author:David | English Ver ... -
用 PHP V5 开发多任务应用程序
2010-07-04 00:39 1229http://www.ibm.com/developerw ... -
git使用总结
2010-07-02 23:51 1358http://zhwen.org/?p=articles/gi ... -
Linux消息队列原理与应用
2010-07-02 18:03 9512http://www.wanglong-neu.cn/ ... -
我说PHPer的水平区分(转载)
2010-07-02 10:55 1465说句实话,写这个真够无 ... -
正则表达式解题经验谈
2010-06-29 22:08 1091正则表达式解题经验谈 ... -
深入浅出之正则表达式
2010-06-28 21:14 799dragon.cnblogs.com/archive/2006 ... -
stream_set_blocking让程序无阻塞
2010-06-28 09:48 1381stream_set_blocking让程序 ... -
什么是Socket?Socket协议的形象描述
2010-06-28 00:11 1581socket的英文原义是“ ... -
完善匹配中文的Php正则表达式
2010-06-11 16:15 2293这段时间试图使用php正 ... -
php反射
2010-06-07 20:14 15171。用途: 该扩展分析php程序,导出或提取出关于类、方法、属 ...
相关推荐
实验报告介绍了奇异值分解在彩色图片压缩中的应用研究。详细解释了奇异值分解的原理,通过分解任意矩阵为三个部分的乘积来实现数据压缩。其次,提供了奇异值分解的代码实现过程,展示了对彩色图片进行压缩的结果。...
而每次都上传原始大小的图片(后台处理压缩)十分影响用户体验,所以研究了一下通过canvas压缩图片并上传的方法,以下是整理的一些思路和心得: 一、<input type="file">获取本地图片,并将图片绘制到画布中。...
通过这篇文章,我们可以了解到作者在学习 WINFORM 和 WPF 的过程中所获得的一些经验和心得。文章分为多个部分,分别介绍了 WINFORM 实用工具、WPF 嵌入 FLASH、INKCANVAS 技术等。 WINFORM 实用工具 首先,作者...
12. 性能优化:包括减少HTTP请求、压缩资源、利用缓存、优化图片大小等,以提升网页加载速度和用户体验。 13. 调试工具:开发者工具是每个前端工程师的必备武器,如Chrome DevTools,用于调试JavaScript、分析网络...
* 图片压缩与编辑:压缩图片为 jpeg 等格式,使用acdsee 等工具 * 统计图表的制作:使用 PowerPoint 或 Excel 等软件 * 插入多媒体与动画:插入 avi 等多媒体和 swf 动画 * 其他文字与动画技巧:制作不断闪烁的文字...
【jQuery框架心得】 jQuery是由John Resig创建的一个高效、简洁的JavaScript库,它极大地简化了JavaScript的DOM操作、事件处理、动画制作以及AJAX交互。jQuery的理念是“WRITE LESS, DO MORE”,即通过少量的代码...
此外,网站的性能优化同样关键,包括图片压缩、代码压缩、缓存策略等,都是提升网站加载速度的有效手段。 在开发过程中,遇到了许多问题,例如浏览器兼容性、安全漏洞和性能瓶颈等。通过查阅资料、参与论坛讨论,...
网站的优化同样重要,包括代码优化、图片压缩和SEO策略。优化不仅能提高网页加载速度,还能提高搜索引擎的可见度,从而吸引更多的访问者。 个人网站的建立通常包括前端和后端两部分。前端设计涉及网页的视觉呈现,...
以下是我从提供的文件内容中提炼出的一些关键知识点: 1. **标题的重要性**:标题不仅是网页的“脸面”,更是网页内容的浓缩体现。一个吸引人的、具有概括性的标题能第一时间引起浏览者的兴趣,它需要简洁、有特色...
在深入探讨游戏资源解包的心得与思想之前,我们首先需要理解什么是“游戏资源解包”。游戏资源解包,简而言之,就是将游戏中的各种资源(如图像、音频、视频等)从游戏的安装包或运行时加载的资源文件中提取出来的...
- 页面加载速度优化:如延迟加载、图片压缩、减少HTTP请求、利用缓存等策略。 - 性能监控:使用Lighthouse、PageSpeed Insights等工具评估和改进网站性能。 6. **前端开发**: - 响应式设计:确保网页在不同设备...
这种文件实际上是经过加密和压缩的,包含JavaScript代码、WXML(微信小程序的标记语言)、WXSS(微信小程序的样式表)以及图片和其他资源。解包过程通常包括解密和解析两个步骤。 解密`.wxapkg`文件通常需要用到...
可以通过减少数据库查询、缓存频繁访问的数据、压缩响应、使用GZIP等方式提升性能。同时,使用ASP.NET的输出缓存,可以显著减少服务器的负载。 10. **持续集成与自动化测试** 通过引入持续集成工具如Jenkins或...
图片优化:采用图片压缩技术,确保网站加载速度快,同时保持图片的高质量。 页面模块介绍: 首页:展示车展的亮点、参展车型、时间地点等信息,通过轮播图展示最新车型。 车型展示:按品牌、类型或价格分类展示汽车...
在信息技术中,数据可能被分类为结构化数据(如数据库中的记录)和非结构化数据(如文本、图片或音频文件)。这种分类有助于提高检索效率,确保信息安全,并便于数据分析。 其次,数据的循环利用类似于可回收垃圾的...
一个页面的细节,从重构的角度去看,页面的精细度,代码的可读性、扩展性,为下游服务的代码注释,交互接口样式的书写,代码的压缩,图片的优化等都可以归为细节处理。一个页面的细节,从重构的角度去看,页面的精细...
因此,建议对大图片进行压缩,或者使用LazyLoading策略只加载可视区域内的内容。 2. 检查触摸事件冲突:有时,ScrollView内的其他组件可能需要处理触摸事件,这时可能需要重写onInterceptTouchEvent()和onTouchEvent...