使用ImageMagick处理图片后导致图片变大的问题
2015-07-03 16:07
369 查看
最新在使用ImageMagick处理图片时,发现有时经过处理的图片变大的问题。
例如原图为27K,经处理后的图片会变为77K。
先看测试代码:
代码中先是获取原图,然后设置原图质量,最后生成新图。貌似并没有什么改变。
最后经过调试发现,问题在于:设置了新图的质量为100,但其实原图的质量未必为100。从而导致图片变大。
最后通过ImageMagick自带的工具 compare 对比原图和新图,发现图片的差异在于下图:(红色部分即为差异)
实际经过“提升质量到100”的新图,在肉眼上与质量为75的原图并无区别。
所以不要错误的认为原图质量都为100,设置新图质量之前,可以先参考原图的质量。
例如原图为27K,经处理后的图片会变为77K。
先看测试代码:
// imgtest.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include <wand/magick_wand.h> #include "fcntl.h" #include <sys/io.h> #include "unistd.h" int main( int argc, char **argv ) { MagickWand *im = NULL; im = NewMagickWand(); MagickBooleanType bRet = MagickFalse; bRet = MagickReadImage(im, "fengjie.jpg"); if ( MagickTrue != bRet ) { printf("MagickReadImage fail.\n"); } printf("read sucess..\n"); //获取 MagickSizeType size = MagickGetImageSize(im); unsigned long width = MagickGetImageWidth(im); unsigned long height = MagickGetImageHeight(im); size_t quality = MagickGetImageCompressionQuality(im); char *format = MagickGetImageFormat(im); printf("src size=%ld\n", size); printf("src width=%d\n", width); printf("src height=%d\n", height); printf("src quality=%d\n", quality); printf("src format=%s\n", format); //修改质量 quality = 100; MagickSetImageCompressionQuality(im, quality); //生成 char *buff = NULL; size_t len = 0; buff = (char *)MagickWriteImageBlob(im, &len); int fd = -1; fd = open("cover1", O_WRONLY | O_TRUNC | O_CREAT, 00644); int wlen = write(fd, buff, len); printf("write len=%d\n", wlen); close(fd); return 0; }
代码中先是获取原图,然后设置原图质量,最后生成新图。貌似并没有什么改变。
最后经过调试发现,问题在于:设置了新图的质量为100,但其实原图的质量未必为100。从而导致图片变大。
最后通过ImageMagick自带的工具 compare 对比原图和新图,发现图片的差异在于下图:(红色部分即为差异)
实际经过“提升质量到100”的新图,在肉眼上与质量为75的原图并无区别。
所以不要错误的认为原图质量都为100,设置新图质量之前,可以先参考原图的质量。
相关文章推荐
- mysql学习6 权限管理
- pgsql常用命令
- python检测是文件还是目录的方法
- 黑马程序员学习日记 overload与override的区别
- 黑马程序员---网络编程(socket编程)
- 逆向分析的经验
- 关于main函数中argc和argv的简单介绍
- Windows Server 2012 启用 Intel82579V网卡
- AndroidManifest.xml——meta-data
- MYSQL的包含查询,类似like,又不同于like
- jquery 折叠菜单
- 计算机操作系统笔记
- Android实现加载网络端图片
- 查看、修改oracle字符集,查看oracle版本
- <随笔>我的计算机视觉之路(一):转行CV
- Llogback实例
- TCP/IP三次握手和四次挥手
- mysql判断一个字符串是否包含某子串
- CXF+Spring 搭建的WebService
- [LeetCode] Word Ladder II