5

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

我认为问题在于图像上称为 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);?>

稍后在某些页面中,我将使用类似的内容来显示图像。<img src="http://www.example.com/img/.jpg <?php echo $name?>" alt=" <?php echo $alt?>" height="127px" width="190px"/>

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

4

2 回答 2

5

我怀疑色彩空间(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 的一个分支,它速度更快但功能稍弱,并且有一些错误。只有 ImageMagick 可以从 PHP 中使用,其他的必须使用该exec函数执行,尽管这不一定是一件坏事,因为它们可能比 PHP 更好地处理自己的内存和清理。

于 2011-12-30T05:11:03.033 回答
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 并获得相当好的图像近似值。这个问题的第一个回答是合理的回答。

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

于 2011-12-30T01:56:45.250 回答