2017-09-27 1 views
2

私はsetCompressionQuality対setImageCompressionQualityの違いは何ですか - Imagick

ので、私は最高である1を知りたい設定された画像の圧縮品質

A)setImageCompressionQuality

B)setCompressionQualityためImagickで二つの方法を見つけましたなぜ下の状態にあるのですか

私は、setCompressionQualityメソッドは新しい画像(?)の場合のみ有効であることをお読みください

は私が

$im = new Imagick(); 

$im->readImage($file); // path/to/file 
$im->setImageCompressionQuality($quality); // 90,80,70 e.g. 

$im->writeImage($file); 
+1

Imagickのphpページによると、http://php.net/manual/en/book.imagick.phpはオブジェクト用でもう1つは画像用です。 「setCompressionQualityメソッドは、新しい画像(?)に対してのみ機能する」と読んでいます。上記のページの通りです。だからあなたの状況では1人だけが働きます。 – Bonzo

答えて

1

あなたの現在の画像のための圧縮品質を設定setImageCompressionQuality方法をPNG/JPEGファイルを圧縮しようとしています。このメソッドはMagickWandMagickSetImageCompressionQuality関数のラッパーです。 Source codeは:

WandExport MagickBooleanType MagickSetImageCompressionQuality(MagickWand *wand, 
    const size_t quality) 
{ 
    assert(wand != (MagickWand *) NULL); 
    assert(wand->signature == MagickWandSignature); 
    if (wand->debug != MagickFalse) 
    (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 
    if (wand->images == (Image *) NULL) 
    ThrowWandException(WandError,"ContainsNoImages",wand->name); 

    //This line sets the quality for the instance 'images' 
    wand->images->quality=quality; 
    return(MagickTrue); 
} 

オブジェクト全体の圧縮品質を設定setCompressionQuality方法。このメソッドはMagickWandMagickSetCompressionQuality関数のラッパーです。 Source codeは:

struct _MagickWand 
{ 
    ... 

    Image 
    *images;   /* The images in this wand - also the current image */ 

    ImageInfo 
    *image_info;  /* Global settings used for images in Wand */ 
    ... 
}; 

両方Image and ImageInfo構造体はsize_t quality;データメンバを保持する:

WandExport MagickBooleanType MagickSetCompressionQuality(MagickWand *wand, 
    const size_t quality) 
{ 
    assert(wand != (MagickWand *) NULL); 
    assert(wand->signature == MagickWandSignature); 
    if (wand->debug != MagickFalse) 
    (void) LogMagickEvent(WandEvent,GetMagickModule(),"%s",wand->name); 

    //This line sets quality for the image_info struct instance. 
    wand->image_info->quality=quality; 
    return(MagickTrue); 
} 

MagickWand構造体はImageImageInfo構造体、sourceのインスタンスを保持しています。したがって、あなたの例ではsetImageCompressionQualityは完璧です。

関連する問題