ImageMagick是一款电脑开源图片编辑软件,该工具支持多个平台并且完全免费使用,能对图片进行多样的转换、裁剪、特效等等功能。
小编精选:开源软件
ImageMagick是免费软件:全部源码开放,可以自由使用,复制,修改,发布,它遵守GPL许可协议,可以运行于大多数的操作系统,ImageMagick的大多数功能的使用都来源于命令行工具。
注意!软件不支持中文路径!
1.格式转换:从一种格式转换成图像到另一个(例如 PNG 转 JPEG)
2.变换:缩放,旋转,裁剪,翻转或修剪图像
3.透明度:使图像的部分变为透明
4.附加:添加形状或一帧到图像
5.装饰:添加边框或帧图像
6.特效:模糊,锐化,阈值,或色彩图像动画:创建一个从GIF动画图像组序列7.文本及评论:插入描述或艺术图像中的文字
8.图像识别:描述的格式和图像性能
9.综合:重叠了一个又一个的图像
10.蒙太奇:并列图像画布上的图像缩略图
11.电影支持:读写图像的共同使用的数字电影工作方式
12.图像计算器:应用数学表达式的图像或图像通道
13.离散傅立叶变换:实现正向和反向的DFT
14.高动态范围图像:准确地表现了从最明亮的阳光直射到最深最黑暗的阴影找真正的幕后广泛的强度水平
15.加密或解密图片:转换成不懂乱码,然后再返回普通图像
16.虚拟像素支持:方便以外区域的图像像素
17.大图像支持:读,过程,或写mebi和吉比像素的图像尺寸
18.执行:ImageMagick的是线程安全的,利用内部算法OpenMP的功能及快速的双和四核处理器技术提供窗口优势
19.异构分布式处理:某些算法可以在跨越的CPU,GPU,以及其他处理器组成的构平台音乐会执行速度提高
imagemagick的功能非常强大,除了之后我们会讲到的命令行操作模式以外,还拥有诸多编程接口可以使用,其中就支持c++、java等语言,因为涉及到的编程类型过于,下面就主要介绍c++接口为例的使用教程。
ImageMagick的c++接口名称为Magick++,Magick++中有以下几个重要的对象:
Image:图片对象,Magick++中最重要的对象;
Geometry:Geometry包含了图片长度,宽度,偏移等信息;
Pixels:图片的像素对象
Color:图片的颜色对象
Blob:二进制数据大对象容器
代码示例:
#include <Magick++.h>
#include <iostream>
using namespace std;
using namespace Magick;
int main(int argc, char **argv)
{
InitializeMagick(*argv);
Image image;
try {
// 读入一个图片文件,把它存放在image对象中
image.read( "src.jpg" );
// 把图片缩放到100x100的大小
image.resize( Geometry(100,100) );
// 把缩放后的图片存放到文件
image.write( "dest.jpg" );
}
catch( Exception &error_ )
{
cout << "Caught exception: " << error_.what() << endl;
return 1;
}
return 0;
}
操作详解:
从上面的例子可以看出Magick++的使用非常的简单,仅仅需要包含Magick++.h一个头文件就可以了,它的所有api及对象都放在Magick的命名空间内。
唯一要注意的地方:
Magick++在发生错误的时候会抛出异常,所以一定要使用try catch块捕获住异常,这点千万要记住。
注意事项:
另外,编译时要-I/usr/local/include/ImageMagick ,-L/usr/local/lib,-lMagickCore -lm -lgomp -lpthread,学c++的都懂得,不再赘述。
因为ImageMagick这款软件的核心用法就是使用命令行进行操作的,所以了解命令大全对于使用此软件的是非常重要的事情,为了帮助大家快速上手,下面就详细讲解下相关指令内容。
基本指令:
convert 转换图像格式和大小,模糊,裁剪,驱除污点,抖动,临近,图片上画图片,加入新图片,生成缩略图等。
identify 描述一个或较多图像文件的格式和特性。
composite 根据一个图片或多个图片组合生成图片
举例说明:
convert +profile '*' [src]{file}.{ext} -quality 80 -resize '280x140^>' -gravity Center -crop 280x140+0+0 +repage [out]{file}_280x140.{ext}
把一张图片按80的质量去压缩(jpg的压缩参数),同时按图片比例非强制缩放成不超过280x140的图片.居中裁剪280x140,去掉图片裁减后的空白和图片exif信息,通常这种指令是为了保证图片大小正好为280x140
进阶指令:
-quality 图片质量,jpg默认99,png默认75
-resize
100x100 高度和宽度比例保留最高值,高比不变
100x100^ 高度和宽度比例保留最低值,宽高比不变
100x100! 宽度和高度强制转换,忽视宽高比
100x100> 更改长宽,当图片长或宽超过规定的尺寸
100x100< 更改长宽 只有当图片长宽都超过规定的尺寸
100x100^> 更改长宽,当图片长或宽超过规定的尺寸。高度和宽度比例保留最低值
100x100^< 更改长宽,只有当图片长宽都超过规定的尺寸。高度和宽度比例保留最低值
100 按指定的宽度缩放,保持宽高比例
x100 按指定高度缩放,保持宽高比
-gravity NorthWest, North, NorthEast, West, Center, East, SouthWest, South, SouthEast截取用的定位指令,定位截取区域在图片中的方位
-crop 200x200+0+0 截取用的截取指令 ,在用定位指令后,按后两位的偏移值偏移截取范围左上角的像素后,再按前两位的数值,从左上角开始截取相应大小的图片
+repage 去掉图片裁减后的空白
-dissolve 30 设定组合图片透明度dissolve示例
+/-profile * 去掉/添加图片exif信息
有的时候用户会需要使用ImageMagick来对文件进行批处理操作,例如下面问题所描述的将数千个SVG批量转换为图像格式,这对于ImageMagick而言也是基本操作罢了,想要了解具体操作的用户快来看看问答内容吧。
问题描述:
我在文件夹和子文件夹中有数千个SVG。我想要的是将所有这些批量转换为 jpg 或 png 图像。
有人可以帮我写一个ImageMagick(windows)的命令,它可以查找所有svg并将其转换为原始名称并将它们保存在同一个jpg / png中目录?
以下是示例结构:
C:\\ \\ SVG\BusinessMan.svg
C:\ SVG\Models \ Home.svg
C:\ SVG \ Underline\underline.svg
转换后我想要这样:
C:\ SVG\BusinessMan.svg
C:\ SVGG \ BusinessMan.jpg
C:\ SVG \ Model #\\Home.svg
C: \ SVG\Models\Home.jpg
C:\ SVG \ Underline\underline.svg
C:\ SVG \ Underline\underline.jpg
< / code>
解决方法:
尝试使用 FOR 从根文件夹中循环 / R 标记:
FOR / R%a IN(* .svg)DO转换"%~a""%~dpna。 jpg"
此命令将转换所有 .svg 从您启动命令的根文件夹下的子目录中的文件。
以上命令适用于命令行,如果您打算在批处理文件(.bat)中使用该命令,请记住使用 %% 而不是%:
FOR / R% %a IN(* .svg)DO转换"%% ~a""%% ~dpna.jpg"
有的用户可能使用ImageMagick实现了动图制作的效果,这对于其软件而言并不算难事,不过其中涉及到的指令比较复杂,用户需要多个步骤才能制作出相关动图,那么到底该怎么做呢?下面的教程就来告诉你答案。
动图效果:
$ convert -delay 0 *.bmp -loop 0 animated.gif
// 将当前目录下所有的bmp文件合成一个gif图片动画, 每帧间隔0ms, 重复播放。
// -delay n 迟延n*10毫秒
// -loop n 播放n轮, 0表示不断地重复播放
$ convert -delay 50 frame1.gif frame1.gif frame1.gif -loop 0 animated.gif
// 将当前目录下的frame1.gif文件制作成animated.gif动画,其中3个frame1.gif作为一组,进行循环播放,延迟500毫秒。
$ convert -delay 50 frame1.gif -delay 100 frame1.gif -delay 150 frame1.gif -loop 0 -pause 200 animated.gif
// 在一轮播放之后暂停200毫秒,再进行下一轮播放。
$ convert anim1.gif anim2.gif combined.gif
// 将两个动画文件合并成一个。
附:
$ mogrify -resize 640x480 *.jpg
// 将当前目录下所有的jpg文件缩为为640x480分辨率
作为一款图片编辑软件,接取图像内容是同类型软件都会拥有的功能,不过对于imagemagick而言,因为大多数都是凭借指令完成的,所以具体的步骤会稍微复杂一些,没有图形化编辑器那么简单,感兴趣的用户可以来了解下。
原始图像:img1.jpg,图片尺寸:1920x1200
crop参数可以把一副图像分成若干块大小一样的图片,同时也可以在大图上截取一块图片来,使用范例如下:
#magick img1.jpg -crop 500x500 dest.jpg
因为原图片尺寸为1920x1200,所以可以分割出12块图片,注意如果尺寸不是目标图片的整数倍,那么右边缘和下边缘的一部分图片就用实际尺寸
在原始图像上裁剪一张指定尺寸的小图
magick img1.jpg -crop 600x450+300+600 dest.jpg
600x450是宽乘高,+300+600是横纵坐标
如果裁剪的尺寸大于实际值,则以实际值为准。
magick img1.jpg -gravity center -crop 100x100+0+0 dest1.jpg
在img1.jpg中获取中心部分100x100的图片
magick img1.jpg -gravity southeast -crop 100x100+10+5 dest2.jpg
在img1.jpg中获取距离右侧10个像素,距离底侧5个像素,尺寸100x100的图片
修复了bug
Swifty软件下载:Swifty是一款开源的密码管理器,用户可免费使用全部功能,记录不同网站的账号密码详情,通过此软件快速记载并且查询,防止密码遗忘及丢失的情况发生,采用了256位高级加密方式,保证你的隐私安全,快来下载吧。