1 ImageMagick基本说明
ImageMagick是一款强大且能处理不同格式的图像的工具,同时也是开源界低调的存在,深藏功与名。支持Windows和Linux。
1.1 获取ImageMagick
可以从官网获取获取,也可以从百度网盘获取,
链接:https://pan.baidu.com/s/1t1xAwYm04Lp3YdE02eoF5Q
提取码:0jk8
2 移植ImageMagick
2.1 在Ubuntu 使用ImageMagick命令行旋转图片
将压缩包解压,tar xzf ImageMagick-6.9.10-81.tar.gz,进入解压之后的目录,./configure --with-magick-plus-plus=no(可以在配置打印的最后看到依赖库有zlib、gomp、m、pthread等),make,如果遇到如下错误:
则在./magick/magick-type.h的文件开头加入#include <stdint.h>,再次make即可,编译成功之后执行make install,安装成功之后即可使用ImageMagick提供的命令,比如convert,在执行convert时可能遇到如下错误:
convert: error while loading shared libraries: libMagickCore-6.Q16.so.6: cannot open shared object file: No such file or directory
可以参考https://blog.csdn.net/qc530167365/article/details/91491851,
echo "/usr/local/lib" >> etc/ld.so.conf.d/x86_64-linux-gnu.conf
ldconfig
此时可以通过命令convert旋转BMP和PGM图片了,网盘中pic1.tar.gz包含了示例图片,
convert -rotate 45 8_.bmp 8_45.bmp
convert -rotate 45 24_.bmp 24_45.bmp
convert -rotate 45 8_.pgm 8_45.pgm
2.2 在Ubuntu使用ImageMagick API旋转图片
通过查看makefile得知,convert可执行程序由utilities/convert.c编译得到。
gcc convert.c /usr/local/lib/libMagickWand-6.Q16.a usr/local/lib/libMagickCore-6.Q16.a -o convert_2 -I/home/lijun/ImageMagick-6.9.10-81/ -lz -lm -lpthread -lgomp
可以得到可执行程序convert_2,convert_2.c由convert.c修改之后得到,由此可以通过应用程序调用API执行图片旋转等功能。网盘中包含了convert.c和convert_2.c。
gcc convert_2.c /usr/local/lib/libMagickWand-6.Q16.a /usr/local/lib/libMagickCore-6.Q16.a -o convert_2 -I/home/lijun/ImageMagick-6.9.10-81/ -lz -lm -lpthread -lgomp
2.3 在arm linux(hi3518ev300)使用ImageMagick
ImageMagick的部分组件依赖gomp库,从官网或者网盘下载gomp库的源代码,解压(mkdir libgpmp_arm,unzip libgomp-master.zip -d libgomp_arm),进入解压之后的目录,修改makefile,如下图所示:
make,即可生成libgomp.a文件(位于libgomp-master/src/libgomp/build/.libs/)
ImageMagick还依赖libz,下面省略了libz库的移植过程(笔者使用了zlib-1.2.11),直接说明ImageMagick的移植过程,
mkdir ImageMagick_arm
tar xzf ImageMagick-6.9.10-81.tar.gz -C ImageMagick_arm
cd ImageMagick_arm/ImageMagick-6.9.10-81/
./configure --with-magick-plus-plus=no --prefix=`pwd` CC=arm-himix100-linux-gcc --host=arm
make,跟linux PC的移植一样,会遇到如下错误:
在./magick/magick-type.h的文件开头加入#include <stdint.h>,再次make即可,此时生成./magick/.libs/libMagickCore-6.Q16.a、./wand/.libs/libMagickWand-6.Q16.a,但是不会自动生成convert等可执行程序。
参考linux PC的移植过程,以生成convert可执行程序为例,
arm-himix100-linux-gcc convert_2.c /home/lijun/ImageMagick_arm/ImageMagick-6.9.10-81/./wand/.libs/libMagickWand-6.Q16.a /home/lijun/ImageMagick_arm/ImageMagick-6.9.10-81/./magick/.libs/libMagickCore-6.Q16.a /home/lijun/libgomp_arm/libgomp-master/src/libgomp/build/.libs/libgomp.a -o convert_2 -I/home/lijun/ImageMagick_arm/ImageMagick-6.9.10-81 -lm -lpthread -L/home/lijun/zlib_install/lib -lz
经过实测,在hi3518ev300旋转一个768*432的PGM图片45度,需要13秒左右的时间,而在Ubuntu server 1604(64bit)上只要100ms左右。
3 命令行的其他使用
3.1 调节亮度饱和度
-modulate brightness[,saturation,hue]
比如将2.jpg的图像亮度调为2倍,饱和度不变,将调节之后的图片保存到2_1.jpg中,convert.exe 2.jpg -modulate 200 2_1.jpg