2017-09-27 75 views
2

我發現Imagick兩種方法集圖像壓縮質量是什麼VS setCompressionQuality setImageCompressionQuality之間的差異 - Imagick

A)setImageCompressionQuality

B)setCompressionQuality

,所以我想知道哪一個是最好的以及爲什麼在下面的條件下

我讀了setCompressionQuality方法只適用於新圖像(?)

我試圖壓縮文件JPEG/PNG

$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一個是一個對象,另一個是圖像。 「我讀過setCompressionQuality方法只適用於新圖像(?)」是的,就像它在上面的頁面上說的那樣。所以只有一個會適用於你的情況。 – Bonzo

回答

1

setImageCompressionQuality設置壓縮質量您的當前圖像的方法。此方法是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是:

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實例:

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;數據成員。所以對於你的例子setImageCompressionQuality是完全沒問題的。

相關問題