I am new to PHP and I am writing a script that will resize images.
First, the downloaded image changes to 800 * in height, depending on the orientation of the downloaded file (portrait / landscape).
Then the script is designed to create a thumbnail of this image. The thumbnail should be 175 Width at 117height. This corresponds to the same proportion as the standard jpeg image from cameras that take images, so there is no need to crop the image for a miniature version if the source file is landscape. However, when the uploaded image is a portrait orientation, I have to crop the image to get a 175x117px thumbnail. When cropping, I need to maintain the center of the image (unlike the upper left, lower right, etc.).
I had serious problems with this, and I really would be infinitely grateful if someone did not mind to take the time to look through my code and help me !: D
The site can be found at hybridtempo.net. Beware that there is pretty random shit in the database where I had to enter random data and run out of ideas, lol.
Everything seems to be working fine, so far very close to the bottom, where I start using the functions imagecopyresize, imagecreatetruecolore, imagecreatefromjpeg, etc.
Thanks so much for any input. :)
Without further ado:
<?php
function smart_resize_image($file,
$width = 0,
$height = 0,
$proportional = false,
$output = 'file',
$delete_original = true,
$use_linux_commands = false ) {
if ( $height <= 0 && $width <= 0 ) return false;
$info = getimagesize($file);
$image = '';
$final_width = 0;
$final_height = 0;
list($width_old, $height_old) = $info;
if ($proportional) {
if ($width == 0) $factor = $height/$height_old;
elseif ($height == 0) $factor = $width/$width_old;
else $factor = min( $width / $width_old, $height / $height_old );
$final_width = round( $width_old * $factor );
$final_height = round( $height_old * $factor );
}
else {
$final_width = ( $width <= 0 ) ? $width_old : $width;
$final_height = ( $height <= 0 ) ? $height_old : $height;
}
switch ( $info[2] ) {
case IMAGETYPE_GIF: $image = imagecreatefromgif($file); break;
case IMAGETYPE_JPEG: $image = imagecreatefromjpeg($file); break;
case IMAGETYPE_PNG: $image = imagecreatefrompng($file); break;
default: return false;
}
$image_resized = imagecreatetruecolor( $final_width, $final_height );
if ( ($info[2] == IMAGETYPE_GIF) || ($info[2] == IMAGETYPE_PNG) ) {
$transparency = imagecolortransparent($image);
if ($transparency >= 0) {
$transparent_color = imagecolorsforindex($image, $trnprt_indx);
$transparency = imagecolorallocate($image_resized, $trnprt_color['red'], $trnprt_color['green'], $trnprt_color['blue']);
imagefill($image_resized, 0, 0, $transparency);
imagecolortransparent($image_resized, $transparency);
}
elseif ($info[2] == IMAGETYPE_PNG) {
imagealphablending($image_resized, false);
$color = imagecolorallocatealpha($image_resized, 0, 0, 0, 127);
imagefill($image_resized, 0, 0, $color);
imagesavealpha($image_resized, true);
}
}
imagecopyresampled($image_resized, $image, 0, 0, 0, 0, $final_width, $final_height, $width_old, $height_old);
if ( $delete_original ) {
if ( $use_linux_commands ) exec('rm '.$file);
else @unlink($file);
}
switch ( strtolower($output) ) {
case 'browser':
$mime = image_type_to_mime_type($info[2]);
header("Content-type: $mime");
$output = NULL;
break;
case 'file':
$output = $file;
break;
case 'return':
return $image_resized;
break;
default:
break;
}
switch ( $info[2] ) {
case IMAGETYPE_GIF: imagegif($image_resized, $output); break;
case IMAGETYPE_JPEG: imagejpeg($image_resized, $output); break;
case IMAGETYPE_PNG: imagepng($image_resized, $output); break;
default: return false;
}
return true;
}
if (($_FILES["file"]["type"] == "image/png")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/pjpeg"))
{
if ($_FILES["file"]["error"] > 0)
{
echo "<p>Error: " . $_FILES["file"]["error"] . "
<br />
Redirecting...
<br />
<br />
If you are not automatically redirected after 3 seconds, <b><a href='addproduct_uploadimage.php'>click here to try another upload.</a></p>";
echo "<META HTTP-EQUIV='refresh' CONTENT='3;URL=addproduct_uploadimage.php'>";
}
else
{
echo "<p>File Uploaded: " . $_FILES["file"]["name"] . "<br />";
echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";
echo "Temporary file stored in: " . $_FILES["file"]["tmp_name"] . "</p><br /><br />";
$img_url = "/home/space_/hybridtempo.net/images/uploads/" . $_FILES["file"]["name"];
if (file_exists($img_url))
{
echo "<p>" . $_FILES["file"]["name"] . " already exists. Redirecting...
<br />
<br />
If you are not automatically redirected after 3 seconds, <b><a href='addproduct_uploadimage.php'>click here to try another upload.</a></p>";
echo "<META HTTP-EQUIV='refresh' CONTENT='3;URL=addproduct_uploadimage.php'>";
}
else
{
$img_url = "/home/space_/hybridtempo.net/images/uploads/" . $_FILES["file"]["name"];
$thumb_url = "/home/space_/hybridtempo.net/images/uploads/thumbnails/" . $_FILES["file"]["name"];
move_uploaded_file($_FILES["file"]["tmp_name"], $img_url);
list($width, $height) = getimagesize($img_url);
if ($width > $height)
{
smart_resize_image($img_url,
$width = 800,
$height = 0,
$proportional = true,
$output = 'file',
$delete_original = true,
$use_linux_commands = false );
mysql_connect("**************","***********","*****");
mysql_select_db("hybridtempo_shop");
$prod_id = $_SESSION["prod_id"];
$result = mysql_query ("INSERT INTO picture (prod_id,picture_url,picture_id) VALUES ('$prod_id', '$img_url', 'NULL')");
mysql_close();
smart_resize_image($img_url,
$width = 175,
$height = 117,
$proportional = false,
$output = $thumb_url,
$delete_original = false,
$use_linux_commands = false );
mysql_connect("******************","****************","***********");
mysql_select_db("hybridtempo_shop");
$prod_id = $_SESSION["prod_id"];
$result = mysql_query ("INSERT INTO picture (prod_id,thumbnail_url,picture_id) VALUES ('$prod_id', '$thumb_url', 'NULL')");
mysql_close();
}
else
{
smart_resize_image($img_url,
$width = 0,
$height = 700,
$proportional = true,
$output = 'file',
$delete_original = true,
$use_linux_commands = false );
mysql_connect("*********","**********","**********");
mysql_select_db("hybridtempo_shop");
$prod_id = $_SESSION["prod_id"];
$result = mysql_query ("INSERT INTO picture (prod_id,picture_url,picture_id) VALUES ('$prod_id', '$img_url', 'NULL')");
mysql_close();
$wrongsize_thumb_url = $_FILES["file"]["name"];
smart_resize_image ($img_url,
$width = 175,
$height = 0,
$proportional = true,
$output = $wrongsize_thumb_url,
$delete_original = false,
$use_linux_commands = false
);
$wrongsize_thumb_url = $_FILES["file"]["name"];
$image_for_resize = ImageCreateFromJpeg($wrongsize_thumb_url);
$temporary_image = imagecreatetruecolor(117,175);
imagecopyresized (
$temporary_image, $image_for_resize,
$destination_x_coordinate = 0,
$destination_y_coordinate = 0,
$source_x_coordinate = 0,
$source_y_coordinate = 58,
$destination_width = 175,
$destination_height = 117,
$source_width = 175,
$source_height = 261
);
imagejpeg ($image_for_resize, 'thumbnail_' . $_FILES["file"]["name"]);
imagedestroy ($wrongsize_thumb_url);
mysql_connect("************","*************","***************");
mysql_select_db("hybridtempo_shop");
$prod_id = $_SESSION["prod_id"];
$result = mysql_query ("INSERT INTO picture (prod_id,thumbnail_url,picture_id) VALUES ('$prod_id', '$thumb_url', 'NULL')");
mysql_close();
}
echo "<p>Image stored in: " . $_img_url;
echo "<br />";
echo "<p>Thumbnail stored in: " . $thumb_url;
echo "<br /><br />";
unset($_SESSION['prod_id']);
echo "If you are not automatically redirected after 5 seconds, <b><a href='index.php'>click here to return to the homepage.</a></p>";
}
}
}
else
{
echo "<p>Error: The file needs to be an image. Redirecting...
<br />
<br />
If you are not automatically redirected after 3 seconds, <b><a href='addproduct_uploadimage.php'>click here to try another upload.</a></b></p>";
echo "<META HTTP-EQUIV='refresh' CONTENT='3;URL=addproduct_uploadimage.php'>";
}
?>
</center>
</div>
<div class="nav_bar">
<p><i> ~<a href="index.php"> home </a>~
<a href="http://blog.hybridtempo.net/"> blog </a>~
<a href="shop.php"> shop </a>~
<a href="#"> sourcing </a>~
<a href="#"> links </a>~
<a href="#"> about </a>~
<a href="#"> contact </a>~ </i></p>
</div>
</div>
<div id="bg">
<div>
<table cellspacing="0" cellpadding="0">
<tr>
<td>
<img src="images/bg.jpg" alt=""/>
</td>
</tr>
</table>
</div>
</div>
</body>
</html>