2011-12-30 102 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值。