CMYK 图像使用 TCPDF 变为负片

Posted

技术标签:

【中文标题】CMYK 图像使用 TCPDF 变为负片【英文标题】:CMYK images turn negative with TCPDF 【发布时间】:2014-07-06 20:57:53 【问题描述】:

我在使用 TCPDF 生成包含 CMYK PNG 文件的 PDF 图像时遇到问题。

系统允许用户上传照片,可以是 JPG、GIF 或 PNG。 ImageMagick 在必要时将这些图像从 RGB 转换为 CMYK。然后将图像上传到文件服务器 (Amazon S3)。

显示时,图像只是在“预览”页面上以 html 格式显示在屏幕上,单击按钮会生成 PDF。

PDF 是图像变为负片的点(颜色反转)。据我所知,在 TCPDF 将图像插入文档之前,图像一直保持预期状态:

$tcpdf->Image($path_to_image, 0, 3.5, '42', '22', $file_extension, '', '', false, 300, '', false, false, 0, false, false, false);

---->

文件类型为PNG,扩展名为png。颜色配置文件是 CMYK。在浏览器中打开时,图像看起来不错。

我也无法在我的本地开发环境中复制它,它似乎只发生在实时站点上,这使得复制变得更加困难。这似乎只发生在 PNG 文件中。

this article 的 OP 在他的一个咆哮帖子中忽略了这个问题,但似乎没有解决它。

有没有人遇到过这个问题并想出了如何解决它?我猜它发生在 TCPDF (v5.9.103) 类的某个地方,因为源文件很好。

【问题讨论】:

【参考方案1】:

好吧,除非 Wikipedia 被误导,否则没有 CMYK png 这样的东西。

这是***摘录:

PNG 设计用于在 Internet 上传输图像,而不是用于专业品质的打印图形,因此不支持非 RGB 颜色空间,例如 CMYK。

我的猜测是浏览器并不关心 png 的颜色配置文件,他们总是“看到”它是 RGB。我假设您将 TCPDF 设置为以 CMYK 输出 PDF,并且由于 .png 文件不支持 CMYK...

您是否尝试过将其转换为 .tiff(假设您需要保留 Alpha 通道),然后使用 Imagemagick 转换为 CMYK,然后再将其传递给 TCPDF?

【讨论】:

非常有趣 - 我会跟进的! 我想这是一件好事,这有一个微不足道的答案。我将从支持的文件扩展名列表中删除 PNG,然后将其保留在那里。谢谢。【参考方案2】:

我对 TCPDF 一无所知,也没有尝试过 CMYK PNG 文件。

但是当我向 PDFsharp 添加对 CMYK JPEG 文件的支持时,我必须为具有 /DeviceCMYK 色彩空间的 JPEG 图像添加一个值为 [1 0 1 0 1 0 1 0]/DECODE 参数,以使它们在 Adob​​e Reader 中正确显示。

我认为 CMYK PNG 文件需要相同的参数才能正确显示(而不是反转)。

字节值 255 对于 RGB 颜色非常亮,对于 CMYK 颜色非常暗。似乎 Adob​​e Reader 需要提示才能正确处理此问题。 RGB 是加法,CMYK 是减法。

Adobe PDF 参考中介绍了 DeviceCMYK 颜色空间:

注意这些数字的意义与RGB颜色的意义相反 组件。

【讨论】:

【参考方案3】:

.png 无法使用 CMYK 颜色配置文件尝试使用 .jpg。最快的解决方法是

<?php

$file = "myimage.png";

$image = imagecreatefrompng($file);
$bg = imagecreatetruecolor(imagesx($image), imagesy($image));

imagefill($bg, 0, 0, imagecolorallocate($bg, 255, 255, 255));
imagealphablending($bg, TRUE);
imagecopy($bg, $image, 0, 0, 0, 0, imagesx($image), imagesy($image));
imagedestroy($image);

header('Content-Type: image/jpeg');

$quality = 50;
imagejpeg($bg);
imagedestroy($bg);

?>

【讨论】:

以上是关于CMYK 图像使用 TCPDF 变为负片的主要内容,如果未能解决你的问题,请参考以下文章

TCPDF 错误:[图像] 无法获取图像

TCPDF:如何将图像放入 HTML 块中?

MATLAB应用实战系列(七十一)-MATLAB实战应用案例:图像处理将灰度图片变成负片&彩色图片转换成灰度图片

MATLAB应用实战系列(七十一)-MATLAB实战应用案例:图像处理将灰度图片变成负片&彩色图片转换成灰度图片

如何在 C++ 中创建 CMYK 模式图像?

imagemagick 将 RGB PNG 转换为 CMYK PDF