当非图像传递给它时,ImageMagick会出错

时间:2012-01-10 09:11:51

标签: php imagemagick

我有一个PHP函数,用于优化图像的命令行工具,在下面的函数中,它运行ImageMagick传递给它的所有文件并获取文件扩展名。

直到今晚我才在实际图像文件上测试过它。我测试了一个混合了图像和其他文件的文件夹。

结果是这样的错误......

identify.exe: no decode delegate for this image format  
`E:\Server\img\testfiles\archive.php' @ error/constitute.c/ReadImage/532.

现在我知道当这个函数专门用于确定该值时,很难过滤非图像文件....但是有一种更好的方法可以处理这种情况,如果一个非图像文件通过我的程序传递给这个函数,我可以抑制错误或避免它们发生吗?

功能......

/**
 * is_image 
 * @param mixed $file_path 
 * @static
 * @access public
 * @return void
 */
public static function is_image($file_path)
{
    if (!file_exists($file_path)) {
        throw new FileNotFoundException("File or path not found: " . $file_path);
    }
    $types = array("gif", "png", "gifgif", "jpg", "jpeg", "bmp");

    //exec("/usr/bin/identify -quiet -format \"%m\" $file_path", $return, $error);
    $imagemagick = self::$program_paths['imagemagick'] . '\identify';
    exec($imagemagick . ' -quiet -format %m ' . $file_path, $return, $error);

    $type = ($error === 0) ? mb_strtolower($return[0]) : "";
    if ($error == 1) {
        return false;
    }
    if (substr($type, 0, 6) === "gifgif") {
        $type = "gifgif";
    }
    return in_array($type, $types);
}

1 个答案:

答案 0 :(得分:0)

使用fileinfo functions确定它是否是图像。