Quantcast
Channel: Lil Josh » PHP
Viewing all articles
Browse latest Browse all 11

timthumb and PHP thumbnails rotate with large images

$
0
0

I’ve been banging my head against the wall trying to figure out why large images were getting rotated when I made them into a thumbnail (either through timthumb or PHP’s imagejpeg). It turns out that with images that were in portrait the width and the height were swapped for very high resolution images (~3000 pixels wide and ~ 2000 pixels tall). So I wrote my own function that looks to see if the EXIF information says this is a portrait image (which is defined by the integer value 6). If it is then I check to see if the width is greater than the height. If so – it’s going to end up in landscape so I simply rotate the image 270 degrees (counter clockwise) and it works! So I’ve made the function to take two arguments; a path to the image, and the desired width of the thumbnail. So here it is:


header('Content-Type:image/jpeg');

//can be called like this:
//script.php?w=200&src=img/myPicture.jpg
echo thumb($_GET["src"],$_GET["w"]);

function thumb( $path, $thumbWidth )
{

 $info = pathinfo($path);
 // continue only if this is a JPEG image
 if ( strtolower($info['extension']) == 'jpg' )
 {

// load image and get image size
 $img = imagecreatefromjpeg( "{$path}" );
 $width = imagesx( $img );
 $height = imagesy( $img );

// calculate thumbnail size
 $new_width = $thumbWidth;
 $new_height = floor( $height * ( $thumbWidth / $width ) );

// create a new temporary image
 $tmp_img = imagecreatetruecolor( $new_width, $new_height );

// copy and resize old image into new image
 imagecopyresized( $tmp_img, $img, 0, 0, 0, 0, $new_width, $new_height, $width, $height );
 $exif = exif_read_data($_GET["src"]);
 $orientation = $exif["Orientation"]; //6 for portrait and 1 for landscape
 if($orientation == 6 && $width > $height) {
 $tmp_img = imagerotate($tmp_img, 270, 0);
 }
 return imagejpeg($tmp_img);

 }
}


Viewing all articles
Browse latest Browse all 11

Trending Articles