2009年1月7日星期三

命令行图片处理工具ImageMagick

ImageMagick软件包中包含:

1、convert
转换图像格式和大小,模糊,裁剪,驱除污点,抖动,临近,图片上画图片,加入新图片,生成缩略图等。
2、identify
描述一个或较多图像文件的格式和特性。
3、mogrify
按规定尺寸制作一个图像,模糊,裁剪,抖动等。Mogrify改写最初的图像文件然后写到一个不同的图像文件。
4、composite
根据一个图片或多个图片组合生成图片。
5、montage
创建一些分开的要素图像。在含有要素图像任意的装饰图片,如边框、结构、图片名称等。
6、compare
在算术上和视觉上评估不同的图片及其它的改造图片。

7、display
如果你拥有一个X server的系统,它可以按次序的显示图片
Usage: display

8、animate
利用X server显示动画图片
Usage: animate /home/zhancang/images/imagename.gif

9、import
在X server或任何可见的窗口上输出图片文件。 你可以捕获单一窗口,整个的荧屏或任何荧屏的矩形部分。(文件名和格式可以自定义!)
Usage: import imagemane.gif
For example: import windows.gif

10、conjure
解释执行 MSL (Magick Scripting Language) 写的脚本。(对于一般人来说,这个命令用处不大。)

受上面这张预防颈椎病的图片的启发,

组合出了一些ImageMagick命令:

convert -list font
查看可用的字体


echo -n " 碧云天,黄叶地。 " | sed 's/./&@/g; s/@$//' | tr '@' '\012' | convert -background lightblue -fill blue -pointsize 24 -font 文鼎PL简中楷-Regular -gravity center label:@- output.png
将词句作成竖排图片


composite -rotate 180 output.png output.png output.png
将图片上下翻转


用程序读取保存的文件的词句,并把每一句用上面的两条命令做成图片。























再用
convert *.png +append output.png

convert *.png -reverse +append output.png
将图片用顺序或逆序合并成一张图片,
(刚开始用的是
montage -tile x1 -geometry +0+0 -frame 1 *.png output.png
图片下面会有大片空白,效果不好)

再将图片左翻之后,贴到其它背景上,就可以当桌面用了,
composite -rotate -90 output.png output.png output.png //左翻


composite -gravity center output.png d.jpg desktop.png //与另一张合并

工作之余,左右晃动脑袋,即可预防颈椎病,还陶冶情操。

附上程序:
#include
#include
#include
#include
#include

#define BUFSIZE 1024

void usage()
{}

int main(int argc, char *argv[])
{
FILE *fp;
int rev=0, exec, n=999, m;
char * line = NULL, *buf = NULL;
size_t len = 0;
ssize_t read;

if (argc < 2)
{
usage();
return -1;
}

if ( (fp = fopen(argv[1], "r")) == NULL)
{
perror("fopen error");
return -1;
}
if( (buf = malloc(BUFSIZE)) == NULL)
{
perror("malloc error");
return -1;
}

while ((read = getline(&line, &len, fp)) != -1) {
exec = 0;
m = 0;
while(*(line+m) != '\n')
{
if( isprint(*(line+m)) != 0) //不可打印字符
m++;
else
{
exec = 1;
break;
}
}
if( exec ){

memset(buf, '\0', sizeof(buf));

sprintf(buf, "echo -n \"%s\" | sed 's/./&@/g; s/@$//' | tr '@' '\012' | convert -background lightblue -fill blue -pointsize 24 -font 文鼎PL简中楷-Regular -gravity center label:@- 000%d.png", line+m, n);
system(buf);

if( rev )
{
sprintf(buf,"composite -rotate 180 000%d.png 000%d.png 000%d.png", n, n, n);
system(buf);
rev = 0;
}
else
rev = 1;
n--;
}
}

//system("montage -tile x1 -geometry +0+0 -frame 1 *.png output.png");
system("convert 000*.png +append output.png");

system("composite -rotate -90 output.png output.png output.png");

//system("composite -gravity center output.png d.jpg desktop.png");

if (line)
free(line);
if (buf)
free(buf);

return 0;
}

其中还有很多细节需要考虑,如图片的颜色,大小等,
还是留待未来的Ted去做吧。

参考资料:
http://hi.baidu.com/zhancang/blog/item/f6794f59419f73292934f06d.html
http://www.imagemagick.org/Usage/
http://www.imagemagick.org/Usage/text/
http://www.imagemagick.org/Usage/transform/
http://www.imagemagick.org/Usage/draw/
http://www.imagemagick.org/Usage/advanced/