图片处理服务 ImageMagick 的安装和使用
简介
该文章使用目前官方最新版本7.0.8,这里只记录下Windows系统下的安装。
官方网站:http://www.imagemagick.org/script/index.php。
ImageMagick是一套功能强大、稳定而且开源的工具集和开发包,可以用来读、写和处理超过200种基本格式的图片文件,包括PNG,JPEG,GIF,HEIC,TIFF,DPX,EXR,WebP,Postscript,PDF和SVG等格式。利用ImageMagick,可以根据web应用程序的需要动态生成图片, 还可以对一个(或一组)图片进行改变大小、旋转、锐化、减色或增加特效等操作,并将操作的结果以相同格式或其它格式保存,对图片的操作,既可以通过命令行进行,也可以通过C/C++、Perl、Java、PHP、Python或Ruby编程来完成。ImageMagic的主要精力集中在性能,减少bug以及提供稳定的API和ABI上。
ImageMagick的功能通常通过命令行使用,也可以通过编程来使用。编程可以选择通过这些接口调用:G2F (Ada),MagickCore (C),MagickWand (C),ChMagick (Ch),ImageMagickObject (COM+),Magick++ (C++),JMagick (Java),JuliaIO (Julia),L-Magick (Lisp),Lua (LuaJIT),NMagick (Neko/haXe),Magick.NET (.NET),PascalMagick (Pascal),PerlMagick (Perl),MagickWand for PHP (PHP),IMagick (PHP),PythonMagick (Python),magick (R),RMagick (Ruby),or TclMagick (Tcl/TK)。
下载
进入到Download页面,往下翻,找到Windows版本文件的下载页
会看到如下的下载列表(经过整理翻译):
关于下载文件选择:
内存大小是一个重要因素,特别是如果打算处理大型图像。建议至少使用512MB的RAM,但RAM越大越好。ImageMagick不仅在单核计算机上运行良好,也可以在多核系统上自动并行运行,从而大大缩短了运行时间。
Windows版本的ImageMagick是自行安装的。只需单击下面的相应版本,它就会自动启动并向您询问一些安装问题。
文件名称中有Q8的版本是每像素8位分量(例如,8位红色,8位绿色等),而文件名中的Q16是每像素16位分量。Q16版本允许您读取或写入16位图像而不会丢失精度,但需要两倍于Q8版本的计算机资源。
文件名中带有dll的版本包括ImageMagick库作为动态链接库。
除非你的电脑是Windows32位操作系统,否则建议使用64位的Windows ImageMagick。
关于Q8,Q16的说明:
Q8表示: 8-bits per pixel quantum
Q16表示:16-bits per pixel quantum
使用16-bit在处理图片时比8-bit慢15%至50%,并须要更多的内存。比如处理一张1024x768像素的图片8-bit要使用3.6M内存,16-bit要使用7.2M内存。
计算方法是: (5 * Quantum Depth * Rows * Columns) / 8
8-bit可表示0-255种值,16-bit可表示0-65535种值。默认值是8-bit。大多数电脑显示使用8-bit per pixel quantums。现代数码相机照的相片,每一种颜色就是8位深,3种颜色就是24位,选Q8的话也可以满足使用要求,同时可节省计算机资源。
这里我们选择下载官方推荐的文件,也就是第一个:ImageMagick-7.0.8-12-Q16-x64-dll.exe
下载到桌面上的文件:
安装
选择好安装目录后,一直点Next就行,安装完图标。这个7.0版本的安装选项和之前的6点几版本有些不同,系统环境变量都是自动配置好的。
使用
图形程序使用
图形程序中涉及到的图片操作菜单主要是View和Transform,下面简单介绍翻译下这两个菜单。
Half Size 一半大小
Original Size 原始尺寸
Double Size 双倍尺寸
Resize... 自定义尺寸
Toolbar 工具栏
Status Bar 状态栏
Crop 裁切,保留所选部分Rol
Chop 裁切,去掉所选部分,然后把剩余的图片进行拼接
Filp 上下翻转
Flop 左右翻转
Rotate Right 向右旋转90度
Rotate Left 向左旋转90度
Rotate... 旋转指定度数
Shear... 设置X轴角度和Y轴角度
Roll... 设置水平像素和垂直像素
Trim Edges 修剪边缘
命令行使用
上面说过,IM的大部分功能都是基于命令行使用的,所以最全的使用方式应该是命令行方式。
各个命令的详细说明可以直接参考这个地址:https://www.w3cschool.cn/imagemagick_use/
参考官方说明:
IM命令行结构剖析:
ImageMagick命令行包含
1、一个或多个必需输入的文件名。
2、零个,一个或多个图像设置。
3、零个,一个或多个图像运算符。
4、零个,一个或多个图像序列运算符。
5、零个,一个或多个图像堆栈。
6、零个或一个输出图像文件名。(convert,composite,montage,compare,import,conjure,这些命令需要)
注意:直接写convert,如果命令行如果提示找不到convert命令的话,把目录下的magick.exe拷贝一份命名convert.exe,这样就可以直接使用convert了,不用写magick了
IM命令行的简单使用:
打开CMD命令行窗口,进入图片所在目录(我的测试图片在桌面的test文件夹里)
C:\Users\Administrator>cd C:\Users\Administrator\Desktop\test C:\Users\Administrator\Desktop\test>magick test.jpg test1.png
magick test.jpg test1.png 表示把test.jpg这个图片另存一份为test1.png,同时修改了图片名称和格式。
magick label.gif +matte \
\( +clone -shade 110x90 -normalize -negate +clone -compose Plus -composite \) \
\( -clone 0 -shade 110x50 -normalize -channel BG -fx 0 +channel -matte \) \
-delete 0 +swap -compose Multiply -composite button.gif");
上面的命令是在Linux下的写法,命令足够长,必须跨多行写入,Linux使用的是\,Windows使用的是^,另外Windows下的命令行中对于括号不需要转义,则命令格式如下:
magick label.gif +matte ^
( +clone -shade 110x90 -normalize -negate +clone -compose Plus -composite ) ^
( -clone 0 -shade 110x50 -normalize -channel BG -fx 0 +channel -matte ) ^
-delete 0 +swap -compose Multiply -composite button.gif
上面的命令对图片纹理进行了丰富和色彩进行了加深。
magick *.jpg images.gif
将当前目录下所有jpg图片合成一个gif动画,我合成了个静态图片
magick -size 640x480 -depth 8 rgb:image image.png
后面还有好多的命令,详细信息请参考官方网站说明。
程序接口使用
这里只说一下Java相关的工具。Java可调用接口有两种,JMagick和Im4java。JMagick为ImageMagick提供了面向对象的Java接口。Im4java是ImageMagick命令行的纯java接口。
1、JMagick
JMagick是一个开源API,利用JNI(Java Native Interface)技术实现了对ImageMagick API的Java访问接口,因此也将比纯Java实现的图片操作函数在速度上要快。JMagick只实现了ImageMagic API的一部分功能,它的发行遵循LGPL协议。
目前JMagick只有32位的,所以只能选择32位的ImageMagick,并且版本支持很低,目前只支持到ImageMagick-6.3.9-0,只能使用32位的JDK,64位进程不能够调用32位的dll,想在64位的系统上用jmagick不仅要将jdk换成32位,而且jmagick.dll也得放到SysWOW64下面,不能放到System32中。
具体使用可参考我的另一篇博客:JMagic 操作 ImageMagick 处理图片
2、Im4java
Im4java是ImageMagick的另一个Java开源接口。与JMagick不同之处在于Im4java只是生成与ImageMagick相对应的命令行,然后将生成的命令行传至选中的IM-command(使用java.lang.ProcessBuilder.start()实现)来执行相应的操作。它支持大部分ImageMagick命令,可以针对不同组的图片多次复用同一个命令行。
Im4java只是封装ImageMagick的命令。所以不需要依赖dll,也不存在64位系统调用32位dll的问题,而且Im4java支持GraphicsMagick,GraphicsMagick是ImageMagick的分支。且Flickr和Etsy都要使用它。相对ImageMagick,GraphicsMagick更稳定,消耗资源更少。最重要的是不依赖dll环境。
具体使用可参考我的另一篇博客:Im4java 操作 ImageMagick 处理图片
图片处理服务 ImageMagick 的安装和使用的更多相关文章
- 图片处理GraphicsMagick & ImageMagick
用Java的ImageIO处理一个大于15M的JPG文件,内存溢出. 于是寻求新的解决方案,用ImageMagicK,发现处理图片速度不令人满意,于是切换至GraphicsMagicK,如下是总结. ...
- 转:ImageMagick +Jmagick安装
原文来自于: 目录 一.ImageMagick介绍 二.安装支持库 三.在Linux上用源码编译安装ImageMagick与Jmagick 四.在Linux上使用yum安装ImageMagick与Jm ...
- 在腾讯云上把Laravel整合万向优图图片管理能力,打造高效图片处理服务
推荐理由: 现如今数据爆炸性增长,人类生活产出的数据越来越多,文字信息,图片信息,视频信息:但有很多信息我们都无法直接使用,需通过一定的处理,才能够获取其中对我们有用的信息,在腾讯云上的万向优图能够对 ...
- 【腾讯云的1001种玩法】 Laravel 整合万向优图图片管理能力,打造高效图片处理服务
版权声明:本文由白宦成原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/574549001488234358 来源:腾云阁 h ...
- LAMP架构应用实战—Apache服务介绍与安装01
LAMP架构应用实战—Apache服务介绍与安装01 一:Apache是什么 Apache是Apache基金会开发的一个高性能.功能强大.安全可靠.灵活的开放源码的WEB服务软件 二:Apache ...
- redis服务和扩展安装(windows)
Windows下安装redis和在php中使用phpredis扩展 原文地址:http://m.oschina.net/blog/281058 Junn 发布于 2年前,共有 0 条评论 1.redi ...
- ORACLE服务端详细安装步骤(配图解)
ORACLE服务端的安装及配置 l 将下载的安装包解压缩,双击[setup.exe]文件,系统检查监听参数,耐心等待,完成后出现如下界面,电子邮件可不填,"我希望..."建议不勾选 ...
- DNS服务器:主要介绍DNS的服务原理以及安装及其主从配置
DNS服务器:主要介绍DNS的服务原理以及安装及其主从配置 一.DNS简介 1.DNS DNS是域名系统(Domain Name System)的简称,它是一个将域名和IP相互映射的分布式数据库 ...
- Windows服务创建及安装
Windows服务创建及安装http://www.cnblogs.com/tuyile006/archive/2006/11/27/573654.html
随机推荐
- Quartz.Net进阶之五:TriggerListener 、JobListener 和 SchedulerListener
一.介绍 今天开始学习监听器,就是 Listener,在Quartz.Net 中,主要包含3类的监听器,主要内容包括:TriggerListener .JobListener 和 SchedulerL ...
- Newtonsoft.Json 你必须知道的一些用法
最近在做接口开发,对方团队开发了一个Web API 的接口,传输数据的格式是 JSON.当时看到这个东西,感觉很简单,也没想什么,没用多久就完成了我的功能,我完成的功能很简单,就是获取数据,然后把数据 ...
- n的m划分 整数拆分问题
n的m划分 将n划分成若干个不超过m的数(正整数)的和,问有几种划分情况. 现在根据n和m的关系,考虑下面几种情况: 当n=1时,不论m的值为多少,只有一种划分,即{1}: 当m=1时,不论n的值为多 ...
- [Java]异常在项目中的使用
自己经历过的两个项目都有自定义异常,网上找了项目中自定义异常的例子: https://blog.csdn.net/aiyaya_/article/details/78989226. 这个例子基本上来说 ...
- sessionStorage和localStorage的使用方法
1.sessionStorage sessionStorage生命周期为当前窗口或标签页,一旦窗口或标签页被永久关闭了,那么所有通过sessionStorage存储的数据也就被清空 JSON.pars ...
- T-1-java语言基础
一.Linux的由来和发展 Linux是开源的操作系统 Linux是服务器端的操作系统 java主要用于服务器端 二.Linux目录结构(与Windows不同) 文件系统不同:Windows是盘符 ...
- tensorflow学习之(七)使用tensorboard 展示神经网络的graph/histogram/scalar
# 创建神经网络, 使用tensorboard 展示graph/histogram/scalar import tensorflow as tf import numpy as np import m ...
- 对TIMIT数据进行格式转换(SPHERE2WAV(RIFF))
首先,转换sph2pipe工具所在文件夹(此工具为LDC所提供的SPHERE音频文件转换工具) cd '/home/dream/Research/kaldi-master/tools/sph2pipe ...
- 2019.03.28 bzoj3326: [Scoi2013]数数(数位dp)
传送门 题意: 一个人数数,规则如下: 确定数数的进制B 确定一个数数的区间[L, R] 对于[L, R] 间的每一个数,把该数视为一个字符串,列出该字符串的所有连续子串对应的B进制数的值. 对所有列 ...
- JAVA经典算法50题(转)
转载请注明出处:http://blog.csdn.net/l1028386804/article/details/51097928 JAVA经典算法50题 [程序1] 题目:古典问题:有一对兔子, ...