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
参数,以使它们在 Adobe Reader 中正确显示。
我认为 CMYK PNG 文件需要相同的参数才能正确显示(而不是反转)。
字节值 255 对于 RGB 颜色非常亮,对于 CMYK 颜色非常暗。似乎 Adobe 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 变为负片的主要内容,如果未能解决你的问题,请参考以下文章
MATLAB应用实战系列(七十一)-MATLAB实战应用案例:图像处理将灰度图片变成负片&彩色图片转换成灰度图片