/**
* Takes an image, and pads and resamples it to fit to a particular size.
* This will maintain the aspect ratio of the image when doing the resizing.
*
* Usage:
* $gdImage = fitImageToSize(path/to/image, $x, $y);
* imageJpeg($gdImage);
*
*@param image path to the image to modify
*@param maxwidth maximum width
*@param maxheight maximum height
*@param background an optional background color to use (use imageColorAllocate). Defaults to white
*@returns A TrueColor GD Image that is the padded and resampled, or false if source image is not an image
*/
function fitImageToSize($imageFile, $maxWidth, $maxHeight, $background = null)
{
if (!list($width, $height, $type) = getimagesize($imageFile))
{
trigger_error("Warning: image $imageFile is not an image!");
return false;
}
if (!$image = createToGdImage($imageFile))
{
trigger_error("Error: Could not create image from file $imageFile!", E_USER_ERROR);
return false;
}
/* There is probably a more mathamatical method of figuring this out,
but I am not a math whiz. So instead I just calculate both image
dimentions and return the best fit. */
$basedOnWidth['width'] = $maxWidth;
$basedOnWidth['height'] = round(($height / $width) * $maxWidth);
$basedOnHeight['width'] = round((($width / $height)) * $maxHeight);
$basedOnHeight['height'] = $maxHeight;
$x = 0;
$y = 0;
if ($basedOnHeight['width'] > $maxWidth)
{
$newWidth = $basedOnWidth['width'];
$newHeight = $basedOnWidth['height'];
$y = round($maxHeight / 2) - round($newHeight / 2);
}
else
{
$newWidth = $basedOnHeight['width'];
$newHeight = $basedOnHeight['height'];
$x = round($maxWidth / 2) - round($newWidth / 2);
}
$destinationImage = imageCreateTrueColor($maxWidth, $maxHeight);
if ($background === null)
{
$background = imagecolorallocate($destinationImage, 255, 255, 255);
}
imageFill($destinationImage, 1, 1, $background);
imageCopyResampled($destinationImage, $image, $x, $y, 0,0, $newWidth, $newHeight, $width, $height);
return $destinationImage;
}
/**
* This will crop an image to a particular (square) size, instead of padding it
* Like the above function, this resizes an image. Aspect ratio of the pixel data
* is retained (i.e. you won't get any crazy streching of the image), but the actual
* aspect ratio is discarded at the end.
*@param imageFile string absolute path to the image file
*@param resizeTo int width AND height to resize the image to.
*@returns A TrueColor GD Image that is the cropped and resampled, or false if source image is not an image
*/
function cropImageToSize($imageFile, $resizeTo)
{
if (!list($width, $height, $type) = getimagesize($imageFile))
{
trigger_error("Warning: image $imageFile is not an image!", E_USER_WARNING);
return false;
}
if (!$image = createToGdImage($imageFile))
{
trigger_error("Error: Could not create image from file $imageFile!", E_USER_ERROR);
return false;
}
if ($width < $height)
{
$size = $width;
$x = 0;
$y = ($height - $width) / 2;
}
else
{
$size = $height;
$y = 0;
$x = ($width - $height) / 2;
}
$destinationImage = imageCreateTrueColor($resizeTo, $resizeTo);
imageCopyResampled($destinationImage, $image,
0,0, // Destination Origin
$x, $y, // Source Origin
$resizeTo, $resizeTo, // Destination Size
$size, $size // Source Size
);
return $destinationImage;
}
/**
* given an image file, it will return a GD image from it
*@param imageFile string path to the image file to turn into a gd image
*@returns resource A GD image
*/
function createToGdImage($imageFile)
{
if (function_exists("exif_imagetype"))
{
$type = exif_imagetype($imageFile);
}
else
{
list($dummy_w,$dummy_h,$type,$dummy_html) = getimagesize($imageFile);
}
switch($type)
{
case IMAGETYPE_GIF:
return imageCreateFromGif($imageFile);
case IMAGETYPE_JPEG:
return imageCreateFromJpeg($imageFile);
case IMAGETYPE_PNG:
return imageCreateFromPng($imageFile);
default:
trigger_error("Error: unsupported image type: ".image_type_to_mime_type($type)." in fitImageToSize.", E_USER_WARNING);
return false;
}
}
?>
Whether you've never rented before or you’ve been at it for years, our articles cover a growing list of topics that will interest and inform you! Check out “How to Pack Your Plants” and “Tips for Passing an Inspection.” Content is updated continually and we're always looking for suggestions, so tell us what you think at comments@padgrab.com.
Tenants
Rental Searches
Browse vacant rentals anywhere in your chosen city. Narrow your search to include building type, pet preference, and many more.
Favorites
Don’t write your favorites down! Sign up and let Padgrab keep track of the properties you are interested in. You can even print them off in a useful Property Assessment form to take with you when touring prosepects!
Resources
Access information on local tenant and landlord agencies, service companies, how-to guides, and template forms.
/* Commenting this jive out. Put this back when we have some actual landlord content.
* Also, note the PHP comments. Slightly higher parse time per-page, but cuts down on
* bandwidth. That and the clients don't see the commentary.
*
*/
?>