2017-09-27 5 views
2

J'ai trouvé deux méthodes Imagick pour la qualité de compression d'image fixeQuelle est la différence entre setImageCompressionQuality vs setCompressionQuality - Imagick

A) setImageCompressionQuality

B) setCompressionQuality

donc je veux savoir quel est le meilleur et pourquoi, en dessous de l'état

je lis cette méthode setCompressionQuality ne fonctionne que pour de nouvelles images (?)

Je suis en train de compresser un fichier jpeg/png

$im = new Imagick(); 

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

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

Selon la page php Imagick: http://php.net/manual/fr/book.imagick.php, l'un est pour un objet et l'autre pour une image. "J'ai lu que la méthode setCompressionQuality ne fonctionne que pour les nouvelles images (?)" Oui comme il est dit sur la page ci-dessus. Donc, un seul fonctionnera dans votre situation. – Bonzo

Répondre

1

La méthode setImageCompressionQuality définit la qualité de compression pour votre image actuelle. Cette méthode est un wrapper pour la fonction MagickSetImageCompressionQuality de MagickWand. Source code est:

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); 
} 

Le procédé setCompressionQuality définit la qualité de compression pour l'objet entier. Cette méthode est un wrapper pour la fonction MagickSetCompressionQuality de MagickWand. Source code est:

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); 
} 

Le MagickWand struct détient des instances de Image et ImageInfo, struct source:

struct _MagickWand 
{ 
    ... 

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

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

Les deux Image and ImageInfo struct détiennent un membre de données size_t quality;. Donc, pour votre exemple setImageCompressionQuality est parfaitement bien.