是否有ImageMagick函数可以确定是否支持filetype?

时间:2015-04-30 14:06:49

标签: php imagemagick

我有一个文件路径数组,我需要ImageMagick才能运行。

但有些文件是ImageMagick不支持的文件,中止循环并给出“未捕获异常”错误。我想跳过这些文件然后转到下一个文件,但我找不到任何相关信息。

这是我的循环:

// I'd like this section to be inclosed in a function that decides
// if Imagemagick should skip the file or do the thumbnail process
$imagick = new Imagick();
$imagick->readImage($wpdm_uploads_folder . $file);
$filename = ABSPATH.'wp-content/uploads/thumbs/';

if ( ! is_wp_error( $imagick ) ) {
    if($new_file['extension'] == "psd"){
        $imagick->setIteratorIndex(0);
    }
    $imagick->thumbnailImage(200, 0);
    $imagick->writeImage($filename . $new_file['filename'] . '.png');
}

$imagick->clear();
$imagick->destroy();

2 个答案:

答案 0 :(得分:3)

Imagick::pingImage是您获取有关可能图片信息的朋友。 Ping图像只是查看图像的标题和元信息,并且不加载任何实际的图像数据。结帐文章"to Ping, or not to Ping."

<?php

$images = array(
    'built-in' => 'rose:',
    'valid' => '/tmp/image.png',
    'invalid' => '/tmp/server.sock',
);

$wand = new Imagick();
foreach( $images as $type => $path ) {
    try {
        $okay = $wand->pingImage($path);
    } catch (ImagickException $error) {
        $okay = FALSE;
    }
    if($okay) {
        print $path . ' is an image' . PHP_EOL;
        print $path . ' has a format of ' . $wand->getImageFormat() . PHP_EOL;
    } else {
        print $path . ' is NOT an image' . PHP_EOL;
    }
}

输出......

rose: is an image
rose: has a format of PPM
/tmp/out.png is an image
/tmp/out.png has a format of PNG
/tmp/server.sock is NOT an image

修改

如果您想在处理文件之前了解系统的ImageMagick库支持的图像格式。 Imagick::queryFormats可以生成内置列表,格式和类型。

答案 1 :(得分:0)

对于命令行方法,我的第一个提议是使用

identify -ping -format "%m\n" filename

然后检查<stdout>上的返回值和输出是否为魔术文件类型。 (这可能是@emcconville与PHP一起使用的方法)

但是,我还没有对各种不同的文件格式进行测试。