Imagick::identifyImage

(PECL imagick 2, PECL imagick 3)

Imagick::identifyImage识别图像并获取属性

说明

public Imagick::identifyImage(bool $appendRawOutput = false): array

识别图像并返回属性。属性包括图像宽度、高度、大小等。

参数

appendRawOutput

如果为 true,则将原始输出附加到数组中。

返回值

识别图像并返回属性。属性包括图像宽度、高度、大小等。

错误/异常

错误时抛出 ImagickException。

范例

示例 #1 示例结果格式

Array
(
    [imageName] => /some/path/image.jpg
    [format] => JPEG (Joint Photographic Experts Group JFIF format)
    [geometry] => Array
        (
            [width] => 90
            [height] => 90
        )

    [type] => TrueColor
    [colorSpace] => RGB
    [resolution] => Array
        (
            [x] => 300
            [y] => 300
        )

    [units] => PixelsPerInch
    [fileSize] => 1.88672kb
    [compression] => JPEG
    [signature] => 9a6dc8f604f97d0d691c0286176ddf992e188f0bebba98494b2146ee2d7118da
)

添加注释

用户贡献的注释 3 个注释

rhuanpachecok at gmail dot com
4 年前
我创建了一个函数来解析“rawOutput”,因为此函数提供的的信息相当无用。

function parseIdentify($info) {
$lines = explode("\n", $info);

$outputs = [];
$output = [];
$keys = [];

$currSpaces = 0;
$raw = false;

foreach($lines as $line) {
$trimLine = trim($line);

if(empty($trimLine)) continue;

if($raw) {
preg_match('/^[0-9]+:\s/', $trimLine, $match);

if(!empty($match)) {
$regex = '/([\d]+):';
$regex .= '\s(\([\d|\s]{1,3},[\d|\s]{1,3},[\d|\s]{1,3},[\d|\s]{1,3}\))';
$regex .= '\s(#\w+)';
$regex .= '\s(srgba\([\d|\s]{1,3},[\d|\s]{1,3},[\d|\s]{1,3},[\d|\s|.]+\)|\w+)/';

preg_match($regex, $trimLine, $matches);
array_shift($matches);

$output['Image'][$raw][] = $matches;

continue;
}

else {
$raw = false;
array_pop($keys);
}
}

preg_match('/^\s+/', $line, $match);

$spaces = isset($match[0]) ? strlen($match[0]) : $spaces = 0;
$parts = preg_split('/:\s/', $trimLine, 2);

$_key = ucwords($parts[0]);
$_key = str_replace(' ', '', $_key);
$_val = isset($parts[1]) ? $parts[1] : [];

if($_key == 'Image') {
if(!empty($output)) {
$outputs[] = $output['Image'];
$output = [];
}

$_val = [];
}

if($spaces < $currSpaces) {
for($i = 0; $i < ($currSpaces - $spaces) / 2; $i++) {
array_pop($keys);
}
}

if(is_array($_val)) {
$_key = rtrim($_key, ':');
$keys[] = $_key;

if($_key == 'Histogram' || $_key == 'Colormap') {
$raw = $_key;
}
}

$currSpaces = $spaces;
$arr = &$output;

foreach($keys as $key) {
if(!isset($arr[$key])) {
$arr[$key] = $_val;
}

$arr = &$arr[$key];
}

if(!is_array($_val)) {
$arr[$_key] = $_val;
}

}

$outputs[] = $output['Image'];

return count($outputs) > 1 ? $outputs : $outputs[0];
}

用法示例

$img = new Imagick('example.png');
$identify = parseIdentify($img->identifyImage(true)['rawOutput']);

但此函数返回的“rawOutput”仅包含第一个帧(如果它是 GIF)。或者,您可以使用“identify”命令来获取所有帧的数据

$identify = parseIdentify(shell_exec('identify -verbose example.gif'));
php at ontheroad dot net dot nz
13 年前
如果您使用附加原始输出的选项,则可以从中提取 MIME 类型。我不确定这里后台发生了什么,但它似乎比命令行 identify 工具要少用得多。
rob at OhReally dot nl
16 年前
Imagick::identifyImage() 返回的数组

数组
(
[imageName] => /some/path/image.jpg
[format] => JPEG (Joint Photographic Experts Group JFIF format)
[geometry] => 数组
(
[width] => 90
[height] => 90
)

[type] => TrueColor
[colorSpace] => RGB
[resolution] => 数组
(
[x] => 300
[y] => 300
)

[units] => PixelsPerInch
[fileSize] => 1.88672kb
[compression] => JPEG
[signature] => 9a6dc8f604f97d0d691c0286176ddf992e188f0bebba98494b2146ee2d7118da
)

看起来获取 MIME 类型的唯一方法是 getimagesize()...
To Top