有人能告诉我如何使用PHP以CMYK或RGB格式识别图像吗?
答案 0 :(得分:2)
好好看看getimagesize。
示例:
<?php
$size = getimagesize($filename);
$fp = fopen($filename, "rb");
if ($size && $fp) {
header("Content-type: {$size['mime']}");
fpassthru($fp);
exit;
} else {
// error
}
?>
它返回一个包含7个元素的数组。
索引0和1分别包含图像的宽度和高度。
索引2是指示图像类型的IMAGETYPE_XXX常量之一。
索引3是一个文本字符串,其正确的高度=“yyy”width =“xxx”字符串,可以直接在IMG标记中使用。
mime是图像的对应MIME类型。此信息可用于使用正确的HTTP Content-type标头传递图像: RGB视频的频道为3,CMYK图片为4。
bits是每种颜色的位数。
对于某些图像类型,通道和位值的存在可能有点令人困惑。例如,GIF每个像素总是使用3个通道,但无法为具有全局颜色表的动画GIF计算每个像素的位数。
失败时,返回FALSE。
答案 1 :(得分:1)
如果图像是jpg格式,您可以在jpeg标题中查看SOF(帧起始 - SOF0或SOF2)部分(参见http://en.wikipedia.org/wiki/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
变量是原始文件内容(例如$img_data = file_get_contents($filename)
)
答案 2 :(得分:1)
这是两个实现。此版本使用GD:
/**
* 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:
/**
* 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版本还会以其他格式(如TIFF)发现CMYK。
答案 3 :(得分:1)
对我来说,这些答案都不够准确。使用Imagemagick。
获取色彩空间(即'RGB','CMYK'等):
exec('identify -format "%[colorspace]\n" '.$imagePath);
获取颜色配置文件:
exec('identify -format "%[profile:icc]\n" '.$imagePath);
答案 4 :(得分:-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";
}