【问题标题】:How to convert CMYK/RGB TIFF to RGB JPEG using PHP IMagick如何使用 PHP IMagick 将 CMYK/RGB TIFF 转换为 RGB JPEG
【发布时间】:2012-10-23 06:47:50
【问题描述】:

我有一个 PHP 应用程序需要处理传入的 TIFF 文件。我既不控制也不了解此 TIFF 的色彩空间,应用程序应将所有传入的图像存储为 RGB JPEG。

问题是,传入的 TIFF 文件可以是任何类型的文件:CMYK、RGB、some sort of YCbCr wrapped in sRGB 等等,我需要在保存之前以某种方式将它们转换为 RGB JPEG。

我需要 PHP 中的某种转换函数,它使用 IMagick 扩展,可以获取任何二进制 TIFF 数据并将其转换为正确的 RGB JPEG 二进制数据。它需要处理 TIFF 图像中的不同色彩空间正确。任何输入文件的输出格式 (RGB JPEG) 保持不变。

以下明显的解决方案可以正确转换一些 CMYK TIFF,一些 CMYK TIFF 会反转颜色,而 YCbCr RGB TIFF 会被红色覆盖完全破坏:

$converter = new IMagick();
$converter->setResourceLimit(6, 1);
$converter->readImageBlob($data);

if ($converter->getImageColorspace() != IMagick::COLORSPACE_RGB
    && $converter->getImageColorspace() != IMagick::COLORSPACE_GRAY
) {
    $icc_rgb = file_get_contents('sRGB_v4_ICC_preference.icc');
    $converter->profileImage('icc', $icc_rgb);
    $converter->setImageColorspace(IMagick::COLORSPACE_RGB);
}

$converter->setImageFormat('jpeg');
$converter->setImageCompression(Imagick::COMPRESSION_JPEG);
$converter->setImageCompressionQuality(60);

$converter->resizeImage(1000, 1000, IMagick::FILTER_LANCZOS, 1, true);
$converter->stripImage();

$result = $converter->getImagesBlob();

这个解决方案取自那里:http://blog.rodneyrehm.de/archives/4-CMYK-Images-And-Browsers-And-ImageMagick.html 显然,它不适用于所有色彩空间,因为它不能可靠地检测到它们。如您所见,它甚至使用从it's homepage下载的sRGB_v4 ICC颜色配置文件。

Google 为我找到了一种解决红色覆盖问题的特殊解决方案(只是转换错误之一),但这仅适用于控制台,并且当您事先知道您处理 YCbCr 图像时:

convert some.tif -set colorspace YCbCr -colorspace RGB some.jpg

我可以忍受passthru-ing convert 并通过转换所有需要的神奇开关,但我想我需要事先检测源图像的色彩空间并在每个convert 之前调用identify | grep否则 PHP 应用程序就大材小用了。

【问题讨论】:

    标签: php tiff imagick cmyk image-conversion


    【解决方案1】:

    我也遇到过同样的问题。 它也出现在 imagick forums 中,并且更正被推送到 ImageMagick 6.8.0-4 中。

    所以升级应该可以解决这个问题。我已经升级到 ImageMagick 6.8.1-9,从那以后就没有遇到过这种情况。

    【讨论】:

    • 我正在使用 6.7.7.7,它也可以工作 - 我只是抓取了一些配置文件,我不仅添加了 cmyk 配置文件,还添加了 srgb 配置文件 - 然后它在不升级服务器上完全禁止的页面的情况下工作:(
    猜你喜欢
    • 1970-01-01
    • 2021-03-15
    • 2011-06-17
    • 1970-01-01
    • 1970-01-01
    • 2020-07-03
    • 2016-01-11
    • 2011-01-26
    • 1970-01-01
    相关资源
    最近更新 更多