By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
425,612 Members | 1,632 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 425,612 IT Pros & Developers. It's quick & easy.

Thumbnail orientation

P: n/a
Hi,

I'm using the code below to create thumbnails from photos. The code
works fine and thumbnails are created. However, thumbnails of vertical
photos are oriented as horizontal photos.

More info:
These photos come from a Nikon high end SLR digital camera. It's not my
camera so I have no control over how the image is taken.
If I open a vertical image in Photoshop (CS2), the image is oriented
correctly. When I try to create a thumbnail with php, the thumbnail is
always oriented incorrectly as Horizontal.
I did some further testing and tried opening the same image using
ImageMagic (on a Linux box). ImageMagic also sees the image incorrectly
as Horizontal.

There has to be some way to read the JPG file and determine if it's
meant to be a vertical or horizontal photograph. Are there any php
libraries that are capable of doing this?

Does anyone know the layout of a JPG binary well enough to tell me if
there is a specific flag set for orientation?

Thanks for all of your suggestions.

M

<?

$fname="verttest.jpg";
$fname2="Thumb_verttest.jpg";
$thumbWidth="300";
echo "Creating thumbnail for $fname";
// load image and get image size
$img = imagecreatefromjpeg($fname);
$width = imagesx( $img );
$height = imagesy( $img );
echo "\n";
echo "Current Width:" . $width;
echo "\n";
echo "Current Height:" . $height;
echo "\n";

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

echo "\n";
echo "New Width:" . $new_width;
echo "\n";
echo "New Height:" . $new_height;
echo "\n";

// 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 );

// save thumbnail into a file
imagejpeg( $tmp_img, "{$pathToThumbs}{$fname2}" );
?>

May 3 '07 #1
Share this Question
Share on Google+
2 Replies


P: n/a
Milagro ha scritto:
I'm using the code below to create thumbnails from photos. The code
works fine and thumbnails are created. However, thumbnails of vertical
photos are oriented as horizontal photos.
It seems you have to check the EXIF orientation. EXIF is a metadata
section for JPEG, which most cameras set when they take a photo.
You could access the EXIF data using the exif_read_data() function (see
the doc for info about input parameters) which will return you an array.
After that, you could deterine if the image has to be rotated in this
way ($exif is the array returned by exif_read_data() ):

$o = $exif["IFD0"]["Orientation"];
$rotate = 0;
$flip = false;
switch($o) {
case 1:
$rotate = 0;
$flip = false;
break;

case 2:
$rotate = 0;
$flip = true;
break;

case 3:
$rotate = 180;
$flip = false;
break;

case 4:
$rotate = 180;
$flip = true;
break;

case 5:
$rotate = 90;
$flip = true;
break;

case 6:
$rotate = 90;
$flip = false;
break;

case 7:
$rotate = 270;
$flip = true;
break;

case 8:
$rotate = 270;
$flip = false;
break;
}

Now, $rotate indicates how many degrees the image should be rotated
(clockwise). Then, if $flip is true , you should also flip horizontally
the image (normally this is not the case for digital camera photos)

--
|\/|55: Mattia Gentilini e 55 GigaHertz nel processore
|/_| ETICS project at CNAF, INFN, Bologna, Italy
|\/| www.getfirefox.com www.getthunderbird.com
* Using Mac OS X 10.4.9 powered by Cerebros (Core 2 Duo) *
May 3 '07 #2

P: n/a
On 2007-05-03 10:45:10 -0400, Mattia Gentilini
<Mattia.Gentilini_REMOVE_@_REMOVE_CNAF.INFN.ITsaid :
Milagro ha scritto:
>I'm using the code below to create thumbnails from photos. The code
works fine and thumbnails are created. However, thumbnails of vertical
photos are oriented as horizontal photos.
It seems you have to check the EXIF orientation. EXIF is a metadata
section for JPEG, which most cameras set when they take a photo.
You could access the EXIF data using the exif_read_data() function (see
the doc for info about input parameters) which will return you an array.
After that, you could deterine if the image has to be rotated in this
way ($exif is the array returned by exif_read_data() ):

$o = $exif["IFD0"]["Orientation"];
$rotate = 0;
$flip = false;
switch($o) {
case 1:
$rotate = 0;
$flip = false;
break;

case 2:
$rotate = 0;
$flip = true;
break;

case 3:
$rotate = 180;
$flip = false;
break;

case 4:
$rotate = 180;
$flip = true;
break;

case 5:
$rotate = 90;
$flip = true;
break;

case 6:
$rotate = 90;
$flip = false;
break;

case 7:
$rotate = 270;
$flip = true;
break;

case 8:
$rotate = 270;
$flip = false;
break;
}

Now, $rotate indicates how many degrees the image should be rotated
(clockwise). Then, if $flip is true , you should also flip horizontally
the image (normally this is not the case for digital camera photos)

Thank you very much, this is exactly what I was looking for.
Ciao!

May 3 '07 #3

This discussion thread is closed

Replies have been disabled for this discussion.