- if($this->is_imagick()) {
- $this->image = new Imagick();
- $this->image->readImageBlob($data);
+ 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()) {
+ $this->image = new Imagick();
+ try {
+ $this->image->readImageBlob($data);
+ }
+ catch (Exception $e) {
+ // Imagick couldn't use the data
+ return false;
+ }