+ }
+ }
+
+ if($this->is_imagick())
+ return $this->scaleImage($dest_width,$dest_height);
+
+ $dest = imagecreatetruecolor( $dest_width, $dest_height );
+ imagealphablending($dest, false);
+ imagesavealpha($dest, true);
+ if ($this->type=='image/png') imagefill($dest, 0, 0, imagecolorallocatealpha($dest, 0, 0, 0, 127)); // fill with alpha
+ imagecopyresampled($dest, $this->image, 0, 0, 0, 0, $dest_width, $dest_height, $width, $height);
+ if($this->image)
+ imagedestroy($this->image);
+ $this->image = $dest;
+ $this->width = imagesx($this->image);
+ $this->height = imagesy($this->image);
+ }
+
+
+
+ public function scaleImageSquare($dim) {
+ if(!$this->is_valid())
+ return FALSE;
+
+ if($this->is_imagick()) {
+ $this->image->setFirstIterator();
+ do {
+ $this->image->scaleImage($dim, $dim);
+ } while ($this->image->nextImage());
+ return;
+ }
+
+ $dest = imagecreatetruecolor( $dim, $dim );
+ imagealphablending($dest, false);
+ imagesavealpha($dest, true);
+ if ($this->type=='image/png') imagefill($dest, 0, 0, imagecolorallocatealpha($dest, 0, 0, 0, 127)); // fill with alpha
+ imagecopyresampled($dest, $this->image, 0, 0, 0, 0, $dim, $dim, $this->width, $this->height);
+ if($this->image)
+ imagedestroy($this->image);
+ $this->image = $dest;
+ $this->width = imagesx($this->image);
+ $this->height = imagesy($this->image);
+ }
+
+
+ public function cropImage($max,$x,$y,$w,$h) {
+ if(!$this->is_valid())
+ return FALSE;
+
+ if($this->is_imagick()) {
+ $this->image->setFirstIterator();
+ do {
+ $this->image->cropImage($w, $h, $x, $y);
+ /**
+ * We need to remove the canva,
+ * or the image is not resized to the crop:
+ * http://php.net/manual/en/imagick.cropimage.php#97232
+ */
+ $this->image->setImagePage(0, 0, 0, 0);
+ } while ($this->image->nextImage());
+ return $this->scaleImage($max);
+ }
+
+ $dest = imagecreatetruecolor( $max, $max );
+ imagealphablending($dest, false);
+ imagesavealpha($dest, true);
+ if ($this->type=='image/png') imagefill($dest, 0, 0, imagecolorallocatealpha($dest, 0, 0, 0, 127)); // fill with alpha
+ imagecopyresampled($dest, $this->image, 0, 0, $x, $y, $max, $max, $w, $h);
+ if($this->image)
+ imagedestroy($this->image);
+ $this->image = $dest;
+ $this->width = imagesx($this->image);
+ $this->height = imagesy($this->image);
+ }
+
+ public function saveImage($path) {
+ if(!$this->is_valid())
+ return FALSE;
+
+ $string = $this->imageString();
+
+ $a = get_app();
+
+ $stamp1 = microtime(true);
+ file_put_contents($path, $string);
+ $a->save_timestamp($stamp1, "file");
+ }