使用ImageMagick处理图片后导致图片变大的问题
最新在使用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处理图片后导致图片变大的问题的更多相关文章
- border-box和CSS3 calc()解决盒模型加边框或边距后尺寸变大的问题
box-sizing box-sizing的CSS属性是用来改变默认的CSS框模型 属性 初始值:content-box 适用于:接受的所有元素的宽度或高度 继承:无 媒体:visual 指定的:as ...
- 6.bootstrap 将文本内容关联一个动作(手机端导航适配)&在超小尺寸下显示,屏幕变大后消失
1.情景:这是出现在手机端导航适配的,点击文本MENU可以出现下拉的list 解决方法: 1.首先要想到,MENU只有两个状态,因此可以用checkbox实现 2.将MENU放在label标签里面,l ...
- css3实现逐渐变大的圆填充div背景的效果
手机端现在的一些应用会运用上这样一个效果,就是duang的一下出现一个圆变大直到填充整个div,动感十足. 想到css3的scale属性,就自己来实现一下. <div id="bcd& ...
- CSS: 首字母字体变大时下划线不对齐的解决方法
昨天在写2017年百度ife任务六的时候遇到了一个排版问题,需要首字母字体变大的同时,下划线对齐. 首先使用了 ::first-letter伪元素的选择器,将字体变大后,发现下划线没法对齐,代码如下: ...
- Response.Write()方法响应导致页面字体变大的解决办法
关于ASP.NET中用Response.Write()方法响应导致页面字体变大的解决办法 最近研究了ASP.NET,发现一个问题,比方说在页面里面有个Button,要点击以后要打开新窗口,而且 ...
- 点击图片或者鼠标放上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 ...
- 关于windows系统DPI增大导致字体变大的原因分析
最近再学习WPF开发,其中提到一个特性“分辨率无关性”,主要功能就是实现开发的桌面程序在不同分辨率的电脑上显示时,会根据系统的DPI自动进行UI的缩放,从而不会导致应用程序的失真. 这个里面就提到了个 ...
- 【生产环境】Tomcat运行一段时间后访问变慢分析历程
环境运行一天或者几天,网站访问就很卡,手机端app访问页面出现白屏.Tomcat运行一段时间后访问变慢,但是cpu,内存都正常.日志也是发现不了啥.... 问题的原先分析 1.环境配置(cpu,内存, ...
- Base64编码字符串时数据量明显变大
那就是当把byte[]通过Convert.ToBase64String转换成Base64编码字符串时数据量明显变大 Base64编码的思想是是采用64个基本的ASCII码字符对数据进行重新编码.它将需 ...
随机推荐
- ul、li中的DIV垂直居中
当li高度可动态改变时,li中的DIV始终保持垂直居中. 由于高度不固定,不能用margin或者padding解决. 最头疼的是vertical-align: middle;也莫名其妙的失效了. 最终 ...
- Semantic Parsing(语义分析) Knowledge base(知识图谱) 对用户的问题进行语义理解 信息检索方法
简单说一下所谓Knowledge base(知识图谱)有两条路走,一条是对用户的问题进行语义理解,一般用Semantic Parsing(语义分析),语义分析有很多种,比如有用CCG.DCS,也有用机 ...
- Oracle - 创建表视图等 - DDL
解锁scott: sqlplus / as sysdba; alter user scott account unlock; alter user scott identified by tiger; ...
- GridView认识(一)
GridView认识(一)导读:一.显示数据 a.通过代码绑定显示数据 b.通过数据源控件绑定显示数据 二.外观控制 a.整体外观控制 b.列表行的控制 c.列表列的控制 内容:一.显示数据(一)代码 ...
- CodeForces-427D:Match & Catch (后缀自动机)
Police headquarter is monitoring signal on different frequency levels. They have got two suspiciousl ...
- Linux服务器性能问题
如何快速分析出现性能问题的Linux服务器 https://www.cnblogs.com/leixiaobai/category/1246164.html Brendan Gregg曾经分享过当遇到 ...
- 【POJ 1947】 Rebuilding Roads
[题目链接] 点击打开链接 [算法] f[i][j]表示以i为根的子树中,最少删多少条边可以组成j个节点的子树 树上背包,即可 [代码] #include <algorithm> #inc ...
- bzoj1046 [HAOI2007]上升序列——LIS
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1046 倒序求最长下降子序列,则得到了每个点开始的最长上升子序列: 然后贪心输出即可. 代码如 ...
- c#截屏功能的实现
using System;using System.Collections.Generic;using System.Drawing;using System.Linq;using System.Ru ...
- oracle 备份数据
exp AC_SSO/AC_SSO@HB file=d:\wamp\Golden3C_AuthenticationCenter.dmp owner=AC_SSO full=y用户名/密码@服务 exp ...