最新在使用ImageMagick处理图片时,发现有时经过处理的图片变大的问题。

例如原图为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 = ;
MagickSetImageCompressionQuality(im, quality); //生成
char *buff = NULL;
size_t len = ;
buff = (char *)MagickWriteImageBlob(im, &len); int fd = -;
fd = open("cover1", O_WRONLY | O_TRUNC | O_CREAT, );
int wlen = write(fd, buff, len);
printf("write len=%d\n", wlen);
close(fd); return ;
}

代码中先是获取原图,然后设置原图质量,最后生成新图。貌似并没有什么改变。

最后经过调试发现,问题在于:设置了新图的质量为100,但其实原图的质量未必为100。从而导致图片变大。

最后通过ImageMagick自带的工具 compare 对比原图和新图,发现图片的差异在于下图:(红色部分即为差异)

实际经过“提升质量到100”的新图,在肉眼上与质量为75的原图并无区别。

所以不要错误的认为原图质量都为100,设置新图质量之前,可以先参考原图的质量。

使用ImageMagick处理图片后导致图片变大的问题的更多相关文章

  1. border-box和CSS3 calc()解决盒模型加边框或边距后尺寸变大的问题

    box-sizing box-sizing的CSS属性是用来改变默认的CSS框模型 属性 初始值:content-box 适用于:接受的所有元素的宽度或高度 继承:无 媒体:visual 指定的:as ...

  2. 6.bootstrap 将文本内容关联一个动作(手机端导航适配)&在超小尺寸下显示,屏幕变大后消失

    1.情景:这是出现在手机端导航适配的,点击文本MENU可以出现下拉的list 解决方法: 1.首先要想到,MENU只有两个状态,因此可以用checkbox实现 2.将MENU放在label标签里面,l ...

  3. css3实现逐渐变大的圆填充div背景的效果

    手机端现在的一些应用会运用上这样一个效果,就是duang的一下出现一个圆变大直到填充整个div,动感十足. 想到css3的scale属性,就自己来实现一下. <div id="bcd& ...

  4. CSS: 首字母字体变大时下划线不对齐的解决方法

    昨天在写2017年百度ife任务六的时候遇到了一个排版问题,需要首字母字体变大的同时,下划线对齐. 首先使用了 ::first-letter伪元素的选择器,将字体变大后,发现下划线没法对齐,代码如下: ...

  5. Response.Write()方法响应导致页面字体变大的解决办法

    关于ASP.NET中用Response.Write()方法响应导致页面字体变大的解决办法     最近研究了ASP.NET,发现一个问题,比方说在页面里面有个Button,要点击以后要打开新窗口,而且 ...

  6. 点击图片或者鼠标放上hover .图片变大. 1)可以使用css中的transition, transform 2) 预先设置一个 弹出div. 3)弹出层 alert ; 4) 浏览器的宽度document.documentElement.clientWidth || document.body.clientWidth

    变大: 方法一: 利用css属性. 鼠标放上 hover放大几倍. .kecheng_02_cell_content img { /*width: 100px; height: 133px;*/ wi ...

  7. 关于windows系统DPI增大导致字体变大的原因分析

    最近再学习WPF开发,其中提到一个特性“分辨率无关性”,主要功能就是实现开发的桌面程序在不同分辨率的电脑上显示时,会根据系统的DPI自动进行UI的缩放,从而不会导致应用程序的失真. 这个里面就提到了个 ...

  8. 【生产环境】Tomcat运行一段时间后访问变慢分析历程

    环境运行一天或者几天,网站访问就很卡,手机端app访问页面出现白屏.Tomcat运行一段时间后访问变慢,但是cpu,内存都正常.日志也是发现不了啥.... 问题的原先分析 1.环境配置(cpu,内存, ...

  9. Base64编码字符串时数据量明显变大

    那就是当把byte[]通过Convert.ToBase64String转换成Base64编码字符串时数据量明显变大 Base64编码的思想是是采用64个基本的ASCII码字符对数据进行重新编码.它将需 ...

随机推荐

  1. Linux学习笔记总结

    零.求人不如求已:        1. 在Linux中,文件,目录,驱动,命令,脚本都视为文件,也即一切皆file. 2.记住使用Linux 的关键就是六个字: 命令.选项.參数. 3.学会看帮助,不 ...

  2. C语言最小生成树prim算法(USACO3.1)

    /* ID: hk945801 LANG: C++ TASK: agrinet */ #include<iostream> #include<cstdio> using nam ...

  3. instancetype VS id

    英文好的直接读下面链接的文章就好了: http://stackoverflow.com/questions/8972221/would-it-be-beneficial-to-begin-using- ...

  4. js调试记录,将客户的调试信息保存到服务器端的一个小方法。

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  5. 加密壳之ACProtect之OEP的处理

    菜驹也玩加密壳之ACProtect之OEP的处理 附件下载:加壳文件和pdf 1.      加密过程: ACProctect v1.41版本号 分析对OEP入口点代码的偷取 2.      分析过程 ...

  6. Unable to find a team with the given Team ID或者Failed to code sign的问题解决

    Unable to find a team with the given Team ID或者Failed to code sign的问题解决 1:问题描述(注:这种情况一般是下载并打开别人项目时) F ...

  7. myeclipse.hbm.xml自动生成

    第一,你的项目是否搭建了hibernate框架? 第二,你是否建立了相应的数据表: 第三,做好前两步,你再把myeclipse和数据库连接起来,在相应的表上点击右键,生成hibernate 关联文件就 ...

  8. id 查询

    Ids Query | Elasticsearch Reference [6.2] | Elastic http://www.elastic.co/guide/en/elasticsearch/ref ...

  9. XMU 1617 刘备闯三国之汉中之战 【BFS+染色】

    1617: 刘备闯三国之汉中之战 Time Limit: 1000 MS  Memory Limit: 128 MBSubmit: 6  Solved: 5[Submit][Status][Web B ...

  10. CollectionView缩放水平卡片布局

    实现效果 实现思路 从Demo效果图中,可以看出来,主要是缩放系数的计算.对于不同距离的cell,其缩放系数要变化,以便整体协调显示. 所以,我们必须重写-layoutAttributesForEle ...