ImageMagick 6.8.9 升级到 6.9.11 需要修改的代码, 必需的 dll

最近将一个项目中使用的 ImageMagick 由几年前的 6.8.9 升级到了今天的 6.9.11,然后重新编译代码倒没遇到任何问题。但在测试的时候就发现问题了,这是我意料之中的事情。

回想几年前就是因为升级 ImageMagick 的版本,导致一个项目无法正常运行,这才一直停留在 6.8.9 这个版本上。

可这次由于项目中需要处理 heic 格式的图片,而 6.8.9 版本还没有支持 heic,不得已只好升级到目前的 6.9.11

可是:升级有风除,操作要谨慎。

 

目前发现因升级到6.9.11后出现的问题如下:

1. 文字水印的背景填充色

6.8.9 版本中使用 DrawRoundRectangle() 就可以搞定,不论背景是直角矩形,还是圆角矩形。

在使用 6.9.11 后,发现 DrawRoundRectangle() 如果最后两个参数(角度值) 设置为0,也就是【直角矩形】,背景填充色就不会显示。

一开始我以为这个好办,只需判断如果是【直角矩形】,就使用 DrawRectangle() 绘制背景填充色就行了,可测试发现一个奇葩现象,当背景矩形边框的值比较大时(4, 6, 8),绘制的矩形左侧边框上会出现一个颜色特别的像素点,估计是个bug.

为此,花了我一个多小时才解决这个问题。

 

2. 当调用 MagickCropImage() 裁剪 pnggif 图片时,6.8.9 版没有任何问题。

但在 6.9.11 版本中,当我打算裁剪一个 100 x 100 的尺寸,但最终裁剪出来的是一个 1x1 的尺寸。 相关的资料有:http://blog.sina.com.cn/s/blog_41194bbe0100ep5o.html

解决方案:在调用 MagickCropImage() 前,必须先调用 MagickSetImagePage() 重置虚拟画布。

 

3. bmp格式的图片

v6.8.9 的 MagickGetImageFormat() 返回 "BMP", 有些特殊的 bmp图片(15-16封底平面图....bmp), MagickGetImageAlphaChannel() 返回 1

v6.9.11 的 MagickGetImageFormat() 返回 "BMP3", 有些特殊的 bmp图片(15-16封底平面图....bmp), MagickGetImageAlphaChannel() 返回 0

 

4.生成新的图片时,原 sRGB 色彩空间的图片由于图片本身色彩单一,在保存时有可能会自动变成 GRAY 色彩空间。

 

MagickSetImageFormat(mw, "PNG"); //设置为 PNG 格式

size_t outLen;
BYTE *lpData = MagickGetImageBlob(mw, &outLen);

ClearMagickWand(mw); //清空

MagickReadImageBlob(mw, lpData, outLen); //重新初始化  mw

 

v6.8.9 不存在这个问题。

v6.9.11 会有这个问题。

 

MagickSetImageProperty(mw, "colorspace:auto-grayscale", "false"); //没效果
MagickSetOption(mw, "colorspace:auto-grayscale", "false"); //没效果

MagickSetImageProperty(mw, "colorspace:auto-grayscale", "off"); //没效果
MagickSetOption(mw, "colorspace:auto-grayscale", "off"); //没效果 

 

5.在 win10 系统,软件第一次加载图片生成缩略图的时候,会有明显的卡顿现象,卡顿持续5秒左右的时间,但以后再次加载图片显示缩略图的时候就不再出现卡顿现象。 win 7 系统上不存在首次加载图片显示缩略图卡顿问题,但是 win7 系统上存在更严重的闪退问题

什么原因引起的,到现在没搞清楚。

难道是因为我没有设置:

_putenv("MAGICK_CONFIGURE_PATH=."); /** 注意: 处理 dng 格式的图片, 格式转换时需要用到 **/
_putenv("MAGICK_HOME=.");

这种可能性我还没有经过测试,因为测试的代价有点大,暂时先记录下,未来有机会再测试吧。

------------------------------------------------------------------------------------------------------

在处理 dng 文件时,必需 CORE_RL_libraw_.dll 和 IM_MOD_RL_raw_.dll

win 10 64位系统上必需: IM_MOD_RL_xc_.dll  否则软件在添加图片后会闪退,并且不提示任何错误。 系统日志一般会有提示错误:  CORE_RL_magick_.dll 内部错误。

------------------------------------------------------------------------------------------------------

根据一篇文章【VS2013写的程序在Win XP下运行的完美解决方案】 https://blog.csdn.net/qq_15029743/article/details/79601608

VS2013写的程序默认情况下在 Win XP 下无法运行 (msvcr120.dll)?

Win XP 最高支持 VS2010 写的程序 (msvcr100.dll)

ImageMagick 6.9.11 不支持 xp? 我现在没办法测试。

------------------------------------------------------------------------------------------------------

 

软件在 win7 上闪退:

错误应用程序名称: xxx.exe,版本: 10.5.0.0,时间戳: 0x0000322c
错误模块名称: CORE_RL_magick_.dll,版本: 6.9.11.5,时间戳: 0x5e8a370f
异常代码: 0xc0000005
错误偏移量: 0x00064fb8

exceptionCode:0xc0000005, EIP=0x755B4FB8 6.1 (7601) 9-14857-x-x
exceptionCode:0xc0000005, EIP=0x0F8D4FB8 6.1 (7601) 0-15363-x-x
exceptionCode:0xc0000005, EIP=0x580E4FB8 6.1 (7601) 9-14857-x-x

从目前这个看, win7 不论32位还是64位,都可能存在同样的问题。

分析:

ImageMagick 自带的 Microsoft c Runtime Library 共有 3 个文件:

msvcp120.dll

msvcr120.dll

vcomp120.dll

其中使用的版本:Microsoft Visual Studio 2013 - Microsoft c Runtime Library - v 12.00.21005.1

 

方案:

Visual C++ Redistributable Packages for Visual Studio 2013

https://support.microsoft.com/zh-cn/help/2977003/the-latest-supported-visual-c-downloads

我尝试更新了一下:msvcr120.dll - Microsoft Visual Studio 2013 - Microsoft c Runtime Library - v 12.00.40664.0

又添加了两个文件,但这两个文件是否有意义,我不清楚:

vccorlib120.dll - Microsoft VC WinRT core library

vcamp120.dll - Microsoft C++ AMP Runtime

 

根据两天时间的情况判断,这一切都是徒劳,依然在部分 win 7 (32, 64位) 机器上崩溃。

------------------------------------------------------------------------------------------------------

下面是本次升级的另一个收获:

如果 convert.exe 可以做到, 可通过下面的命令行,得到执行的过程:


-debug events 说明:https://www.imagemagick.org/script/command-line-options.php#debug


-log string 说明:https://www.imagemagick.org/script/command-line-options.php#log


convert -debug "All" -log "%m,%f,%e,%d" test.dng test.jpg 

------------------------------------------------------------------------------------------------------

目前就发现这几处,先记录下来。

 

posted @ 2020-04-07 16:30  personnel  阅读(444)  评论(0编辑  收藏  举报
友情链接:图片批量处理工具 gif动态图制作工具 制作电子相册 图片排版工具 制作淘宝主图视频 MKScript 鼠标键盘自动化脚本语言