Usage:
if (is_uploaded_file(@$_FILES['ulimage']['tmp_name'])){
move_uploaded_file($_FILES['ulimage']['tmp_name'], dirname(__FILE__) . "/tmp/" . $_FILES['ulimage']['name']);
$allowed_types = array("bmp","wbmp","jpeg","jpg","gif","png","xpm");
$pathinfo = pathinfo($_FILES['ulimage']['name']);
if (!in_array(strtolower($pathinfo['extension']), $allowed_types))
echo "<script>alert('Invalid file type');</script>";
resizeImage(dirname(__FILE__) . "/tmp/" . @$_FILES['ulimage']['name'], dirname(__FILE__) . "/tmp/" . $targetfilename, $width, $height);
$hasupload = TRUE;
}
Code:
function resizeImage($srcimage, $destimage, $width, $height) {
if (!file_exists(realpath($srcimage)))
return;
$srcpathinfo = pathinfo($srcimage);
$srcext = strtolower($srcpathinfo['extension']);
$destpathinfo = pathinfo($destimage);
$destext = strtolower($destpathinfo['extension']);
$size = getimagesize( $srcimage ); // Get the size of the original image into an array [0]=> width, [1]=> height
$image = null;
$canvas = imagecreatetruecolor( $width, $height ); // Prepare canvas
// Create a new image in the memory from the file
switch ($srcext) {
case 'wbmp':
case 'bmp':
$image = imagecreatefromwbmp($srcimage);
break;
case 'jpg':
case 'jpeg':
$image = imagecreatefromjpeg($srcimage);
break;
case 'png':
$image = imagecreatefrompng($srcimage);
break;
case 'gif':
$image = imagecreatefromgif($srcimage);
break;
case 'xpm':
$image = imagecreatefromxpm($srcimage);
break;
default:
return;
}
// Calculate dimensions
$widthratio = $size[0]/$width;
$heightratio = $size[1]/$height;
$dimensions = array(
'ratio' => $widthratio,
'source_cropwidth' => 0,
'source_cropheight' => 0,
'source_offsetx' => 0,
'source_offsety' => 0
);
if ($heightratio < $widthratio)
$dimensions['ratio'] = $heightratio;
// let say image is 1200*800, then:
// widthratio = 1200/400 = 3
// heightratio = 800/300 = 2.66
// since there is less height than width, the max scale we can do is 2.66, then
// the targetwidth to crop = 400 * 2.66
// the targetheight to crop = 300 * 2.66
// the offset width = (1200 - (2.66 * 400))/2 = 68
// the offset height = (800 - (2.66 * 300))/2 = 1
$dimensions['source_width'] = $size[0];
$dimensions['source_height'] = $size[1];
$dimensions['source_cropwidth'] = $width * $dimensions['ratio'];
$dimensions['source_cropheight'] = $height * $dimensions['ratio'];
$dimensions['source_offsetx'] = ($size[0] - $dimensions['source_cropwidth']) / 2;
$dimensions['source_offsety'] = ($size[1] - $dimensions['source_cropheight']) / 2;
imagecopyresampled($canvas, $image, 0, 0, $dimensions['source_offsetx'], $dimensions['source_offsety'], $width, $height, $dimensions['source_cropwidth'], $dimensions['source_cropheight']);
switch ($destext) {
case 'jpg':
case 'jpeg':
imagejpeg( $canvas, $destimage );
break;
case 'png':
imagepng( $canvas, $destimage );
break;
case 'gif':
imagegif( $canvas, $destimage );
break;
case 'wbmp':
case 'bmp':
imagewbmp( $canvas, $destimage );
break;
}
imagedestroy( $canvas );
imagedestroy( $image );
}