Jump to content

Quick help with exif_read_data. Take a look at my script.


man5

Recommended Posts

Originally I had an issue with images not oriented correctly when uploading from smartphone(iphone). So I used exif_read_data function to fix it. It orients the images properly now.

 

Now the new issue that came with it is that if I am uploading a portrait image from iphone, it will be cut off at the bottom and on the right side. To fill the gap on the right side, it'll show a black background. I've attached a pic to show you.  Can anyone tell me how I can fix it?

 

Here is my code.

// Uploading image with resize and crop.	
	if (isset($_FILES['image'])) {
	
		if (empty($_FILES['image']['name'])) {
		
				?><div class="add-errors">Please choose an image!</div><?php 
				
		}	else {
			
			
			function getOrientedImage($imagePath){
				$image = imagecreatefromstring(file_get_contents($imagePath));
				$exif = exif_read_data($imagePath);
				if(!empty($exif['Orientation'])) {
					switch($exif['Orientation']) {
						case 8:
							$image = imagerotate($image,90,0);
							break;
						case 3:
							$image = imagerotate($image,180,0);
							break;
						case 6:
							$image = imagerotate($image,-90,0);
							break;
					}
				}
				return $image;
			}
			
			$name 		=	$_FILES['image']['name'];
			$temp 		=	$_FILES['image']['tmp_name'];
			$type		=	$_FILES['image']['type'];
			$size		=	$_FILES['image']['size'];
			$ext 		=	strtolower(end(explode('.', $name)));
			$size2		=	getimagesize($temp);
			$width 		=	$size2[0];
			$height 	=	$size2[1];
			$upload 	=	md5( rand( 0, 1000 ) . rand( 0, 1000 ) . rand( 0, 1000 ) . rand( 0, 1000 ));
			
			// Restrictions for uploading
			$maxwidth	=	6000;
			$maxheight	=	6000;
			$allowed	=	array('image/jpeg', 'image/jpg', 'image/png', 'image/gif');
			
			// Recognizing the extension
			switch($type){
						
				// Image/Jpeg
				case 'image/jpeg':
						$ext= '.jpeg';
				break;
				
				// Image/Jpg
				case 'image/jpg':
						$ext= '.jpg';
				break;
				
				// Image/png
				case 'image/png':
						$ext= '.png';
				break;
				
				// Image/gif
				case 'image/gif':
						$ext= '.gif';
				break;
			}

			// upload variables
			$path			=   $userDir . $upload . $ext;
			$thumb_path		=   $userDir . 'thumb_' . $upload . $ext;
				
			// check if extension is allowed.
			if (in_array($type, $allowed)) {
				
				// Checking if the resolution is FULLHD or under this resolution.
				if ($width <= $maxwidth && $height <= $maxheight) {
					if ($size <= 5242880) {
						
						// check the shape of the image
						if ($width == $height) {$shape = 1;}
						if ($width > $height) {$shape = 2;}
						if ($width < $height) {$shape = 3;}
						
						//Adjusting the resize script on shape.
						switch($shape) {
							
							// Code to resize a square image.
							case 1:
								$newwidth =		816;
								$newheight =	612;
							break;
							
							// Code to resize a tall image
							case 2:
								$newwidth 	=	816; 
								$ratio 		=	$newwidth / $width;
								$newheight	=	round($height * $ratio);
							break;
							
							// Code to resize a wide image.
							case 3:
								$newheight  =	612;
								$ratio		=	$newheight / $height;
								$newidth 	=	round($width * $ratio);
							break;
							
						}
						
						// Resizing according to extension.
						switch ($type) {
						
							// Image/Jpeg	
							case 'image/jpeg';
								$img =		getOrientedImage($temp);
								$thumb =	imagecreatetruecolor($newwidth, $newheight);
											imagecopyresized($thumb, $img, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);
											imagejpeg($thumb, $thumb_path);
							break;
							
							// Image/Jpg	
							case 'image/jpg';
								$img =		getOrientedImage($temp);
								$thumb =	imagecreatetruecolor($newwidth, $newheight);
											imagecopyresized($thumb, $img, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);
											imagejpeg($thumb, $thumb_path);
							break;
							
							// Image/png	
							case 'image/png';
								$img =		getOrientedImage($temp);
								$thumb =	imagecreatetruecolor($newwidth, $newheight);
											imagecopyresized($thumb, $img, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);
											imagepng($thumb, $thumb_path);
							break;
							
							// Image/gif	
							case 'image/gif';
								$img =		getOrientedImage($temp);
								$thumb =	imagecreatetruecolor($newwidth, $newheight);
											imagecopyresized($thumb, $img, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);
											imagegif($thumb, $thumb_path);
							break;
						}
						
							
							// Move the original file aswell.
							move_uploaded_file($temp, $path);
							
						
					} else {
						?><div class="add-errors">Your image size is too big!</div><?php
					}
				} else {
					?><div class="add-errors">Your image resolution exceeds the limit!</div><?php
				}

			} else {
				?><div class="add-errors">Your have uploaded a forbidden extension!</div><?php

			}
			
		}

	}

post-167624-0-73166300-1399097201_thumb.jpg

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.