2011-10-24 5 views
2

PHPを使用しているCMYKまたはRGBのイメージを識別する方法を教えていただけますか?PHPでCMYKイメージを識別する方法

+0

は、Linuxを実行しているサーバーですか?もしそうなら、おそらくLinuxコマンド "file"を使うことができます。 - shell_execからの出力を取得し、CMYKを検索します。私はうまくいくとは思っていませんが、もっと良い方法があります。移植性を犠牲にしていますが、あなたがサイトを運営しようとしているものがLinuxならば(うまくいけば!)うまくいくはずです。しかし、もっと良い方法でなければなりません。 –

答えて

2

getimagesizeをよくご覧ください。

例:これは、7つの要素を持つ配列を返し

<?php 
$size = getimagesize($filename); 
$fp = fopen($filename, "rb"); 
if ($size && $fp) { 
    header("Content-type: {$size['mime']}"); 
    fpassthru($fp); 
    exit; 
} else { 
    // error 
} 
?> 

インデックス0と1にはそれぞれ画像の幅と高さが含まれます。

インデックス2は、イメージのタイプを示すIMAGETYPE_XXX定数の1つです。

インデックス3は、正しい高さ= "yyy" width = "xxx"という文字列で、IMGタグで直接使用できます。

mimeは、画像の対応するMIMEタイプです。この情報は、正しいHTTPコンテンツタイプのヘッダーを使用して画像を配信するために使用できます。 チャネルはRGBピクチャでは3、CMYKピクチャでは4になります。

ビットは、各色のビット数です。

一部の画像タイプでは、チャンネルとビット値の存在が少し混乱する可能性があります。たとえば、GIFは常に1ピクセルあたり3チャネルを使用しますが、グローバルカラーテーブルを使用するアニメーションGIFのピクセルあたりのビット数は計算できません。

失敗した場合はFALSEが返されます。画像はJPG形式の場合

+0

興味深いことに、getimagesizeはPNG画像のチャンネル数を返さないため、このメソッドを使用してPNGにアルファチャンネルがあるかどうかを判断することはできません。 – Synchro

-1
$miImagen = array_values(getimagesize('imagenCMYK.jpg')); 
    list($width, $height, $type, $attr, $bits, $canales) = $miImagen; 
if ($canales = 4){ 
    echo "Imagen: CMYK"; 
    } 
    else{ 
    echo "Tu imagen no es CYMK";  
     } 
0

、あなたはSOF(フレームの開始 - SOF0またはSOF2)を確認することができ、JPEGヘッダ内のセクションを

function isCMYK($img_data) { 
    // Search for SOF (Start Of Frame - SOF0 or SOF2) section in header 
    // http://en.wikipedia.org/wiki/JPEG 
    if (($sof = strpos($img_data, "\xFF\xC0")) === false) { 
     // FF C2 is progressive encoding while FF C0 is standard encoding 
     $sof = strpos($img_data, "\xFF\xC2"); 
    } 
    return $sof? ($img_data[($sof + 9)] == "\x04") : false; 
} 

$img_data変数は、RAWファイルの内容である(http://en.wikipedia.org/wiki/JPEGを参照してください) (例:$img_data = file_get_contents($filename)

1

ここには2つの実装があります。

/** 
* Check if a JPEG image file uses the CMYK colour space. 
* @param string $path The path to the file. 
* @return bool 
*/ 
function imageIsCMYK($path) { 
    $t = getimagesize($path); 
    if (array_key_exists('mime', $t) and 'image/jpeg' == $t['mime']) { 
     if (array_key_exists('channels', $t) and 4 == $t['channels']) { 
      return true; 
     } 
    } 
    return false; 
} 

このバージョンはImageMagickを使用しています:このバージョンではGDを使用しています

/** 
* Check if an image file uses the CMYK colour space. 
* @param string $path The path to the file. 
* @return bool 
*/ 
function imageIsCMYK($path) 
{ 
    $im = new Imagick($path); 
    return ($im->getimagecolorspace() == Imagick::COLORSPACE_CMYK); 
} 

GDのバージョンは私のために約18倍高速です。 imagemagick版では、CMYKがTIFFなどの他の形式でも検出されます。

1

私の答えはどれも正確ではありません。 ImagemagickはPHPに組み込まれているので、これを使用してください。

exec('identify -format "%[colorspace]\n" '.$imagePath);

をカラープロファイルを取得するには:(。すなわち、 'RGB'、 'C​​MYK' など)色空間を得るために

exec('identify -format "%[profile:icc]\n" '.$imagePath);

関連する問題