Fallback to gd if Imagick can't load the data
This commit is contained in:
parent
ec1abfda46
commit
67563d5c82
1 changed files with 65 additions and 39 deletions
|
@ -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())
|
||||||
|
|
Loading…
Reference in a new issue