我有一个文件路径数组,我需要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();
答案 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一起使用的方法)。
但是,我还没有对各种不同的文件格式进行测试。