【问题标题】:What is difference between setImageCompressionQuality vs setCompressionQuality - ImagicksetImageCompressionQuality 与 setCompressionQuality 有什么区别 - Imagick
【发布时间】:2018-03-08 13:22:44
【问题描述】:

我在 Imagick 中找到了两种设置图像压缩质量的方法

A) 设置图像压缩质量

B ) 设置压缩质量

所以我想知道哪一个是最好的以及为什么在以下条件下

我读到setCompressionQuality 方法仅适用于新图像 (?)

我正在尝试压缩文件 jpeg/png

$im = new Imagick();

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

$im->writeImage($file);

【问题讨论】:

  • 根据 Imagick php 页面:php.net/manual/en/book.imagick.php 一个用于对象,另一个用于图像。 “我读到 setCompressionQuality 方法仅适用于新图像(?)”是的,正如上面页面上所说的那样。因此,只有一种适用于您的情况。

标签: php image image-processing imagemagick imagick


【解决方案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 非常好。

【讨论】:

    猜你喜欢
    • 2012-05-10
    • 1970-01-01
    • 1970-01-01
    • 2011-02-19
    • 2013-03-14
    • 2018-09-14
    • 2014-01-03
    • 2021-12-22
    • 2017-10-25
    相关资源
    最近更新 更多