Revision: 63578
Initial Code
Initial URL
Initial Description
Initial Title
Initial Tags
Initial Language
at May 18, 2013 08:21 by brownrl
Initial Code
<?php /** * @file * Describes the image resizing technique */ /** * Here is an example of how to use this function * * File: i.php if( $_GET['i'] ) { require_once( "function.imageResize.php" ); $_GET['i'] = str_replace("..", "", $_GET['i']); // needs to be lower $_GET['i'] = preg_replace("/^\//", "", $_GET['i']); // can't be hard coded // set a min default $_GET['w'] = intval( $_GET['w'] ); if( $_GET['w'] <= 0 ) { $_GET['w'] = 50; } // set a min default $_GET['h'] = intval( $_GET['h'] ); if( $_GET['h'] <= 0 ) { $_GET['h'] = 50; } // call it. if( file_exists( $_GET['i'] ) ) { imageResize( $_GET['i'] , $_GET['w'] , $_GET['h'] ); } } * * Called HTML: <img src="i.php?i=somefile_on_the_sever.jpg&width=500&height=400" /> * */ /** * Resize an Image * * Output it to the browser. * * Does not cache, probably should. Maybe version 2. */ function imageResize( $source_image, $width = 200, $height = 150, $quality = 70, $crop = true ) { // If the source image isn't an image seriously we got issues if( ! $image_data = getimagesize( $source_image ) ) { die( "Whoa can't get the image size of the original?" ); return false; } // Is it a gif, jpg or png. Sorry anything else probably not worth it. switch( $image_data['mime'] ) { case 'image/gif': $get_func = 'imagecreatefromgif'; $suffix = ".gif"; break; case 'image/jpeg'; $get_func = 'imagecreatefromjpeg'; $suffix = ".jpg"; break; case 'image/png': $get_func = 'imagecreatefrompng'; $suffix = ".png"; break; } // Setup some variables $img_original = call_user_func( $get_func, $source_image ); $old_width = $image_data[0]; $old_height = $image_data[1]; $new_width = $width; $new_height = $height; $src_x = 0; $src_y = 0; $current_ratio = round( $old_width / $old_height, 2 ); $desired_ratio_after = round( $width / $height, 2 ); $desired_ratio_before = round( $height / $width, 2 ); // Some people don't want to upscale images. I don't care // Uncomment if you want crash out and not upscale. /* if( $old_width < $width || $old_height < $height ) { // The desired image size is bigger than the original image. // Best not to do anything at all really. return false; } */ /** * If the crop option is left on, it will take an image and best fit it * so it will always come out the exact specified size. */ if( $crop ) { /** * create empty image of the specified size */ $new_image = imagecreatetruecolor( $width, $height ); /** * Landscape Image */ if( $current_ratio > $desired_ratio_after ) { $new_width = $old_width * $height / $old_height; } /** * Nearly square ratio image. */ if( $current_ratio > $desired_ratio_before && $current_ratio < $desired_ratio_after ) { if( $old_width > $old_height ) { $new_height = max( $width, $height ); $new_width = $old_width * $new_height / $old_height; } else { $new_height = $old_height * $width / $old_width; } } /** * Portrait sized image */ if( $current_ratio < $desired_ratio_before ) { $new_height = $old_height * $width / $old_width; } /** * Find out the ratio of the original photo to it's new, thumbnail-based size * for both the width and the height. It's used to find out where to crop. */ $width_ratio = $old_width / $new_width; $height_ratio = $old_height / $new_height; /** * Calculate where to crop based on the center of the image */ $src_x = floor( ( ( $new_width - $width ) / 2 ) * $width_ratio ); $src_y = round( ( ( $new_height - $height ) / 2 ) * $height_ratio ); } /** * Don't crop the image, just resize it proportionally */ else { if( $old_width > $old_height ) { $ratio = max( $old_width, $old_height ) / max( $width, $height ); }else{ $ratio = max( $old_width, $old_height ) / min( $width, $height ); } $new_width = $old_width / $ratio; $new_height = $old_height / $ratio; $new_image = imagecreatetruecolor( $new_width, $new_height ); } /** * Where all the real magic happens */ imagecopyresampled( $new_image, $img_original, 0, 0, $src_x, $src_y, $new_width, $new_height, $old_width, $old_height ); /** * Save it as a JPG File with our $destination_filename param. */ header('Content-Type: image/jpeg'); imagejpeg( $new_image, NULL, $quality ); /** * Destroy the evidence! */ imagedestroy( $new_image ); imagedestroy( $img_original ); /** * Return true because it worked and we're happy. Let the dancing commence! */ return true; }
Initial URL
http://www.itsgotto.be/cv.php
Initial Description
This is my simple image resizer on the fly thing. -- WARNING -- Resizing and showing images on the fly could potentially kill your server or make the website slow. Ideally, this should save the resized image in a cache. However, more often than not this method just works, no one complains, and I don't have to make some writable caching directory thing. If anyting this could give you a good start on how you really want to handle your images.
Initial Title
Image Resize on the Fly
Initial Tags
resize, image, browser
Initial Language
PHP