public static function test($args = array())
{
// First, test Imagick's extension and classes.
if (!extension_loaded('imagick') || !class_exists('Imagick', false) || !class_exists('ImagickPixel', false)) {
return false;
}
if (version_compare(phpversion('imagick'), '2.2.0', '<')) {
return false;
}
$required_methods = array('clear', 'destroy', 'valid', 'getimage', 'writeimage', 'getimageblob', 'getimagegeometry', 'getimageformat', 'setimageformat', 'setimagecompression', 'setimagecompressionquality', 'setimagepage', 'setoption', 'scaleimage', 'cropimage', 'rotateimage', 'flipimage', 'flopimage', 'readimage');
// Now, test for deep requirements within Imagick.
if (!defined('imagick::COMPRESSION_JPEG')) {
return false;
}
$class_methods = array_map('strtolower', get_class_methods('Imagick'));
if (array_diff($required_methods, $class_methods)) {
return false;
}
// HHVM Imagick does not support loading from URL, so fail to allow fallback to GD.
if (defined('HHVM_VERSION') && isset($args['path']) && preg_match('|^https?://|', $args['path'])) {
return false;
}
return true;
}