Created
May 15, 2014 15:21
-
-
Save ineersa/68a49ac6dc55a5485ad7 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
/** | |
* Class ImageHelper | |
* | |
* Simple class to manage image load, save and resize | |
* | |
* Usage: | |
* | |
* $image = new ImageHelper; | |
* $image->load('image.jpg'); | |
* $image->resize(400, 200); | |
* $image->save('image1.jpg'); | |
* | |
*/ | |
class ImageHelper { | |
private $image; | |
private $image_type; | |
private $template; | |
/** | |
* Load image from file | |
* | |
* @param $filename | |
*/ | |
public function load($filename) | |
{ | |
$image_info = getimagesize($filename); | |
$this->image_type = $image_info[2]; | |
if( $this->image_type == IMAGETYPE_JPEG ) { | |
$this->image = imagecreatefromjpeg($filename); | |
} elseif( $this->image_type == IMAGETYPE_GIF ) { | |
$this->image = imagecreatefromgif($filename); | |
} elseif( $this->image_type == IMAGETYPE_PNG ) { | |
$this->image = imagecreatefrompng($filename); | |
} | |
} | |
private function loadTemplate($filename) | |
{ | |
$this->template = imagecreatefrompng($filename); | |
} | |
/** | |
* Save image to file | |
* | |
* @param $filename | |
* @param int $image_type | |
* @param int $compression | |
* @param null $permissions | |
*/ | |
public function save($filename, $image_type=IMAGETYPE_JPEG, $compression=75, $permissions=null) | |
{ | |
if( $image_type == IMAGETYPE_JPEG ) { | |
imagejpeg($this->image,$filename,$compression); | |
} elseif( $image_type == IMAGETYPE_GIF ) { | |
imagegif($this->image,$filename); | |
} elseif( $image_type == IMAGETYPE_PNG ) { | |
imagepng($this->image,$filename); | |
} | |
if( $permissions != null) { | |
chmod($filename,$permissions); | |
} | |
imagedestroy($this->image); | |
} | |
/** | |
* Output image | |
* | |
* @param int $image_type | |
*/ | |
public function output($image_type=IMAGETYPE_JPEG) | |
{ | |
if( $image_type == IMAGETYPE_JPEG ) { | |
imagejpeg($this->image); | |
} elseif( $image_type == IMAGETYPE_GIF ) { | |
imagegif($this->image); | |
} elseif( $image_type == IMAGETYPE_PNG ) { | |
imagepng($this->image); | |
} | |
imagedestroy($this->image); | |
} | |
/** | |
* @return int | |
*/ | |
public function getWidth() | |
{ | |
return imagesx($this->image); | |
} | |
/** | |
* @return int | |
*/ | |
public function getHeight() | |
{ | |
return imagesy($this->image); | |
} | |
/** | |
* Resize image to given height | |
* | |
* @param $height | |
*/ | |
public function resizeToHeight($height) | |
{ | |
$ratio = $height / $this->getHeight(); | |
$width = $this->getWidth() * $ratio; | |
$this->resize($width,$height); | |
} | |
/** | |
* Resize image to given width | |
* | |
* @param $width | |
*/ | |
public function resizeToWidth($width) | |
{ | |
$ratio = $width / $this->getWidth(); | |
$height = $this->getheight() * $ratio; | |
$this->resize($width,$height); | |
} | |
/** | |
* Scale image to given percent | |
* 100 equal 100% | |
* | |
* @param $scale int | |
*/ | |
public function scale($scale) | |
{ | |
$width = $this->getWidth() * $scale/100; | |
$height = $this->getheight() * $scale/100; | |
$this->resize($width,$height); | |
} | |
/** | |
* Resize image to given width and height | |
* | |
* @param $width | |
* @param $height | |
*/ | |
public function resize($width,$height) | |
{ | |
$new_image = imagecreatetruecolor($width, $height); | |
imagecopyresampled($new_image, $this->image, 0, 0, 0, 0, $width, $height, $this->getWidth(), $this->getHeight()); | |
$this->image = $new_image; | |
} | |
public function smartCrop($width,$height) | |
{ | |
$w_ratio = $this->getWidth() / $width; | |
$h_ratio = $this->getHeight() / $height; | |
if ($w_ratio>$h_ratio){ | |
$new_width = $h_ratio * $width; | |
$new_height = $this->getWidth(); | |
var_dump($new_width); | |
$this->crop($this->getWidth() - $new_width,0,$new_width,$new_height); | |
} | |
if ($h_ratio>$w_ratio){ | |
$new_height = $w_ratio * $height; | |
$new_width = $this->getWidth(); | |
var_dump($new_height); | |
$this->crop(0,0,$new_width,$new_height); | |
} | |
} | |
private function crop($x0, $y0, $w, $h) | |
{ | |
$newImage = imagecreatetruecolor($w, $h); | |
imagecopyresampled($newImage, $this->image, 0, 0, $x0, $y0, $w, $h, $w, $h); | |
$this->image = $newImage; | |
} | |
/** | |
* Merge png template with image | |
* | |
* @param $filename | |
*/ | |
public function mergeTemplate($filename) | |
{ | |
$this->loadTemplate($filename); | |
$newImage = imagecreatetruecolor(410,574); | |
imagecopyresampled($newImage,$this->template,0,0,0,0,410,574,$this->getWidth(),$this->getHeight()); | |
$this->image = $newImage; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment