暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

使用ImageMagick

ta是一个搬运工 2021-08-03
1645

1 ImageMagick基本说明

ImageMagick是一款强大且能处理不同格式的图像的工具,同时也是开源界低调的存在,深藏功与名。支持WindowsLinux

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(可以在配置打印的最后看到依赖库有zlibgompmpthread等),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旋转BMPPGM图片了,网盘中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_2convert_2.cconvert.c修改之后得到,由此可以通过应用程序调用API执行图片旋转等功能。网盘中包含了convert.cconvert_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 linuxhi3518ev300)使用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*432PGM图片45度,需要13秒左右的时间,而在Ubuntu server 160464bit)上只要100ms左右。


3 命令行的其他使用

3.1 调节亮度饱和度

-modulate brightness[,saturation,hue]

比如将2.jpg的图像亮度调为2倍,饱和度不变,将调节之后的图片保存到2_1.jpg中,convert.exe 2.jpg -modulate 200 2_1.jpg


文章转载自ta是一个搬运工,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论