`
Hooopo
  • 浏览: 336065 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

使用ImageMagick为你的网站减重

    博客分类:
  • Ruby
阅读更多
Images as a percentage of page weight for the Alexa top 10 global web sites

图片在网站所占的比重越来越重。更好的优化图片可以提高网站速度。减少宽带流量。

1.对用户上传图片进行缩放
    对于用户自己上传的图片不能简单的 用css限制大小,因为这样每次加载图片时候还是会加载整幅大图。占用多余的宽带,并且影响页面加载速度。应该根据实际显示需要进行缩放。比如我想要用户相册里的图片大小不能超过500x300:
用ImageMagick处理起来很简单
convert -resize "500x300>" input.jpg  output.jpg #如果图片比500x300小就保持原样,以防小图片被放大失真。


2.生成不同比例缩略图
    一般相册等应用,都会提供缩略图和预览图,这些缩略图同样不能简单的用css来限制大小,要为每个图片生成不同比例的预览图。

3.去除多余信息
    Exif信息是数码相机在拍摄过程中采集的一系列信息,这些信息放置在我们熟知的jpg文件的头部,也就是说Exif信息是镶嵌在JPEG图像文件格式内的一组拍摄参数,主要包括摄影时的光圈、快门、ISO、日期时间等各种与当时摄影条件相关的讯息,相机品牌型号,色彩编码,拍摄时录制的声音以及全球定位系统(GPS)等信息。简单的说,它就好像是傻瓜相机的日期打印功能一样,只不过Exif信息所记录的资讯更为详尽和完备。不过,具有Exif信息的JPEG图像文件要比普通的JPEG文件略大一点。还有就是像PS这种软件处理过的图片会有“program comments”。如果不是专业的摄影类网站,这些信息是没有用的,可以去掉:
convert -strip input.jpg output.jpg

4.调节压缩比
    大多时候,我们的网站并不需要那么清晰的图片,适量调节JPG图片的压缩比会减少图片大小,肉眼并不会分辨出质量被压缩后的图片。通常75%是最佳比例。
convert -quality 75% input.jpg output.jpg


上面几个步骤可以一次搞定:

convert -resize "500x300" -strip -quality 75% input.jpg output.jpg


上面说的都是针对JPG格式的处理方式,下面说一下BMP,GIF,PNG等格式的处理。

对于BMP直接转成JPG就可以了。再按照上面的方式处理。

而GIF和PNG貌似有些特殊。GIF的一些特性(动画效果,透明等)是JPG没有的,可以根据实际情况选择转或不转,如果转换成jpg,取第一帧只需要这样:
convert -format jpg input.gif input.jpg


PNG也可以通过减少PNG图片color数量的办法达到压缩的目的。但是这种办法压缩出来的图像可以明显看出来失真,而且呈锯齿状。

对于真实世界的PNG图片(通常指照片),一般先转换成JPG,再通过上面的办法来压缩。

但是要注意一点,透明或半透明的PNG图片在转换成JPG时透明部分会变成黑色。。。建议做用户头像时候不要转成JPG。。很难看~~~
本人头像就是深受毒害。。

关于图片扩展名

发现大部分网站喜欢把用户上传的图片(头像,相册等)都统一转成特定格式(一般都是jpg)。这样做的潜在弊端就是在用像ImageMagick这样的软件处理的时候会根据扩展名做隐式格式转换。
个人觉得在保存图片的时候不加扩展名处理起来更灵活一些。

注:把上面的命令行用mini_magick改写用到rails里很容易的。mini_magick本质就调用系统命令行嘛~~

links:
本文所说的都是对用户上传的图片处理,对网站自身的图片(header,banner等)处理《Even Faster Websites》一书第十章里面写的很详细了:
http://www.graphics.com/modules.php?name=Sections&op=viewarticle&artid=756

更多ImageMagick用法:
http://www.imagemagick.org/script/index.php
分享到:
评论
18 楼 zhizedai 2010-04-23  
kamama 写道
用Imagemagick在图片上写中文好像支持不是很好
如果写一串中文是没有问题的,但是如果这个字符串是中文+数字或者字母组成的,如“中文123”那么就会乱码。。。

指定字体 "-font ***.ttf" 就不是乱码了
17 楼 sdh5724 2010-04-10  
pclfs1983 写道
在高访问量的情况下,特别在图片压缩中,imagemagic会占用很多的内存,甚至使jvm直接crash掉,我们现在就在为这个问题头痛



我们明确知道, 现在他有内存泄露。 因此, 不用了。 JAI 也很牛, 虽然编码上困难点, 当然, 要把SUN自己的动态库装上, 才有好的性能。 我们现在一直这么做。
16 楼 pclfs1983 2010-04-08  
在高访问量的情况下,特别在图片压缩中,imagemagic会占用很多的内存,甚至使jvm直接crash掉,我们现在就在为这个问题头痛
15 楼 shuiguozheng 2010-04-06  
好文章,收藏了!
14 楼 kamama 2010-03-31  
用Imagemagick在图片上写中文好像支持不是很好
如果写一串中文是没有问题的,但是如果这个字符串是中文+数字或者字母组成的,如“中文123”那么就会乱码。。。
13 楼 cue2008 2010-03-29  
恩,但是有时候图片对一个网站很重要,不能够缩减图片像素,免得用户体验不好
12 楼 mikeandmore 2010-03-29  
sdh5724 写道
这个东西, 对于使用命令行还是不错的。 但是如果使用C++/jni 接口的时候要十分小心。 由于存在严重的内存泄露, 线程安全问题和CRASH的问题, 以及开发部署的方便性。 我们已经在JAVA应用中放弃了IMAGEMAGTIC的使用。  JAI/IMAGEIO 是JAVA提供的处理工具, 是个不错的东西。 对于大部分情况都能处理。

拿其他语言写个服务,监听一个端口,然后这个东西专门掉imagemagick。
这是我经常避免线程安全问题的方法。
11 楼 sdh5724 2010-03-27  
这个东西, 对于使用命令行还是不错的。 但是如果使用C++/jni 接口的时候要十分小心。 由于存在严重的内存泄露, 线程安全问题和CRASH的问题, 以及开发部署的方便性。 我们已经在JAVA应用中放弃了IMAGEMAGTIC的使用。  JAI/IMAGEIO 是JAVA提供的处理工具, 是个不错的东西。 对于大部分情况都能处理。
10 楼 mikeandmore 2010-03-27  
imagemagick是*nix上的killer app啊。。
9 楼 qichunren 2010-03-26  
swen00 写道
你这个是需要安装他的软件,如果我在项目中如何使用?java用Runtime exec执行命令转化?

ImageMagick有相应的java实现的。

http://sourceforge.net/projects/jmagick/
8 楼 swen00 2010-03-26  
你这个是需要安装他的软件,如果我在项目中如何使用?java用Runtime exec执行命令转化?
7 楼 palmer 2010-03-26  
ImageMagick is free software delivered as a ready-to-run binary distribution or as source code that you may freely use, copy, modify, and distribute. Its license  is compatible with the GPL. It runs on all major operating systems.


It's great!
6 楼 Hooopo 2010-03-24  
花花公子 写道
用freeimage/image_science

花花可以说说freeimage/image_science比Imagemagick有啥优势吗?
据说flickr由ImageMagick换成GraphicsMagick是因为速度原因,虽然Imagemagick功能强大但是都是些用不到的。。

ps:花花你的非主流爱好真多啊....
5 楼 Hooopo 2010-03-24  
case0079 写道
不知道具体压缩效果怎么样.希望有这样的比较报告.我试验过几种图片处理工具类.
好多压缩效果不怎么样.压缩比例一大图像就看不清了.

效果嘛。。一般1~2M的大图可以压缩到50k左右。特别适用于风景图片非常多的网站,比如我们公司网站:

http://www.beibaotu.com
4 楼 robertliudeqiang 2010-03-24  
图片网站可以好好用用这个工具。
3 楼 花花公子 2010-03-23  
用freeimage/image_science
2 楼 case0079 2010-03-23  
不知道具体压缩效果怎么样.希望有这样的比较报告.我试验过几种图片处理工具类.
好多压缩效果不怎么样.压缩比例一大图像就看不清了.
1 楼 felsenlee 2010-03-22  
很实用的工具,还有接口供自己的程序调用,慢慢研究下

相关推荐

    在 Linux 中使用 ImageMagick 命令行操作图像文件.docx

    convert 命令将使用你提供的文件名来确定最终想要的文件类型并相应地修改图像。 如果怀疑转换是否有问题,可以随时使用 od 命令检查每个文件的开头: [root@localhost data]# od -bc penguins.jpg |head -60000000...

    ImageMagick7.0.8 win64 16安装包下载。使用moviepy抛ImageMagick异常问题解决

    使用ImageMagick的创建,编辑,撰写,或转换位图图像。它可以读取和写入各种格式(超过200种)的图像,包括PNG,JPEG,GIF,HEIC,TIFF,DPX,EXR,WebP,Postscript,PDF和SVG。使用ImageMagick可以调整图像大小,...

    Java图片处理解决方案:ImageMagick快速入门教程.docx

    在 Java 中使用 ImageMagick 需要先确认 JDK、Maven 正确安装,然后引入依赖 IM4Java 是 ImageMagick 的 Java API 包,它将 Java 代码转化成对 ImageMagick 的命令行调用。 IM4Java 的作用是将 Java 代码转成对 ...

    phpthumb使用ImageMagick来生成缩略图

    《使用ImageMagick通过phpthumb生成缩略图详解》 在网页开发中,生成缩略图是一项常见的需求,尤其在处理用户上传的图片或者构建图片展示平台时。PHP作为常用的服务器端脚本语言,有着丰富的图像处理库。本文将重点...

    php中ImageMagick安装教程;ImageMagick安装包;ImageMagick安装注意事项;pdf转img

    ImageMagick安装包;ImageMagick安装注意事项;pdf转imgphp中ImageMagick安装教程;ImageMagick安装包;ImageMagick安装注意事项;pdf转imgphp中ImageMagick安装教程;ImageMagick安装包;ImageMagick安装注意事项;...

    Java图片处理工具ImageMagick

    ImageMagick是由C语言编写的,但通过Java的JNI(Java Native Interface)技术,可以无缝集成到Java环境中,为Java开发者提供了丰富的图像处理功能。 ImageMagick的核心功能包括: 1. 图像转换:可以将一种图像格式...

    WINDOWS下thinkphp5.0+php 7.0使用ImageMagick+Ghostscript把网页面内容转化为png图片

    如果你使用的是GD库,可以使用PHP的`imagepng()`函数来保存生成的图像。但考虑到需要处理HTML和PDF,更推荐使用Imagick扩展,它提供了对ImageMagick更全面的接口。在PHP 7.0中,你可以通过以下步骤安装Imagick扩展:...

    linux下可用的静态ImageMagick C库

    总的来说,"linux下可用的静态ImageMagick C库"是一个为Linux开发人员准备的便捷工具,它简化了图像处理功能的集成,避免了依赖管理的复杂性,但仍需要开发者具备一定的C语言和ImageMagick API使用经验。

    ImageMagick使用手册-英文原版

    ### ImageMagick 使用手册知识点概览 #### 一、ImageMagick简介 ImageMagick是一款功能强大的开源软件工具集,用于创建、编辑或合成位图图像。它可以在图像上执行的操作包括转换颜色空间、应用模糊、锐化、噪点、...

    ImageMagick

    ImageMagick是一款强大的开源跨平台图像处理工具,它在IT领域中被广泛使用,尤其在网站开发、自动化脚本和图形设计中。这个工具能够读取、转换和写入多种图像格式,支持超过200种不同的图像文件类型,包括常见的JPEG...

    ImageMagick安装支持heic格式.docx

    本文将详细讲解如何在Windows和Linux环境下,通过Java使用ImageMagick库来支持和转换HEIC图片格式。 ImageMagick是一个开源的命令行工具集合,用于读取、转换和写入多种图像格式。在Linux系统中,为了使ImageMagick...

    64位Linux安装ImageMagick

    在64位Linux环境下安装ImageMagick,特别是与JMagick配合使用,是一个涉及多个步骤的过程,主要目的是为了实现Java应用程序对ImageMagick图像处理功能的调用。以下是详细的安装步骤和相关知识点: 1. **卸载旧版本*...

    ImageMagick-6.9.11-16.tar.gz ImageMagick图像软件下载

    在标题提到的版本“ImageMagick-6.9.11-16.tar.gz”中,我们看到的是一个压缩包文件,其格式为tar.gz,这是一种常见的Linux/Unix系统中的归档和压缩格式。 ImageMagick的主要功能包括但不限于以下几点: 1. 图像...

    python使用moviepy时需要用到的库imagemagick

    安装`imagemagick`通常可以通过访问其官方网站下载对应版本的安装包,例如提供的`ImageMagick-7.1.0-Q16`,这可能是适用于特定平台(如Windows、Linux或macOS)的版本。安装过程中,确保将`imagemagick`的可执行文件...

    ImageMagick-6.9.3-7-vc11-x64.zip

    如果你打算在PHP中使用ImageMagick,通常会通过PHP的Imagick扩展来调用这些底层功能。通过这个扩展,开发者可以在PHP脚本中方便地进行复杂的图像处理。 `lib`目录包含库文件,这些是ImageMagick的动态链接库(DLLs...

    Imagemagick6.8.9-6.9.3

    较低版本的imagemagick,使用 imagemagick的扩展库必须使用比扩展库低的版本才行,包含三个版本。 ImageMagick-6.8.9-6-Q16-x86-dll_.exe ImageMagick-6.9.2-1-Q16-x64-dll.exe ImageMagick-6.9.3-7-vc14-x86.zip

    ImageMagick-7.0.7-11-vc15-x64.zip

    1. **LICENSE**:这是ImageMagick的许可文件,它遵循Apache 2.0许可证,意味着你可以自由地使用、修改和分发该软件,但需遵守一定的条件,如保持原有版权信息。 2. **bin**:这个目录包含了ImageMagick的可执行文件...

    ImageMagick.tar.gz

    这将创建一个名为`ImageMagick-6.7.5-0`的目录,包含源代码。 2. 进入解压后的目录: ```bash cd ImageMagick-6.7.5-0 ``` 3. 在编译前,确保你的系统已经安装了必要的依赖库,例如: - libjpeg(JPEG支持) - ...

Global site tag (gtag.js) - Google Analytics