今天在移植ImageMagick++ 时遇到了下面的错误
“NoDecodeDelegateForThisImageFormat”
移植方式是,只把要用的 libMagickCore.so.2 libMagick++.so.2 libMagickWand.so.2 和 libjpeg.so.62 拷贝过去,运行程序,后出现"NoDecodeDelegateForThisImageFormat"错误。
最初以为是so动态库没有拷全,用ldd查看,发现都是全的,程序在原来的开发服务器是能用的(开发服务器是从源码安装的)。
“spcoder,
If you update the ImageMagick env variables in ~/rminstall-1.1-0/scripts/setenv.sh to read as the following, it will enable the libraries:
- IMAGEMAGICK ENV #####
export MAGICK_HOME=”/opt/rminstall-1.1-0/common”
export MAGICK_CONFIGURE_PATH=”/opt/rminstall-1.1-0/common/lib/ImageMagick-6.3.6/config:/opt/rminstall-1.1-0/common/share/ImageMagick-6.3.6/config”
export MAGICK_CODER_MODULE_PATH=”/opt/rminstall-1.1-0/common/lib/ImageMagick-6.3.6/modules-Q16/coders/”
I get a large set of formats returned after making this updating and re-exporting these, when running your test command:
$ identify -list format
Best,
Mark ”
应该是说 "环境变量"的事情 ,他说要设置下环境变量,并用identify测试(这句很关键)。
我运行了一下identify -list format 确实什么格式信息也没有。
没办法hack 一下吧,在开发机上用
strace identify -list format >ImageMgick.log 2>&1
分析生成的log文件,里面有去到/usr/local/lib/ImageMagick-6.5.2/modules-Q16/coders这个目录下读取文件的记录。进去以后发现里面都是coders。原来它是需要这些文件啊。把这个目录都拷贝到目标机器上,然后看上面这些环境变量中有个:MAGICK_CODER_MODULE_PATH
把它export 出来(export MAGICK_CODER_MODULE_PATH=)
再运行,OK啦。
Thank Strace!!!!!
后记:在用ImageMagick++ 中的Magick++ library 创建缩略图的时候,发现在默认情况下调用Image::resize(Geometry ),他总是按照原图的比例来缩放,也就是说如果原图是800x600的图片,我设置的缩略图尺寸为100x100的话,那么生成的缩略图的尺寸为100x75 ,也就是说是按照原图的宽高比来缩放。经查找后发现,如果想要100x100的缩略图的话,需要调用Geometry对象的aspect()方法,并把传入ture参数:Geometry::aspect(true),然后再去调用resize(Geometry)就可以了。
为了找这个破东西,找到半夜两点,差点以为是Magick++不支持这个方法,郁闷
另外:
在编译的时候遇到了这种情况,在一台机器上面根本一点X-window的东西都没有,所以直接configure的时候jpeg,png 什么的都显示OK。但在另一台机器上面,libjpeg.so 和libpng.so装得好好的,但就是显示
“JPEG v1 --with-jpeg=yes no (failed tests)” ,郁闷,最后没办法去debug了configure,后来发现是因为这台机器上面安装可X-window的头文件,而Imagemagick++模式是--with-x的,所以configure在前面测试的时候发现有X的头文件所以就添加了X的编译选项 -lX11 ,但因为只有头文件并没有动态链接库(so)文件,所以在对jpeg测试的时候链接是永远不会成功的,因为ld会报“找不到libX11.so”的错误。
因此解决方法很简单,在configure时带上 --without-x 选项就一切OK了
阅读(6818) | 评论(0) | 转发(0) |