PHP imagick,删除配置文件并将色彩空间转换为 RGB

PHP imagick, remove profiles and transform color space to RGB

提问人: 提问时间:7/31/2023 更新时间:8/2/2023 访问量:48

问:

以下脚本上传图像文件,调整大小到定义的最大宽度,压缩缩略图并将其保存到其他位置。 到目前为止,这效果很好,但我遇到了一些问题:

stripImage() 应该删除颜色配置文件,但是当我检查上传的文件时,它们仍然包含配置文件。(?)

transformImageColorspace 应将颜色空间转换为 RGB。但是当我上传灰度图像时,它不会转换为 RGB。

关于如何解决这些问题的任何想法? (PHP 版本 8.1/imagick 3.7)

<?PHP
  $maxWidth = 3000;
  $path = "../files/";
  if (move_uploaded_file($_FILES['file']['tmp_name'], $path)) {
    $img = new imagick();
    $thumbsPath = str_replace('files', 'thumbs', $path);
    $img->readImage($path);
    $img->transformImageColorspace(Imagick::COLORSPACE_SRGB);// does not work
    if ($img->getImageWidth() > $maxWidth) $img->resizeImage($maxWidth, null, Imagick::FILTER_LANCZOS, 0.9);
    if ($img->getImageFormat() == 'jpg' || 'jpeg') {
      $img->setImageCompression(Imagick::COMPRESSION_JPEG);
      $img->setImageCompressionQuality(82);
    }
    $img->stripImage();// does not work
    $img->writeImage($path);
    $img->thumbnailImage(300, null);
    $img->writeImage($thumbsPath);
    $img->destroy();
  }
?>
php imagick

评论

0赞 8/2/2023
更新:刚刚意识到色彩空间设置为 CMYK 的图像正在正确转换为 SRGB。因此,问题缩小到如何将灰度图像转换为 SRGB。stripImage 删除所有元数据。不知何故,之后附加了一个标准(sRGB)配置文件。但这没什么大不了的。

答:

0赞 user20479148 8/2/2023 #1

读取图像后直接添加解决了该问题。$img->setType(Imagick::IMGTYPE_TRUECOLOR);