【问题标题】:cmyk to rgb using phpcmyk 到 rgb 使用 php
【发布时间】:2012-01-30 07:30:21
【问题描述】:

我正在使用以下脚本将图像保存在文件夹中,但是有一个图像显示此消息“图像无法显示,因为它包含错误”。

我认为问题在于图像上称为 cmyk 和 rgb 的东西,但是在网上搜索使用 php 将 cmyk 转换为 rgb 的方法时,我找不到如何执行此操作的示例。

这是一个例子:http://offshootinc.com/blog/2008/10/24/using-the-imagick-class-to-convert-a-cmyk-jpeg-to-rgb/ 但我不明白如何在我的情况下使用它。

图片的链接类似于:www.example.com/attachment?id=2290

脚本如下:

<?php 
$image = 'http://www.dealrush.ie/attachment?id=2290';
$name = 'somename';
$alt = 'somealt';
$saveimage = file_get_contents($image);
file_put_contents("/usr/local/pem/vhosts/155030/webspace/httpdocs/img/$name.jpg", $saveimage);?>

稍后在某些页面中,我将使用类似的内容来显示图像。 <?php echo $name?>.jpg" alt="&lt;?php echo $alt?&gt;" height="127px" width="190px"/>

任何有关转换这些图像的帮助将不胜感激 谢谢 丹尼尔

【问题讨论】:

  • 我认为您的图像文件可能已损坏。
  • 为什么?,是什么让你这么想?
  • 一般情况下,“文件 XYZ 因包含错误而无法显示”表示文件 XYZ 已损坏或文件扩展名错误。无论哪种方式,这可能都不是 CMYK-RGB 问题。

标签: php image rgb cmyk


【解决方案1】:

我怀疑色彩空间(CMYK 或 RGB)是您的问题。虽然每个人都应该在网络上使用 RGB 图像,但浏览器仍然会毫无怨言地显示 CMYK 图像。

要将图像从 CMYK 转换为 RGB,您需要安装一个图像处理程序,例如 ImageMagick、GraphicsMagick 或 ExactImage。这些都可以做你想做的,但必须由服务器管理员安装。如果幸运的话,可能已经安装了 ImageMagick,在这种情况下,您可以这样做:

$image= '/path/to/your/file.jpg';
$i = new Imagick($image);
$i->setImageColorspace(Imagick::COLORSPACE_SRGB);
$i->writeImage($image);
$i->destroy();

请注意,ImageMagick 是最强大的,ExactImage 是最快的,GraphicsMagick 是 ImageMagick 的一个分支,它速度更快但功能稍弱,并且有一些错误。 PHP 中只能使用 ImageMagick,其他必须使用 exec 函数执行,尽管这不一定是坏事,因为它们可能比 PHP 更好地处理自己的内存和清理。

【讨论】:

【解决方案2】:

CMYK 是一种使用减色光混合而不是加色法打印图像的方法。您可能知道,RGB 颜色由红色、绿色和蓝色组成,您的计算机显示器或电视中的像素会发出这些颜色。在印刷中,一般使用白纸。它反射(接近)100% 的红光、绿光和蓝光。当您将墨水涂在纸上时,墨水会吸收其中一种或多种颜色。因此,红色墨水实际上会吸收通常会从纸张反射的绿色和蓝色光。在印刷中,他们使用红色、绿色和蓝色的补色。它们是青色、品红色和黄色。 CMY = 青色、品红色、黄色。 K代表黑色。 (他们没有使用 B,因为 RGB 中的蓝色已经是 B。)事实证明,使用青色、品红色和黄色墨水很难获得漂亮的深黑色(而且价格昂贵——你必须使用全部 3 种!),所以他们添加了一点纯黑色(反射几乎没有光)以使其看起来更好。

所以这对您来说意味着您必须从 CMYK 转换为 RGB。不幸的是,没有一种方法可以做到这一点。如果您查看 Photoshop 之类的软件,则需要先设置要模拟的墨水和纸张类型,然后再进行转换。

如果您有没有黑色成分的纯 CMY,您可以使用 r = 1.0 - c、g = 1.0 - m、b = 1.0 - y 并获得相当好的图像近似值。 this question 中的第一个响应是合理的响应。

您还可以找出要在 Photoshop 或其他应用程序中使用的特定转换,并从中制作表格。我之前通过创建一个图像(例如 1024x1024)来完成此操作。每个 32x32 的正方形都有一个渐变,x 方向的青色从 0 到 1,y 方向的洋红色从 0 到 1。然后从左到右,每个正方形的黄色量增加,从上到下,他们有越来越多的黑色。我将图像加载到 Photoshop 中,将其转换为 RGB,然后以无损格式(如 TIFF)再次保存,没有平铺、条带或图层(为便于使用)。然后我将它加载到我的应用程序中,并将其用作查找表来执行与 RGB 的相同转换。第一次有点麻烦,但是一旦你制作了转换表,它就很容易使用。我只是使用双线性插值来生成 RGB 值。

【讨论】:

    猜你喜欢
    • 2011-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-04
    • 1970-01-01
    • 1970-01-01
    • 2012-11-29
    相关资源
    最近更新 更多