Images as a percentage of page weight for the Alexa top 10 global web sites  
图片在站点所占的比重越来越重。更好的优化图片能够提高站点速度。降低宽带流量。

1.对用户上传图片进行缩放

对于用户自己上传的图片不能简单的 用css大小限制,由于这样每次载入图片时候还是会载入整幅大图。占用多余的宽带,而且影响页面载入速度。应该依据实际显示须要进行缩放。比方我想要用户相冊里的图片大小不能超过500x300:

用ImageMagick处理起来非常简单

  1. convert -resize "500x300>" input.jpg  output.jpg #假设图片比500x300小就保持原样,以防小图片被放大失真。

2.生成不同比例缩略图

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

3.去除多余信息

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

  1. convert -strip input.jpg output.jpg

4.调节压缩比

大多时候,我们的站点并不须要那么清楚的图片,适量调节JPG图片的压缩比会降低图片大小,肉眼并不会分辨出质量被压缩后的图片。通常75%是最佳比例。

  1. convert -quality 75% input.jpg output.jpg

上面几个步骤能够一次搞定:

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

上面说的都是针对JPG格式的处理方式,以下说一下BMP,GIF,PNG等格式的处理。 
对于BMP直接转成JPG就能够了。再依照上面的方式处理。

而GIF和PNG貌似有些特殊。GIF的一些特性(动画效果,透明等)是JPG沒有的,能够依据实际情况选择转或不转,假设转换成jpg,取第一帧仅仅须要这样:

  1. convert -format jpg input.gif input.jpg

PNG也能够通过降低PNG图片color数量的办法达到压缩的目的。可是这样的办法压缩出来的图像能够明显看出来失真,而且呈锯齿状。 
对于真实世界的PNG图片(通常指照片),一般先转换成JPG,再通过上面的办法来压缩。

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

关于图片扩展名

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

注:把上面的命令行用mini_magick改写用到rails里非常easy的。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

ImageMagick 压缩图片 方法的更多相关文章

  1. vue2.X + HTML5 plus 拍照和调用设备相册 另附 图片转base64和压缩图片方法

    HTML5 部分 <button @click="tesCamera()" type="button" :disabled="isshStatu ...

  2. js 压缩上传的图片方法(默认上传的是file文件)

    //压缩图片方法 function compressImg(file,callback){ var src; var fileSize = parseFloat(parseInt(file['size ...

  3. HTML-js 压缩上传的图片方法(默认上传的是file文件)

    //压缩图片方法 function compressImg(file,callback){ var src; var fileSize = parseFloat(parseInt(file['size ...

  4. Android压缩图片到100K以下并保持不失真的高效方法

    前言:目前一般手机的相机都能达到800万像素,像我的Galaxy Nexus才500万像素,拍摄的照片也有1.5M左右.这么大的照片上传到服务器,不仅浪费流量,同时还浪费时间. 在开发Android企 ...

  5. ios中摄像头/相册获取图片,压缩图片,上传服务器方法总结

    相册 iphone的相册包含摄像头胶卷+用户计算机同步的部分照片.用户可以通过UIImagePickerController类提供的交互对话框来从相册中选择图像.但是,注意:相册中的图片机器路径无法直 ...

  6. 文件上传,服务端压缩文件方法,重点是png与gif图片的压缩,保证了透明度与动画

    /// <summary> /// 上传文件帮助类 /// </summary> public class ImageUploadHelper { #region SaveVi ...

  7. .NET压缩图片保存 .NET CORE WebApi Post跨域提交 C# Debug和release判断用法 tofixed方法 四舍五入 (function($){})(jQuery); 使用VUE+iView+.Net Core上传图片

    .NET压缩图片保存   需求: 需要将用户后买的图片批量下载打包压缩,并且分不同的文件夹(因:购买了多个用户的图片情况) 文章中用到了一个第三方的类库,Nuget下载 SharpZipLib 目前用 ...

  8. ios中摄像头/相册获取图片压缩图片上传服务器方法总结

    本文章介绍了关于ios中摄像头/相册获取图片,压缩图片,上传服务器方法总结,有需要了解的同学可以参考一下下.     这几天在搞iphone上面一个应用的开发,里面有需要摄像头/相册编程和图片上传的问 ...

  9. node.js中使用imagemagick进行图片裁剪压缩

    node.js中使用imagemagick进行图片裁剪压缩 安装imagemagick sudo apt-get install imagemagick or wget http://www.imag ...

随机推荐

  1. (转)WINDOWS内核对象

    WINDOWS内核对象 原文地址:http://blog.csdn.net/misterliwei/article/details/976988  支持原创 一.前言 Windows中有很多像进程对象 ...

  2. JavaScript基础知识----document对象

    对象属性document.title                 //设置文档标题等价于HTML的<title>标签document.bgColor               //设 ...

  3. Aptana Studio 3 官方汉化包汉化

    Babel Language Pack Update Site for Helios This URL is an Eclipse software repository:http://downloa ...

  4. 第一章:介绍Django

    django简单来说就是一个Web开发框架.Web框架为应用程序提供了一套程序框架,这样你可以专注于编写清晰.易维护的代码,而无需从头做起. models.py文件主要用一个Python类来描述数据表 ...

  5. spring mvc实现ajax 分页

    使用到的技术: ·spring 3 mvc ·json ·jquery ·java ·mysql 首先,要了解如何在spring mvc中使用json. 以下主要从Dao和View及Controlle ...

  6. 谷歌三大核心技术(一)The Google File System中文版

    谷歌三大核心技术(一)The Google File System中文版  The Google File System中文版 译者:alex 摘要 我们设计并实现了Google GFS文件系统,一个 ...

  7. Windows Azure 网站上的 WebSocket 简介

    编辑人员注释:本文章由 Windows Azure 网站团队的首席项目经理 Stefan Schackow 撰写. Windows Azure 网站最近新增了对 WebSocket 协议的支持..NE ...

  8. Python用subprocess的Popen来调用系统命令

    当我们须要调用系统的命令的时候,最先考虑的os模块.用os.system()和os.popen()来进行操作.可是这两个命令过于简单,不能完毕一些复杂的操作,如给执行的命令提供输入或者读取命令的输出, ...

  9. large-scale analysis of malware downloaders

    http://www.christian-rossow.de/publications/downloaders-dimva12.pdf

  10. NYoj-街区最短路径问题

    街区最短路径问题 时间限制:3000 ms  |  内存限制:65535 KB 难度:4 描写叙述 一个街区有非常多住户,街区的街道仅仅能为东西.南北两种方向. 住户仅仅能够沿着街道行走. 各个街道之 ...