ImageMagick: 图像处理工具包(使用它在图片中插入文字注释)

引子

 

最近项目中, 我们需要管理很多的打印机, 根据机种的不同, 我们需要显示相应的打印机图片,

这其中包含着一定的规则(依赖于使用SNMP从打印机取到的返回值)

 

因为打印机图片很多, 加之有时候我们还要使用替代的图片,

所以经常, 我打开一个网页, 都不确定显示出来的图片是否是正确的,

通常的做法, 我会查看这个图片的连接,确认一下文件名是否正确,

可是每次为了查看这个图片的连接, 我总要多点那么一下,

我觉得不直观, 所以在开发的时候, 我希望给图片加上Label.

 

我的想法是: 针对下面这样的原始图片

 

把文件名显示在图片上, 形如下面这样:

   

这样一来, 显示出来的图片是否正确, 就一目了然了.

 

 

为了完成这个事儿, 我起初使用的Photoshop,

但很快我就感觉到, 每次启动Photoshop往上面一个个加文字, 也是个麻烦事儿.

显然我需要的是一个命令工具,

一个命令搞定所有图片的那种.

 

 

 

调查了一下, 发现ImageMagick是个好工具.

 

ImageMagick主页 在这.

 

他跨平台, 支持命令行操作, 提供了ruby, python, java, .net等等一票语言的接口, 而且功能强大(关于功能列表和它支持的更多语言接口, 详见他的主页)

很是对我的胃口

下载下来配置了一下:

实现上面的功能, 只需命令如下:

 

第一幅图的命令(文件名标签添加在中间)

convert printer.png  -fill red -pointsize 30 -annotate +10+141 "PN298-H_3_M_F" printer_label_middle.png
 

如果想给文字加上方框, 像第二幅图那样,可以使用下面命令:

convert printer.png  -fill "#00ffff" -draw "rectangle 5,128,114,145" -fill red  -annotate +10+141 "PN298-H_3_M_F" printer_label_middle.png
 

第二幅图的命令(文件名标签添加在底部)

convert printer.png   -background Khaki -pointsize 30  label:"Hello PN298-L_3" -gravity Center -append    printer_label_bottom.png

 

最后写个脚本, 包一下上面的命令, 对一组图片批量执行上面命令,

至此, 这个问题算是满意解决.

 

 

 

ImageMagick的 安装和配置

 

在它的主页上面, 有一个Binary Releases 的link.注意, 这个二进制下载居然不在他的Download 页面里面,

(Download里面我选了几个镜像, 发现都只有source, 起初我还以为他只能自己编译了)

 

对于windows, 里面有带dll的, 有不带的, 有安装版的, 有免安装的.

我下载的是免安装版的, 解压到本地, 配置成path即可.

 

只是当我第一次运行convert.exe命令时, 它提示我说: "必须指定文件系统"

原来我把ImageMagic追加到了path的最后,

导致convert.exe最先匹配到的是"C:\Windows\System32\convert.exe",

将ImageMagic的安装路径提到path前面即可

 

 

 

ImageMagick的文档和资源

 

 

①官网上的文档已经很详尽,

同时官网上面也介绍了关于他的两个书:

<<The Definitive Guide to ImageMagick >>

<<ImageMagick Tricks: Unleash the power of ImageMagick with this fast, friendly tutorial and tips guide>>

当然, 也有社区.

 

 

②我做上面的例子的时候, 参考了下面这两个文档连接:

ImageMagick v6 Examples -- Annotating Images

ImageMagick v6 Examples --  Text to Image Handling

 

 

③搜索的时候, 发现这个链接也不错

5 ImageMagick command line examples – part 1

 

 

④关于convert命令的详细, 参考这个链接

ImageMagick Convert Command-line Tool

想说的一点是, 这个链接中参数介绍有这样一行

-pointsize value     font point size

这个pointsize就是font size.

起初我想使用这个参数, 搜了个"font size", 结果没有匹配着, 致使我开始漏掉了这个参数.

 

 

⑤下面这个blog是对RMagick的一个介绍(ps,ruby还有其他wrapper)

Image Manipulation @The Bastards Book of Ruby

可以做为一个概览, 看一看.

 

 

 

 

 

 

 

你可能感兴趣的:(ImageMagick,图像处理)