一 安装ImageMagick

1.安装依赖库

yum install libjpeg* libpng* freetype* gd*

2.安装ImageMagick

yum install ImageMagick

3.测试安装是否成功

convert -quality 75% 1.jpg zoom.jpg

二 java中使用ImageMagick

1.导入jar包

<dependency>
    <groupId>org.im4java</groupId>
    <artifactId>im4java</artifactId>
    <version>1.4.0</version>
</dependency>

2.在代码中使用ImageMagick进行压缩图片

IMOperation operation = new IMOperation();
operation.addImage(orgfileName);
operation.quality(0.75);
operation.addImage(zoomfileName);
ConvertCmd cmd = new ConvertCmd();
cmd.run(operation);

3.检查运行结果

图片被正常压缩,省时省力。

三 使用ImageMagick的常用的方式

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

5.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

参考博客:

使用ImageMagick对图片进行全面压缩

http://www.jb51.cc/article/p-ahzzvatp-bms.html

Java 图片处理解决方案:ImageMagick 快速入门

http://www.cnblogs.com/chanshuyi/p/quick_start_of_image_magick.html

centos6.5 安装ImageMagick&java使用ImageMagick压缩图片的更多相关文章

  1. 浅谈移动端网页图片预加载方案

    这篇文章主要介绍了浅谈移动端网页图片预加载方案 的相关资料,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  2. Canvas与图片压缩的示例代码

    本篇文章主要介绍了Canvas与图片压缩的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  3. ios – 如何通过编程方式为UIButtons组设置单个背景图像

    解决方法要使用选择器数组以编程方式创建按钮,您可以使用以下代码片段://定义策略

  4. iOS启动图像文件类型

    我正在开发一个iPad应用并阅读thispage表示发布图像必须是PNG格式,但在他们的iOS人工指南中,/uploads/20230807/dfd8683904f6d24601aef1a1128c8fa9.png,而不是“必须”.我想使用.jpg格式作为我的发布图像,因为我在.png中的发布图像大小仅为2mb,而.jpg格式只有90kb.谢谢解决方法您需要在Info.plist中指定UILaunhImageFile字段设置此信息将使系统查找Default.jpg及其所有变体而不是.png例如,我正在编写

  5. ios – 删除自定义标签栏上的行

    我制作了一个自定义标签栏,其中一个延伸到栏外.有一条线与中心标签栏重叠.无论如何我可以摆脱这个或隐藏吗?要做到这一点,我只需设置标签栏图像:知道如何隐藏线路吗?谢谢解决方法如果我正确理解你的问题,问题是坐标栏顶部的1-2英寸像素阴影.如果是这种情况,您可以像导航栏一样删除阴影.只需启用剪辑即可.

  6. ios – 无法编辑屏幕截图,performChanges阻止失败

    我正在开发一个允许用户使用PhotoKit编辑照片的应用程序.我之前将编辑过的照片以JPEG格式保存到磁盘.我想避免转换为JPEG,并已实施修改,以便这样做.它适用于使用相机拍摄的照片,但如果您尝试编辑屏幕截图,PHPhotoLibrary.sharedPhotoLibrary().performChanges块将失败并记录操作无法完成.(可可错误-1.).我不确定为什么这会导致performCh

  7. ios – 使用ImageMagick的C API(在iPhone上?)转换为单色?

    我正在使用thispost中引用的代码,但是想切换到基于ImageMagickC-API的解决方案,因为我想在单个图像处理库上进行标准化,并且需要IM来完成其他任务.我可以找到大量使用转换命令行工具的示例,但没有关于如何在代码中进行单色转换的示例.那里有任何示例代码?

  8. ios – UIBarButtonItem更改播放/暂停按钮的图像

    如果我们两个人为什么不工作感到困惑,我认为这是Swift2/Xcode7beta的变化这样做:希望有所帮助!

  9. ios – 使用UIPasteBoard复制图像(Swift)

    我最近看到了这个项目,用户可以从自定义键盘上点击GIF,他们会看到一个“复制”的工具包.我有一个问题:>如何在产品GIF-Tutorial中重现此工具提示?任何人都可以给我一些示例代码来使用.我理解如何使用UIPasteboard及其功能,但是当我在这个函数中输入UTI类型“public.png”时,我似乎无法使它工作:解决方法尝试使用此代码:你可以找到这个如何工作here!希望这可以帮助

  10. ios – 一个项目中不同目标的不同Default.png文件

    我正在尝试在我的项目中设置第二个目标,但是当我将Default*.png文件拖动到目标的LaunchImages部分时,它会告诉我要从我的原始目标覆盖Default.png.我们如何为不同的目标添加不同的启动图像?在您回答之前,请谅解我不是在寻找如何将不同的一般文件或图像包含在不同的目标.我明白,当我将它们拖到目标窗格的“启动映像”部分时,我正在处理关于Default.png启动映像的问题.解决方法在每个项目的info.plist中,您将创建一个指向启动映像的UILaunchImageFile项.

