2011-12-30 169 views
5

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

我认为这个问题是在图像上称为cmyk和rgb,但当在网上搜索一种方式,以便将cmyk转换为使用php的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);?> 

在一些网页,我会使用类似后来这显示图像。 < IMG SRC = " http://www.example.com/img/ <?php echo $name?> .JPG " ALT = " <?php echo $alt?> "高度= " 127px "宽度= " 190px "/>

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

+0

我认为你的图像文件可能只是损坏。 – sczizzo 2011-12-30 01:37:02

+0

为什么?,什么让你觉得呢? – user983248 2011-12-30 01:39:32

+0

通常,“文件XYZ因为包含错误而无法显示”意味着文件XYZ损坏或文件扩展名错误。无论哪种方式,它可能不是CMYK-RGB问题。 – sczizzo 2011-12-30 02:03:34

回答

4

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

要将图像从CMYK转换为RGB,您需要安装一个想象的操作程序,例如ImageMagick,GraphicsMagick或ExactImage。这些都可以做你想做的,但必须由服务器管理员安装。如果你luckly,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的民俗,这是速度更快但功能稍弱,并且有一些错误。只有ImageMagick可以从PHP中使用,其他的必须使用exec函数执行,但这不一定是坏事,因为它们可能处理自己的内存和清理比PHP更好。

+0

GraphicsMagick可能在PHP中使用。 [http://www.php.net/manual/en/book.gmagick.php] – Isius 2014-06-11 14:09:43

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值。