最终还是决定升级到目前最新版:6.8.9,不知何时才真正明白为什么现在都是java8,但还是有很多软件系统使用在java5上。

虽然新版本能带来各种好处,但现实中不能忽略一个问题:原来的代码很可能无法正常的在新版本上使用。

当我将ImageMagick由6.8.3升级到6.8.9后,一开始测试的时候只发现一个问题,关于生成ico文件时,(色彩空间):

在6.8.3上,必须指定色彩空间:MagickSetImageColorspace(mw2, RGBColorspace);

不然生成的图片偏白。

但在6.8.9上,使用 MagickSetImageColorspace(mw2, RGBColorspace);  反而偏白,去掉这一句又正常了。

同时,我发现在 6.8.9 上,返回的图片色彩空间默认是 sRGBColorspace,而我记得在 6.8.3上默认的是 RGBColorspace。

当时我以为没别的问题了,可是无意见发现一个严重的问题:

当使用填充图片时:

DrawInfo *draw_info = PeekDrawingWand(d_wand);

draw_info->fill_pattern = mw->images; //设置填充图片

如果 mw_frame(下层图片) 的色彩空间是 GRAYColorspace, 而 mw->images 是 sRGBColorspace, 生成的新图片的色彩空间是 GRAYColorspace,根源是6.8.9版的 MagickGetImageBlob(mw_frame,len) 函数在内部处理上有所变化,MagickGetImageBlob() 函数在处理过程中根据情况会修改 mw_frame 的色彩空间,所以看到的图片变成黑白的。

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

测试时发现:

printf("MagickGetImageColorspace(mw_frame):%d\n", MagickGetImageColorspace(mw_frame)); //返回 sRGBColorspace

MagickGetImageBlob(mw_frame,len);

printf("MagickGetImageColorspace(mw_frame):%d\n", MagickGetImageColorspace(mw_frame)); //返回 GRAYColorspace

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

在6.8.3版,生成的新图片是彩色的,但在6.8.9版上生成的新图片是黑白的。

用6.8.9版生成新图片前,必须判断当前的色彩空间,如果色彩空间不是 sRGBColorspace, 就设置为 sRGBColorspace

void useSRGBColorspace(MagickWand *mw)

{

if(MagickGetImageColorspace(mw) != sRGBColorspace)

{

MagickSetImageColorspace(mw, sRGBColorspace);

}

}

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

关于 MagickSetImageColorspace() 和 MagickTransformImageColorspace()

我其实没搞明白这两个的区别是什么,不过在过去测试中也得到一个结构:

如果当前色彩空间是 CMYKColorspace, 想转换成 sRGBColorspace,必须使用 MagickTransformImageColorspace()

如果当前色彩空间是 GRAYColorspace,想转换成 sRGBColorspace,使用 MagickSetImageColorspace()

我发现只有 当前色彩空间是 CMYKColorspace时,才必须要使用 MagickTransformImageColorspace()

将其他色彩空间进行转换,使用 MagickSetImageColorspace()就行了。

2014-09-19

