Fallback to gd if Imagick can't load the data

This commit is contained in:
Domovoy 2012-09-12 11:55:09 +02:00
parent ec1abfda46
commit 67563d5c82

View file

@ -46,9 +46,52 @@ class Photo {
} }
$this->type = $type; $this->type = $type;
if($this->is_imagick()) { if($this->is_imagick() && $this->load_data($data)) {
$this->image = new Imagick(); return true;
$this->image->readImageBlob($data); } else {
// Failed to load with Imagick, fallback
$this->imagick = false;
}
return $this->load_data($data);
}
public function __destruct() {
if($this->image) {
if($this->is_imagick()) {
$this->image->clear();
$this->image->destroy();
return;
}
imagedestroy($this->image);
}
}
public function is_imagick() {
return $this->imagick;
}
/**
* Maps Mime types to Imagick formats
*/
public function get_FormatsMap() {
$m = array(
'image/jpeg' => 'JPG',
'image/png' => 'PNG',
'image/gif' => 'GIF'
);
return $m;
}
private function load_data($data) {
if($this->is_imagick()) {
$this->image = new Imagick();
try {
$this->image->readImageBlob($data);
}
catch (Exception $e) {
// Imagick couldn't use the data
return false;
}
/** /**
* Setup the image to the format it will be saved to * Setup the image to the format it will be saved to
@ -85,45 +128,28 @@ class Photo {
$quality = JPEG_QUALITY; $quality = JPEG_QUALITY;
$this->image->setCompressionQuality($quality); $this->image->setCompressionQuality($quality);
} }
} else {
$this->valid = false;
$this->image = @imagecreatefromstring($data);
if($this->image !== FALSE) {
$this->width = imagesx($this->image);
$this->height = imagesy($this->image);
$this->valid = true;
imagealphablending($this->image, false);
imagesavealpha($this->image, true);
}
}
}
public function __destruct() { $this->width = $this->image->getImageWidth();
if($this->image) { $this->height = $this->image->getImageHeight();
if($this->is_imagick()) { $this->valid = true;
$this->image->clear();
$this->image->destroy();
return;
}
imagedestroy($this->image);
}
}
public function is_imagick() { return true;
return $this->imagick; }
}
/** $this->valid = false;
* Maps Mime types to Imagick formats $this->image = @imagecreatefromstring($data);
*/ if($this->image !== FALSE) {
public function get_FormatsMap() { $this->width = imagesx($this->image);
$m = array( $this->height = imagesy($this->image);
'image/jpeg' => 'JPG', $this->valid = true;
'image/png' => 'PNG', imagealphablending($this->image, false);
'image/gif' => 'GIF' imagesavealpha($this->image, true);
);
return $m; return true;
} }
return false;
}
public function is_valid() { public function is_valid() {
if($this->is_imagick()) if($this->is_imagick())