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

Archived

This topic is now archived and is closed to further replies.

×
×
  • 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.