178 lines
5.1 KiB
PHP
178 lines
5.1 KiB
PHP
<?php
|
|
/**
|
|
* Resize image class will allow you to resize an image
|
|
*
|
|
* Can resize to exact size
|
|
* Max width size while keep aspect ratio
|
|
* Max height size while keep aspect ratio
|
|
* Automatic while keep aspect ratio
|
|
*/
|
|
class ResizeImage
|
|
{
|
|
private $ext;
|
|
private $image;
|
|
private $newImage;
|
|
private $origWidth;
|
|
private $origHeight;
|
|
private $resizeWidth;
|
|
private $resizeHeight;
|
|
/**
|
|
* Class constructor requires to send through the image filename
|
|
*
|
|
* @param string $filename - Filename of the image you want to resize
|
|
*/
|
|
public function __construct( $filename )
|
|
{
|
|
if(file_exists($filename))
|
|
{
|
|
$this->setImage( $filename );
|
|
}
|
|
//else {
|
|
//throw new Exception('Image ' . $filename . ' can not be found, try another image.');
|
|
//}
|
|
}
|
|
/**
|
|
* Set the image variable by using image create
|
|
*
|
|
* @param string $filename - The image filename
|
|
*/
|
|
private function setImage( $filename )
|
|
{
|
|
$size = getimagesize($filename);
|
|
if(isset($size['mime']) && !empty($size['mime'])){
|
|
$this->ext = $size['mime'];
|
|
switch($this->ext)
|
|
{
|
|
// Image is a JPG
|
|
case 'image/jpg':
|
|
case 'image/jpeg':
|
|
// create a jpeg extension
|
|
$this->image = imagecreatefromjpeg($filename);
|
|
break;
|
|
// Image is a GIF
|
|
case 'image/gif':
|
|
$this->image = @imagecreatefromgif($filename);
|
|
break;
|
|
// Image is a PNG
|
|
case 'image/png':
|
|
$this->image = @imagecreatefrompng($filename);
|
|
break;
|
|
// Mime type not found
|
|
default:
|
|
throw new Exception("File is not an image, please use another file type.", 1);
|
|
}
|
|
$this->origWidth = imagesx($this->image);
|
|
$this->origHeight = imagesy($this->image);
|
|
}
|
|
|
|
}
|
|
/**
|
|
* Save the image as the image type the original image was
|
|
*
|
|
* @param String[type] $savePath - The path to store the new image
|
|
* @param string $imageQuality - The qulaity level of image to create
|
|
*
|
|
* @return Saves the image
|
|
*/
|
|
public function saveImage($savePath, $imageQuality="100", $download = false)
|
|
{
|
|
switch($this->ext)
|
|
{
|
|
case 'image/jpg':
|
|
case 'image/jpeg':
|
|
// Check PHP supports this file type
|
|
if (imagetypes() & IMG_JPG) {
|
|
imagejpeg($this->newImage, $savePath, $imageQuality);
|
|
}
|
|
break;
|
|
case 'image/gif':
|
|
// Check PHP supports this file type
|
|
if (imagetypes() & IMG_GIF) {
|
|
imagegif($this->newImage, $savePath);
|
|
}
|
|
break;
|
|
case 'image/png':
|
|
$invertScaleQuality = 9 - round(($imageQuality/100) * 9);
|
|
// Check PHP supports this file type
|
|
if (imagetypes() & IMG_PNG) {
|
|
imagepng($this->newImage, $savePath, $invertScaleQuality);
|
|
}
|
|
break;
|
|
}
|
|
if($download)
|
|
{
|
|
header('Content-Description: File Transfer');
|
|
header("Content-type: application/octet-stream");
|
|
header("Content-disposition: attachment; filename= ".$savePath."");
|
|
readfile($savePath);
|
|
}
|
|
imagedestroy($this->newImage);
|
|
}
|
|
/**
|
|
* Resize the image to these set dimensions
|
|
*
|
|
* @param int $width - Max width of the image
|
|
* @param int $height - Max height of the image
|
|
* @param string $resizeOption - Scale option for the image
|
|
*
|
|
* @return Save new image
|
|
*/
|
|
public function resizeTo( $width, $height, $resizeOption = 'default' )
|
|
{
|
|
switch(strtolower($resizeOption))
|
|
{
|
|
case 'exact':
|
|
$this->resizeWidth = $width;
|
|
$this->resizeHeight = $height;
|
|
break;
|
|
case 'maxwidth':
|
|
$this->resizeWidth = $width;
|
|
$this->resizeHeight = $this->resizeHeightByWidth($width);
|
|
break;
|
|
case 'maxheight':
|
|
$this->resizeWidth = $this->resizeWidthByHeight($height);
|
|
$this->resizeHeight = $height;
|
|
break;
|
|
default:
|
|
if($this->origWidth > $width || $this->origHeight > $height)
|
|
{
|
|
if ( $this->origWidth > $this->origHeight ) {
|
|
$this->resizeHeight = $this->resizeHeightByWidth($width);
|
|
$this->resizeWidth = $width;
|
|
} else if( $this->origWidth < $this->origHeight ) {
|
|
$this->resizeWidth = $this->resizeWidthByHeight($height);
|
|
$this->resizeHeight = $height;
|
|
}
|
|
} else {
|
|
$this->resizeWidth = $width;
|
|
$this->resizeHeight = $height;
|
|
}
|
|
break;
|
|
}
|
|
$this->newImage = imagecreatetruecolor($this->resizeWidth, $this->resizeHeight);
|
|
imagecopyresampled($this->newImage, $this->image, 0, 0, 0, 0, $this->resizeWidth, $this->resizeHeight, $this->origWidth, $this->origHeight);
|
|
}
|
|
/**
|
|
* Get the resized height from the width keeping the aspect ratio
|
|
*
|
|
* @param int $width - Max image width
|
|
*
|
|
* @return Height keeping aspect ratio
|
|
*/
|
|
private function resizeHeightByWidth($width)
|
|
{
|
|
return floor(($this->origHeight/$this->origWidth)*$width);
|
|
}
|
|
/**
|
|
* Get the resized width from the height keeping the aspect ratio
|
|
*
|
|
* @param int $height - Max image height
|
|
*
|
|
* @return Width keeping aspect ratio
|
|
*/
|
|
private function resizeWidthByHeight($height)
|
|
{
|
|
return floor(($this->origWidth/$this->origHeight)*$height);
|
|
}
|
|
}
|