2017-02-03 23 views
1

У меня было очень трудное время, пытаясь автоматически поворачивать изображения через PHP, когда я их загружаю. В настоящее время они отображаются сбоку при просмотре в браузере.PHP Upload with EXIF ​​Ориентация на основе вращения

Я искал часы и нашел множество советов и примеров, но я не совсем знаю, как их реализовать.

Я также пробовал использовать код от комментатора в руководстве по PHP, без везения.

Это код, я ссылки:

 <?php 
    $image = imagecreatefromstring(file_get_contents($_FILES['image_upload']['tmp_name'])); 
    $exif = exif_read_data($_FILES['image_upload']['tmp_name']); 
    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; 
     } 
    } 
    // $image now contains a resource with the image oriented correctly 
    ?> 

Вот страница я работаю с прямо сейчас. Кажется, что он работает нормально, но изображения выходят вбок. Я удалил код из многочисленных неудачных попыток заставить ротацию работать.

<?php 
include 'includes/democonnect.php'; 
$cnum=$_POST['cnum']; 
$amount1=$_POST['amount1']; 



$target_dir = "uploads/"; 
$target_file = $target_dir . basename($_FILES["uploadReceipt"]["name"]); 
$uploadOk = 1; 
$imageFileType = pathinfo($target_file,PATHINFO_EXTENSION); 
// Check if image file is a actual image or fake image 
if(isset($_POST["submit"])) { 
    $check = getimagesize($_FILES["uploadReceipt"]["tmp_name"]); 
    if($check !== false) { 
     echo "File is an image - " . $check["mime"] . "."; 
     $uploadOk = 1; 
    } else { 
     echo "File is not an image."; 
     $uploadOk = 0; 
    } 
} 



$filename = 'receipt'.time() . basename($_FILES["uploadReceipt"]["name"]); 




// Check file size 
if ($_FILES["uploadReceipt"]["size"] > 5000000) { 
    echo "Sorry, your file is too large."; 
    $uploadOk = 0; 
} 
// Allow certain file formats 
if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg" && $imageFileType != "gif" && $imageFileType != "bmp") { 
    echo "Sorry, only JPG, JPEG, PNG, GIF, and BMP files are allowed."; 
    $uploadOk = 0; 
} 
// Check if $uploadOk is set to 0 by an error 
if ($uploadOk == 0) { 
    echo "Sorry, your file was not uploaded."; 
// if everything is ok, try to upload file 
} else { 
    if (move_uploaded_file($_FILES["uploadReceipt"]["tmp_name"], $target_dir.$filename)) { 
     echo "The file ". $filename. " has been uploaded."; 

$query = "INSERT INTO tblReceiptUpload 
     (cnum,pointer1,amount1) 
     VALUES(?,?,?)"; 
$params1 = array($cnum,$filename,$amount1);      
$result = sqlsrv_query($conn,$query,$params1); 

sqlsrv_close($conn);   

    } else { 
     echo "Sorry, there was an error uploading your file."; 
    } 
} 
?> 

Любая помощь была бы чрезвычайно оценена!

+0

Зачем вам «удалять» единый код, о котором вы просите о помощи? – miken32

+0

Код, который я написал выше моего кода, - это то, что я пытался реализовать, но я не мог заставить его работать. Мое использование «раздели» было, вероятно, неверным. – Travis

+0

Но там нет кода, связанного с вращением изображения. У вас есть два фрагмента кода, вы говорите: «Поместите их вместе для меня» вместо «Я попытался собрать их вместе, но я получаю сообщение об ошибке x». – miken32

ответ

0

Попробуйте это. Мы берем файл, и если это jpeg, мы поворачиваем его. Если нет, мы этого не сделаем. Мы берем переменную $image, которая создается и генерирует jpeg в желаемом месте.

include 'includes/democonnect.php'; 
$cnum=$_POST['cnum']; 
$amount1=$_POST['amount1']; 