ImageMagick: 6.8.3 升级到 6.8.9 遇到的问题的更多相关文章

  1. linux下安装php的imagick扩展模块(附php升级脚本)

    imagick是一个PHP的扩展,是一套软件系列,用ImageMagick提供的API来进行图片的创建与修改,不过这些操作已经包装到扩展imagick中去了,最终调用的是ImageMagick提供的A ...

  2. 【ImageMagick】Unix Windows 源码安装

    [ Unix 源码安装 | Windows 源码安装 ] 首先检查一下电脑里已经安装的ImageMagick版本,输入:   convert -version 除非你想要把对另外的图像格式的支持或升级 ...

  3. ImageMagick还是GraphicsMagick?

    引自:http://co63oc.blog.51cto.com/904636/328997 ImageMagick(IM) 套装包含的命令行图形工具是一主要自由软件:Linux,其他类Unix操作系统 ...

  4. ImageMagick - 智能的灰度空间(GRAYColorspace)让人窒息

    今天在处理一张 gray.jpg 图片时,发现生成的图片色彩空间是: GRAYColorspace 可我在代码中明明设置了: MagickWand * mw = NewMagickWand (); M ...

  5. 如何安装nginx_lua_module模块,升级nginx,nginx-lua-fastdfs-GraphicsMagick动态生成缩略图,实现图片自动裁剪缩放

    如何安装nginx_lua_module模块,升级nginx,nginx-lua-fastdfs-GraphicsMagick动态生成缩略图,实现图片自动裁剪缩放 参考网站:nginx-lua-fas ...

  6. centos6.5/6.3升级安装ImageMagick7.0.1-1

    线上论坛和应用程序的验证码功能都是使用的ImageMagick,但是版本比较老(centos yum安装的ImageMagick6.5.9).接到最新漏洞预报,紧急升级! ImageMagick图象处 ...

  7. Linux平台 Oracle 10gR2(10.2.0.5)RAC安装 Part3:db安装和升级

    Linux平台 Oracle 10gR2(10.2.0.5)RAC安装 Part3:db安装和升级 环境:OEL 5.7 + Oracle 10.2.0.5 RAC 5.安装Database软件 5. ...

  8. 看完SQL Server 2014 Q/A答疑集锦:想不升级都难!

    看完SQL Server 2014 Q/A答疑集锦:想不升级都难! 转载自:http://mp.weixin.qq.com/s/5rZCgnMKmJqeC7hbe4CZ_g 本期嘉宾为微软技术中心技术 ...

  9. Entity Framework Core 1.1 升级通告

    原文地址:https://blogs.msdn.microsoft.com/dotnet/2016/11/16/announcing-entity-framework-core-1-1/ 翻译:杨晓东 ...

随机推荐

  1. github 操作

    https://www.cnblogs.com/cxk1995/p/5800196.html 1在已有的GitHub账号下创建项目. 2将GitHub项目克隆到本地.  git clone https ...

  2. web service 异常

    1.org/apache/commons/discovery/tools/DiscoverSingleton Exception in thread "main" java.lan ...

  3. Spring框架IOC和AOP的实现原理

    IoC(Inversion of Control) (1). IoC(Inversion of Control)是指容器控制程序对象之间的关系,而不是传统实现中,由程序代码直接操控.控制权由应用代码中 ...

  4. ECharts在柱状图的柱子上方显示数量的方法

    在setOption()方法中的series配置中加上itemStyle配置 如下: series: [{ name: '人数', type: 'bar', data: [], //x轴对应列的值 i ...

  5. SpringBoot Junit Maven JaCoCo

    写一下最近写单体测试的一些笔记. SrpingBoot的测试用例: @RunWith(SpringJUnit4ClassRunner.class) @SpringBootTest(classes = ...

  6. C#里XML(JSON)序列化时,自动隐藏值为Null的成员的输出

    从StackOverflow里找到的答案.发现对最新的Newtownsoft的JSON序列化也同样适用. https://stackoverflow.com/questions/5818513/xml ...

  7. Codeforces#543 div2 B. Mike and Children(暴力?)

    题目链接:http://codeforces.com/problemset/problem/1121/B 题意 给n个数 最多的对数 其中每一对(i,j)的ai+aj都相等(不知道怎么解释.... 判 ...

  8. C 语言-----字符串和输入输出函数

    在C语言中,没有字符串类型,那它是怎么表示字符串呢? 由于字符串是一系列单个字符的组合,所以它用char 类型的数组来表示字符串,在数组中,一个数组元素存放一个char类型字符. ]; name 变量 ...

  9. codeforces474D

    Flowers CodeForces - 474D 话说某个幸运的小伙伴X拿到了kevin女神送的蛋糕,然而他的吃法非常奇特,他独创了两种吃蛋糕的办法:一.一次吃一整个蛋糕:二.一次吃k个蛋糕. 那么 ...

  10. sql server2012学习笔记

    第1章 SQL安装   1-1 [SQL Server基础]前言 (10:44) 1-2 SQL Server安装 (08:29) 1-3 第一次登陆 SQL Server (02:58) 1-4 [ ...