使用ImageMagick处理图片后致使图片变大的问题

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

例如原图为27K,经处理后的图片会变为77K。测试

 

先看测试代码:spa

// 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。从而致使图片变大。code

 

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

实际通过“提高质量到100”的新图,在肉眼上与质量为75的原图并没有区别。blog

因此不要错误的认为原图质量都为100,设置新图质量以前,能够先参考原图的质量。图片

相关文章
相关标签/搜索