ImageMagick: 6.8.3 升级到 6.8.9 遇到的问题
最终还是决定升级到目前最新版: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 遇到的问题的更多相关文章
- linux下安装php的imagick扩展模块(附php升级脚本)
imagick是一个PHP的扩展,是一套软件系列,用ImageMagick提供的API来进行图片的创建与修改,不过这些操作已经包装到扩展imagick中去了,最终调用的是ImageMagick提供的A ...
- 【ImageMagick】Unix Windows 源码安装
[ Unix 源码安装 | Windows 源码安装 ] 首先检查一下电脑里已经安装的ImageMagick版本,输入: convert -version 除非你想要把对另外的图像格式的支持或升级 ...
- ImageMagick还是GraphicsMagick?
引自:http://co63oc.blog.51cto.com/904636/328997 ImageMagick(IM) 套装包含的命令行图形工具是一主要自由软件:Linux,其他类Unix操作系统 ...
- ImageMagick - 智能的灰度空间(GRAYColorspace)让人窒息
今天在处理一张 gray.jpg 图片时,发现生成的图片色彩空间是: GRAYColorspace 可我在代码中明明设置了: MagickWand * mw = NewMagickWand (); M ...
- 如何安装nginx_lua_module模块,升级nginx,nginx-lua-fastdfs-GraphicsMagick动态生成缩略图,实现图片自动裁剪缩放
如何安装nginx_lua_module模块,升级nginx,nginx-lua-fastdfs-GraphicsMagick动态生成缩略图,实现图片自动裁剪缩放 参考网站:nginx-lua-fas ...
- centos6.5/6.3升级安装ImageMagick7.0.1-1
线上论坛和应用程序的验证码功能都是使用的ImageMagick,但是版本比较老(centos yum安装的ImageMagick6.5.9).接到最新漏洞预报,紧急升级! ImageMagick图象处 ...
- 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. ...
- 看完SQL Server 2014 Q/A答疑集锦:想不升级都难!
看完SQL Server 2014 Q/A答疑集锦:想不升级都难! 转载自:http://mp.weixin.qq.com/s/5rZCgnMKmJqeC7hbe4CZ_g 本期嘉宾为微软技术中心技术 ...
- Entity Framework Core 1.1 升级通告
原文地址:https://blogs.msdn.microsoft.com/dotnet/2016/11/16/announcing-entity-framework-core-1-1/ 翻译:杨晓东 ...
随机推荐
- 保存后自动格式化代码(vscode)
痛点: 写项目的时候, 我们经常会拷贝一些代码, 每当拷贝过来都需要重新调整, 如果可以实现保存自动调整代码, 将会给我们带来很多的便利! 解决: 其实对于vscode来说, 实现这一点很容易. 我们 ...
- Hbase获取流程
1\\.客户端chou操作 2.服务器dauncaozuo操作 3\存储优化
- Linux在shell中进入python敲方向键出现「^[[C^[[D」的解决办法
安装yum -y install readline-devel,然后在重新编译python
- 三、ASP.NET Core 部署Linux
预备工作 1.删除dotnet core sdk sudo yum erase libunwind libicu 2.删除链接 sudo rm -rf /usr/local/bin 3.sudo yu ...
- Linux下 rewrite_mod 的配置
以下使用最新的 Ubuntu 16.04 测试; 安装好apache后先确认有没有rewrite模块,大多数情况下是有的:ls /etc/apache2/mods-available |grep re ...
- EChart.js 笔记一
一直对数据可视化比较感兴趣,当年 Alibaba 年报晚会上的大屏显示可谓是技惊四座,够震撼,将数据之美展现得淋漓尽致. 国内的前端数据可视化插件中,echart.js 算是热度很高的,也容易上手,算 ...
- Javascript 实现复制(Copy)动作方法大全
一.实现点击按钮,复制文本框中的的内容 <script type="text/javascript"> function copyUrl2() { var Url2=d ...
- DotNetty 实现 Modbus TCP 系列 (二) ModbusFunction 类图及继承举例
本文已收录至:开源 DotNetty 实现的 Modbus TCP/IP 协议 ModbusFunction 类图如下: 如前文所述,所有请求/相应的 PDU 均继承自 ModbusFunction, ...
- Subway POJ - 2502 最短路
题意:给出地铁线 起点和 终点 坐地铁速度为v2 走路为v1 求起点到终点的最短距离 (答案需要四舍五入这里坑了好久) 拿给出的地铁站点 和起点终点建边即可 然后跑个迪杰斯特拉 #inclu ...
- Sudoku POJ - 3076
Sudoku Time Limit: 10000MS Memory Limit: 65536K Total Submissions: 5769 Accepted: 2684 Descripti ...