使用php将cmyk转换为rgb

使用php将cmyk转换为rgb,php,image,rgb,cmyk,Php,Image,Rgb,Cmyk,我正在使用以下脚本将图像保存到文件夹中,但有一个图像显示此消息“图像无法显示,因为它包含错误” 我认为问题在于图像上的cmyk和rgb,但当在web上搜索一种使用php将cmyk转换为rgb的方法时,我找不到一个如何实现这一点的示例 这里有一个例子:但我不知道如何在我的案例中使用它 图像的链接类似于:www.example.com/attachment?id=2290 脚本如下: <?php $image = 'http://www.dealrush.ie/attachment?id=2

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

我认为问题在于图像上的cmyk和rgb,但当在web上搜索一种使用php将cmyk转换为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);?>

在后面的一些页面中,我将使用类似这样的内容来显示图像。 .jpg“alt=“
“height=“127px”width=“190px”/

任何有关转换这些图像的帮助都将不胜感激 谢谢
Daniel

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

因此,这对你来说意味着你必须从CMYK转换为RGB。不幸的是,没有一种方法可以做到这一点。如果你看Photoshop之类的东西,它要求你在转换之前首先设置要模拟的墨水和纸张类型

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


你还可以找出你想在Photoshop或其他应用程序中使用的特定转换,并以此为基础制作一个表格。我以前做过这样的工作,创建了一个图像,比如说1024x1024。每个32x32正方形都有一个渐变,x方向的青色从0到1,y方向的洋红从0到1。然后从左到右,每个正方形的黄色越来越多,从上到下,黑色越来越多。我将图像加载到Photoshop中,将其转换为RGB,然后以无损格式(如TIFF)再次保存,无需瓷砖、条带或层(便于使用)。然后我将其加载到我的应用程序中,并将其用作查找表,以对RGB进行相同的转换。第一次转换时有点麻烦,但一旦制作了转换表,就很容易使用。我只使用双线性插值来生成RGB值。

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

要将图像从CMYK转换为RGB,您需要安装imagine操纵程序,如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的一个分支,它的速度更快,但功能稍差,并且有一些bug。只有ImageMagick可以从PHP中使用,其他的必须使用
exec
函数执行,尽管这可能不是一件坏事处理自己的内存和清理比PHP要好得多。

我认为您的图像文件可能已经损坏。为什么?您为什么会这样认为?通常,“文件XYZ无法显示,因为它包含错误。”“表示文件XYZ已损坏或具有错误的文件扩展名。无论如何,这可能不是CMYK-RGB问题。GraphicsMagick可以从php中使用。[