Skip to content

Commit

Permalink
Merge pull request #163 from promo360/master
Browse files Browse the repository at this point in the history
Gelato image, resize and crop
  • Loading branch information
Awilum committed Nov 28, 2013
2 parents dbefe50 + 05a9ff4 commit 31ec9de
Showing 1 changed file with 35 additions and 45 deletions.
80 changes: 35 additions & 45 deletions libraries/Gelato/Image/Image.php
Original file line number Diff line number Diff line change
Expand Up @@ -173,9 +173,10 @@ protected function createImage($file, $type)
public function resize($width, $height = null, $aspect_ratio = null)
{
// Redefine vars
$width = (int) $width;
$height = ($height === null) ? null : (int) $height;
$width = (int) $width;
$height = ($height === null) ? null : (int) $height;
$aspect_ratio = ($aspect_ratio === null) ? null : (int) $aspect_ratio;
$xpos = $ypos = 0;

// Resizes the image to {$width}% of the original size
if ($height === null) {
Expand All @@ -186,13 +187,18 @@ public function resize($width, $height = null, $aspect_ratio = null)
} else {

// Resizes the image to the smalles possible dimension while maintaining aspect ratio
if ($aspect_ratio === Image::AUTO) {
if ($aspect_ratio === Image::AUTO || $aspect_ratio === null) {

// Calculate smallest size based on given height and width while maintaining aspect ratio
$percentage = min(($width / $this->width), ($height / $this->height));

$new_width = round($this->width * $percentage);
$new_height = round($this->height * $percentage);

if ($aspect_ratio === null) {
$xpos = (int)(($width - $new_width) / 2);
$ypos = (int)(($height - $new_height) / 2);
}

// Resizes the image using the width to maintain aspect ratio
} elseif ($aspect_ratio === Image::WIDTH) {
Expand All @@ -216,31 +222,27 @@ public function resize($width, $height = null, $aspect_ratio = null)
}
}

// Create a new true color image width new width and height
$resized = imagecreatetruecolor($new_width, $new_height);
$transPng = imagecolorallocatealpha($resized, 0, 0, 0, 127);
imagefill($resized, 0, 0, $transPng);

// Copy and resize part of an image with resampling
imagecopyresampled($resized, $this->image, 0, 0, 0, 0, $new_width, $new_height, $this->width, $this->height);

// Destroy an image
imagedestroy($this->image);

// Create a new true color image width new width and height
$this->image = imagecreatetruecolor($new_width, $new_height);
$transPng = imagecolorallocatealpha($this->image, 0, 0, 0, 127);
imagefill($this->image, 0, 0, $transPng);
$old_image = $this->image;

if ($aspect_ratio === null) {
$this->image = imagecreatetruecolor($width, $height);
} else {
$this->image = imagecreatetruecolor($new_width, $new_height);
}
if ($this->type === IMAGETYPE_PNG) {
$bgcolor = imagecolorallocatealpha($this->image, 0, 0, 0, 127);
} else {
$bgcolor = imagecolorallocate($this->image, 255, 255, 255);
}

imagefill($this->image, 0, 0, $bgcolor);

// Copy and resize part of an image with resampling
imagecopyresampled($this->image, $resized, 0, 0, 0, 0, $new_width, $new_height, $new_width, $new_height);
imagecopyresampled($this->image, $old_image, $xpos, $ypos, 0, 0, $new_width, $new_height, $this->width, $this->height);

// Destroy an image
imagedestroy($resized);

// Save new width and height
$this->width = $new_width;
$this->height = $new_height;
imagedestroy($old_image);

return $this;
}
Expand All @@ -263,39 +265,27 @@ public function crop($width, $height, $x, $y)
// Redefine vars
$width = (int) $width;
$height = (int) $height;
$x = (int) $x;
$y = (int) $y;
$x = (int) $x;
$y = (int) $y;

// Calculate
if ($x + $width > $this->width) $width = $this->width - $x;
if ($y + $height > $this->height) $height = $this->height - $y;
if ($width <= 0 || $height <= 0) return false;

// Create a new true color image
$crop = imagecreatetruecolor($width, $height);
$transPng = imagecolorallocatealpha($crop, 0, 0, 0, 127);
imagefill($crop, 0, 0, $transPng);

// Copy and resize part of an image with resampling
imagecopyresampled($crop, $this->image, 0, 0, $x, $y, $this->width, $this->height, $this->width, $this->height);

// Destroy an image
imagedestroy($this->image);

$old_image = $this->image;

// Create a new true color image
$this->image = imagecreatetruecolor($width, $height);
$transPng = imagecolorallocatealpha($this->image, 0, 0, 0, 127);
imagefill($this->image, 0, 0, $transPng);

$transparent = imagecolorallocatealpha($this->image, 0, 0, 0, 127);
imagefill($this->image, 0, 0, $transparent);

// Copy and resize part of an image with resampling
imagecopyresampled($this->image, $crop, 0, 0, 0, 0, $width, $height, $width, $height);
imagecopyresampled($this->image, $old_image, 0, 0, 0, 0, $width, $height, $width, $height);

// Destroy an image
imagedestroy($crop);

// Save new width and height
$this->width = $width;
$this->height = $height;
imagedestroy($old_image);

return $this;
}
Expand Down

0 comments on commit 31ec9de

Please sign in to comment.