Jump to content

image resize and horizontal vs vertical


Lodius2000

Recommended Posts

alrighty, I have a working image resizer and uploader, what i would like is for the script to compare the dimensions of the photo and determine which is longer, then make the resize on that dimension so that a skinny but tall photo is shortened up and a fat short photo is thinned up.

the script makes 2 files a big and small file

 

here is the relvant code

<?php
sm_pixels = 250;
bg_pixels = 512;

//determine which is longer, height or width
if ($width >= $height) {
	//big
	$new_bg_height=($height_orig/$width_orig)*$bg_pixels;
	$tmp_bg=imagecreatetruecolor($bg_width,$new_bg_height);
	//small
	$new_sm_height=($height_orig/$width_orig)*$sm_pixels;
	$tmp_sm=imagecreatetruecolor($sm_width,$new_sm_height);
	// these lines actually does the image resizing, copying from the original
	// image into the $tmp image
	imagecopyresampled($tmp_bg,$src_bg,0,0,0,0,$bg_width,$new_bg_height,$width_orig,$height_orig);
	imagecopyresampled($tmp_sm,$src_sm,0,0,0,0,$sm_width,$new_sm_height,$width_orig,$height_orig);

} else {
    //big
	$new_bg_width=($width_orig/$height_orig)*$bg_pixels;
	$tmp_bg=imagecreatetruecolor($new_bg_width,$bg_height);
	//small
	$new_sm_width=($width_orig/$height_orig)*$sm_pixels;
	$tmp_sm=imagecreatetruecolor($new_bg_width,$sm_height);
	imagecopyresampled($tmp_bg,$src_bg,0,0,0,0,$bg_width,$new_bg_height,$width_orig,$height_orig);
	imagecopyresampled($tmp_sm,$src_sm,0,0,0,0,$sm_width,$new_sm_height,$width_orig,$height_orig);
}
?>

 

so the script always makes the width 512 for big or 250 for small, i want it to choose which is longer and resize that dimension to 512 or 250, so that i don't end up with a hugely long or hugely wide photo on my website

 

what did i do wrong

 

thanks

Link to comment
Share on other sites

Hi,

 

I have a script that I use for uploading photos to my site that does exactly what you want.  It resizes correctly (width & height) and creates 2 files (big & small).  You can specify the size of the file and the location to save.  Have a look and let me know if you have any problem.

 

<?php
include('common/dbconnect.php');

if(isset($_POST['submit'])) {

//rename file storage variable for convenience
$img = $_FILES['uploadfile'];

//get the type of the file
//note that the type can be determined by the MIME type, but this is prone to error and can be fooled.
//This way, even if the user is uploading an executable, if it is named .jpg, it can never be executed

//the type is found by taking the substring of the name after the last '.', strrpos finds the last instance of a character in a string
$type = substr($img['name'], strrpos($img['name'], '.') + 1);

//ensure the type is gif or jpg, and that the size is less than 512kB (expressed in bytes)
if(($type == "gif" || $type == "jpg") && $img['size'] < 512000) {
	//get the current timestamp
	$time = time();

	//create the names for the two files
	//first, get the name of the file, using a similar method to that getting the type earlier
	$name = substr($img['name'], 0, strrpos($img['name'], '.'));		

	//then it's just a matter of putting the pieces together
	$fullsizeName	= $name.'_'.$time.'.'.$type;
	$thumbName		= $name.'_'.$time.'_thumb.'.$type;

	//create a php image object from the uploaded file
	if($type == "gif")
		$imgObj = imagecreatefromgif($img['tmp_name']);
	else
		$imgObj = imagecreatefromjpeg($img['tmp_name']);

	//get the width and height of the image
	$width = imageSX($imgObj);
	$height = imageSY($imgObj);

	//resize both width and height if width > 600
	if($width > 600) {
	 	$height = $height * (600 / $width);
	 	$width = 600;	
	}

	//get the thumb width and height:
	if($height * 1.5 < $width) {
		//if so, we limit by width
		$thumbWidth = 150;
		$thumbHeight = $height * (150 / $width);
	}
	else {
		//otherwise, we limit by height
		$thumbHeight = 100;
		$thumbWidth = $width * (100 / $height);
	}

	//create the new image objects
	$newImage = imagecreatetruecolor($width, $height);
	$newThumb = imagecreatetruecolor($thumbWidth, $thumbHeight);

	//copy the old image objects to the new ones, given their new dimensions
	//see further documentation at php.net/imagecopyresampled
	imagecopyresampled($newImage, $imgObj, 0, 0, 0, 0, $width, $height, imageSX($imgObj), imageSY($imgObj));
	imagecopyresampled($newThumb, $imgObj, 0, 0, 0, 0, $thumbWidth, $thumbHeight, imageSX($imgObj), imageSY($imgObj));

	//move the images to their destinations
	if($type == "gif") {
		imagegif($newImage, 'images/photo/'.$fullsizeName);
		imagegif($newThumb, 'images/photo/'.$thumbName);
	}                     
	else {
		imagejpeg($newImage, 'images/photo/'.$fullsizeName);
		imagejpeg($newThumb, 'images/photo/'.$thumbName);
	}                      

	//destroy the image objects to save space on the server
	imagedestroy($imgObj);
	imagedestroy($newImage);
	imagedestroy($newThumb);

	//insert data into the database - ID (autonumber),
	mysql_query("INSERT INTO tblgallery VALUES ('', '".$fullsizeName."', '".$thumbName."');");
}
else
	echo "The input is not acceptable";
}

echo '<form name="uploadimage" action="upload.php" method="post">
<input class="input6" type="file" name="uploadfile" />
<input type="submit" name="submit" value="submit" />
</form>';

?>

Link to comment
Share on other sites

This thread is more than a year old. Please don't revive it unless you have something important to add.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.