$target_dir = "uploads/"; 
$target_file = $target_dir . basename($_FILES["uploadReceipt"]["name"]); 
$uploadOk = 1; 
$imageFileType = pathinfo($target_file,PATHINFO_EXTENSION); 
// Check if image file is a actual image or fake image 
if(isset($_POST["submit"])) { 
    $check = getimagesize($_FILES["uploadReceipt"]["tmp_name"]); 
    if($check !== false) { 
     echo "File is an image - " . $check["mime"] . "."; 
     $uploadOk = 1; 

     $info = $check; 
     if ($info['mime'] == 'image/jpeg') $image = imagecreatefromjpeg($_FILES["uploadReceipt"]["tmp_name"]); 
     elseif ($info['mime'] == 'image/gif') $image = imagecreatefromgif($_FILES["uploadReceipt"]["tmp_name"]); 
     elseif ($info['mime'] == 'image/png') $image = imagecreatefrompng($_FILES["uploadReceipt"]["tmp_name"]); 
     else exit;//Do whatever you want here. 

     if($info['mime'] == 'image/jpeg') { 
      $exif = exif_read_data($_FILES["uploadReceipt"]["tmp_name"]); 
      if(isset($exif['Orientation'])) { 
       $orientation = $exif['Orientation']; 
      } 
     } 

     if(isset($orientation)) { 
      switch($orientation) { 
       case 3: 
        $image = imagerotate($image, 180, 0); 
        break; 
       case 6: 
        $image = imagerotate($image, -90, 0); 
        break; 
       case 8: 
        $image = imagerotate($image, 90, 0); 
        break; 
      } 
     } 

     ////////// 
     // $image is your new, rotated file. 
     ////////// 
    } else { 
     echo "File is not an image."; 
     $uploadOk = 0; 
    } 
} 

$filename = 'receipt'.time() . basename($_FILES["uploadReceipt"]["name"]); 

// Check file size 
if ($_FILES["uploadReceipt"]["size"] > 5000000) { 
    echo "Sorry, your file is too large."; 
    $uploadOk = 0; 
} 
// Allow certain file formats 
if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg" && $imageFileType != "gif" && $imageFileType != "bmp") { 
    echo "Sorry, only JPG, JPEG, PNG, GIF, and BMP files are allowed."; 
    $uploadOk = 0; 
} 
// Check if $uploadOk is set to 0 by an error 
if ($uploadOk == 0 || !isset($image)) { 
    echo "Sorry, your file was not uploaded."; 
// if everything is ok, try to upload file 
} else { 
    if (imagejpeg($image, $target_dir.$filename)) { 
     echo "The file ". $filename. " has been uploaded."; 

     $query = "INSERT INTO tblReceiptUpload 
     (cnum,pointer1,amount1) 
     VALUES(?,?,?)"; 
     $params1 = array($cnum,$filename,$amount1); 
     $result = sqlsrv_query($conn,$query,$params1); 

     sqlsrv_close($conn); 

    } else { 
     echo "Sorry, there was an error uploading your file."; 
    } 
} 
+0

Большое спасибо. Это работает отлично! – Travis

0

Есть две основные проблемы: 1. В коде вы нашли онлайн "$ _FILES [ 'image_upload'] [ 'tmp_name']" должны быть заменены на "$ _FILES [" uploadReceipt "] [" tmp_name "]"

  1. Если файл повернут, он должен быть сохранен (как сохранить его зависит от типа файла).

Просмотрите нижеследующий код и дайте мне знать, как это работает?

// if everything is ok, try to upload file 
} else { 

$image = imagecreatefromstring(file_get_contents($_FILES['uploadReceipt']['tmp_name'])); 
$exif = exif_read_data($_FILES['uploadReceipt']['tmp_name']); 
$was_rotated = 0; 
if(!empty($exif['Orientation'])) { 
    switch($exif['Orientation']) { 
     case 8: 
      $image = imagerotate($image,90,0); $was_rotated = 1; 
      break; 
     case 3: 
      $image = imagerotate($image,180,0); $was_rotated = 1; 
      break; 
     case 6: 
      $image = imagerotate($image,-90,0); $was_rotated = 1; 
      break; 
    } 
} 

if($was_rotated == 1) 
    { 
    switch($imageFileType) // making the assumption that the image file has the correct exstention! 
     { 
     case 'bmp': 
      if(function_exists(imagebmp)) { imagebmp($image,$target_dir.$filename); } // PHP 7 required for imagebmp 
      else { $was_rotated = 0; } 
     break; 

     case 'png': 
      imagepng($image,$target_dir.$filename); 
     break; 

     case 'gif': 
      imagegif($image,$target_dir.$filename); 
     break; 

     case 'jpg': 
      imagejpeg($image,$target_dir.$filename,92); // 92 is jpeg quality setting 
     break; 

     case 'jpeg': 
      imagejpeg($image,$target_dir.$filename,92); 
     break; 
     } 
    } 

if(($was_rotated == 1) or (move_uploaded_file($_FILES["uploadReceipt"]["tmp_name"], $target_dir.$filename))) { 
    echo "The file ". $filename. " has been uploaded."; 

$query = "INSERT INTO tblReceiptUpload 
    (cnum,pointer1,amount1) 
    VALUES(?,?,?)"; 
$params1 = array($cnum,$filename,$amount1);      
$result = sqlsrv_query($conn,$query,$params1); 

sqlsrv_close($conn);   

} else { 
    echo "Sorry, there was an error uploading your file."; 
} 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^