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() && $this->load_data($data)) {
return true;
} 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()) { if($this->is_imagick()) {
$this->image = new Imagick(); $this->image = new Imagick();
try {
$this->image->readImageBlob($data); $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,7 +128,14 @@ class Photo {
$quality = JPEG_QUALITY; $quality = JPEG_QUALITY;
$this->image->setCompressionQuality($quality); $this->image->setCompressionQuality($quality);
} }
} else {
$this->width = $this->image->getImageWidth();
$this->height = $this->image->getImageHeight();
$this->valid = true;
return true;
}
$this->valid = false; $this->valid = false;
$this->image = @imagecreatefromstring($data); $this->image = @imagecreatefromstring($data);
if($this->image !== FALSE) { if($this->image !== FALSE) {
@ -94,35 +144,11 @@ class Photo {
$this->valid = true; $this->valid = true;
imagealphablending($this->image, false); imagealphablending($this->image, false);
imagesavealpha($this->image, true); imagesavealpha($this->image, true);
}
} return true;
} }
public function __destruct() { return false;
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;
} }
public function is_valid() { public function is_valid() {