2011-12-30 13 views
5

次のスクリプトを使用してフォルダに画像を保存していますが、「この画像にはエラーが含まれているため表示できません」という画像が1枚あります。PHPを使用してcmykからrgbへ

私はこの問題はイメージ上でcmykとrgbと呼ばれるものだと思うが、Web上でPHPを使ってcmykをrgbに変換すると、これを行う方法の例は見つからない。

ここに例の一つです:http://offshootinc.com/blog/2008/10/24/using-the-imagick-class-to-convert-a-cmyk-jpeg-to-rgb/しかし私は私の場合にそれを使用する方法をundestandしません。

画像のリンクのようなものです: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

+0

なぜ?あなたはそれをどう思いますか? – user983248

+0

一般に、「ファイルXYZはエラーが含まれているため表示できません」とは、ファイルXYZが壊れているか、ファイルの拡張子が間違っていることを意味します。いずれにしても、おそらくCMYK-RGBの問題ではありません。 – sczizzo

答えて

4

私は色空間(CMYKまたはRGB)が問題であるとは思っていません。誰もがネット上でRGB画像を使用しなければならないが、ブラウザは不満なくCMYK画像を表示する。

画像をCMYKからRGBに変換するには、ImageMagick、GraphicsMagick、ExactImageなどのimagine操作プログラムがインストールされている必要があります。これらのいずれもあなたが望むことをすることができますが、サーバー管理者がインストールする必要があります。 ImageMagickにはExactImageが最速で、最も強力であり、かつGraphicsMagickのがあるのImageMagickの民族であることを

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

注意:あなたがlucklyしている場合は、ImageMagickには、すでにその場合、あなたはこれを行うことができ、取り付けられている場合がありますより速くて少し強く、いくつかのバグがあります。 ImageMagickだけがPHPから使用できますが、他のものはexec関数で実行する必要がありますが、PHPよりもはるかに優れたメモリとクリーンアップを処理するため、必ずしも悪いことではありません。

+0

GraphicsMagickは、PHPから使用できます。 [http://www.php.net/manual/en/book.gmagick.php] – Isius

2

CMYKは、加算ではなく減法混合を使用して画像を印刷する方法です。あなたが知っているように、RGBカラーは赤、緑、青で構成され、コンピュータのモニタやテレビのピクセルはそれらのカラーを放射します。印刷においては、一般に白紙が使用される。これは、赤色、緑色、および青色の光の100%を(近い)反射する。インクを紙に置くと、インクはそれらの色の1つ以上を吸収します。そのため、赤いインクは実際に紙から反射される緑色と青色の光を実際に吸収しています。印刷では、赤、緑、青の補色が使用されます。それらはシアン、マゼンタ、イエローです。 CMY =シアン、マゼンタ、イエロー。 Kは黒を表します。 (RGBの青は既にBであるので、Bは使用していませんでした)シアン、マゼンタ、イエローのインクを使用して濃い黒を得るのは難しいことが分かりました。彼らはそれを見た目良くするために少し純粋な黒(それは光の近くに反射する)を追加します。

これは、CMYKからRGBに変換する必要があるということです。残念ながら、これを行う方法は1つではありません。 Photoshopのようなものを見る場合は、変換する前にエミュレートするインクと用紙の種類を最初に設定する必要があります。

黒の成分を含まない純粋なCMYをお持ちでしたら、r = 1.0-c、g = 1.0-m、b = 1.0-yを使用して、画像の適度な近似を得ることができます。 this questionの最初の応答は妥当な応答です。

また、Photoshopや他のアプリケーションで使用したい特定の変換を把握し、そこからテーブルを作成することもできます。私は1024x1024のようなイメージを作成してこれを前にしています。各32x32正方形は、0から1に向かうx方向のシアンと、0から1に向かうy方向のマゼンタとを有する勾配を有する。次に、左から右へと、各正方形は黄色の量が増加し、彼らは黒の量が増えています。私はPhotoshopにイメージをロードし、RGBに変換し、タイル、ストリップ、またはレイヤーなしで(使い易いように)ロスレスフォーマット(TIFFのような)で再び保存します。それから私はそれを私のアプリにロードし、ルックアップテーブルとして使ってRGBへの同じ変換を行います。これは最初は面倒ですが、いったん変換テーブルを作成すると、使用するのはかなり簡単です。私は単色補間を使ってRGB値を生成しています。

関連する問題