随机推荐

  1. 在airgapped(离线)CentOS 6系统上安装yum软件包

    我有一个CentOS6系统,出于安全考虑,它已经被空气泄漏.它可能从未连接到互联网,如果有,它很长时间没有更新.我想将所有.rpm软件包放在一个驱动器上,这样它们就可以脱机安装而无需查询互联网.但是,我在测试VM上遇到的问题是,即使指定了本地路径,yum仍然会挂起并尝试从在线存储库进行更新.另外,有没有办法使用yum-utils/yumdownloader轻松获取该包的所有依赖项和所有依赖项?目前

  2. centos – 命名在日志旋转后停止记录到rsyslog

    CentOS6.2,绑定9.7.3,rsyslog4.6.2我最近设置了一个服务器,我注意到在日志轮换后,named已停止记录到/var/log/messages.我认为这很奇怪,因为所有日志记录都是通过rsyslog进行的,并且named不会直接写入日志文件.这更奇怪,因为我在更新区域文件后命名了HUPed,但它仍然没有记录.在我停止并重新启动命名后,记录恢复.这里发生了什么?

  3. centos – 显示错误的磁盘大小

    对于其中一个磁盘,Df-h在我的服务器上显示错误的空白区域:Cpanel表明它只有34GB免费,但还有更多.几分钟前,我删除了超过80GB的日志文件.所以,我确信它完全错了.fdisk-l/dev/sda2也显示错误:如果没有格式化,我该怎么做才能解决这个问题?并且打开文件描述符就是它需要使用才能做到这一点.所以…使用“lsof”并查找已删除的文件.重新启动写入日志文件的服务,你很可能会看到空间可用.

  4. 如何在centos 6.9上安装docker-ce 17?

    我目前正在尝试在centOS6.9服务器上安装docker-ce17,但是,当运行yuminstalldocker-ce时,我收到以下错误:如果我用跳过的标志运行它我仍然得到相同的消息,有没有人知道这方面的方法?

  5. centos – 闲置工作站的异常负载平均值

    我有一个新的工作站,具有不寻常的高负载平均值.机器规格是:>至强cpu>256GB的RAM>4x512GBSSD连接到LSI2108RAID控制器我从livecd安装了CentOS6.564位,配置了分区,网络,用户/组,并安装了一些软件,如开发工具和MATLAB.在启动几分钟后,工作站负载平均值的值介于0.5到0.9之间.但它没有做任何事情.因此我无法理解为什么负载平均值如此之高.你能帮我诊断一下这个问题吗?

  6. centos – Cryptsetup luks – 检查内核是否支持aes-xts-plain64密码

    我在CentOS5上使用cryptsetupluks加密加密了一堆硬盘.一切都很好,直到我将系统升级到CentOS6.现在我再也无法安装磁盘了.使用我的关键短语装载:我收到此错误:在/var/log/messages中:有关如何装载的任何想法?找到解决方案问题是驱动器使用大约512个字符长的交互式关键短语加密.出于某种原因,CentOS6中的新内核模块在由旧版本创建时无法正确读取512个字符的加密密钥.似乎只会影响内核或cryptsetup的不同版本,因为在同一系统上创建和打开时,512字符的密钥将起作用

  7. centos – 大量ssh登录尝试

    22个我今天登录CentOS盒找到以下内容这是过去3天内的11次登录尝试.WTF?请注意,这是我从我的提供商处获得的全新IP,该盒子是全新的.我还没有发布任何关于此框的内容.为什么我会进行如此大量的登录尝试?是某种IP/端口扫描?基本上有4名匪徒,其中2名来自中国,1名来自香港,1名来自Verizon.这只发生在SSH上.HTTP上没有问题.我应该将罪魁祸首子网路由吗?你们有什么建议?

  8. centos – kswap使用100%的CPU,即使有100GB的RAM也可用

    >Linux内核是否应该足够智能,只需从内存中清除旧缓存页而不是启动kswap?

  9. centos – Azure将VM从A2 / 3调整为DS2 v2

    我正在尝试调整前一段时间创建的几个AzureVM,从基本的A3和标准A3到标准的DS2v2.我似乎没有能力调整到这个大小的VM.必须从头开始重建服务器会有点痛苦.如果它有所不同我在VM中运行CentOS,每个都有一个带有应用程序和操作系统的磁盘.任何人都可以告诉我是否可以在不删除磁盘的情况下删除VM,创建新VM然后将磁盘附加到新VM?

  10. centos – 广泛使用RAM时服务器计算速度减慢

    我在非常具体的情况下遇到服务器速度下降的问题.事实是:>1)我使用计算应用WRF>2)我使用双XeonE5-2620v3和128GBRAM(NUMA架构–可能与问题有关!

返回
顶部