使用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 = 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 对比原图和新图,发现图片的差异在于下图:(红色部分即为差异)

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

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

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

 

你可能感兴趣的:(ImageMagick)