2015-12-15 20 views
5

Tôi có một issiue khi tải lên một hình ảnh được chụp bằng iphone. Tôi đang cố gắng sử dụng hàm PHP và hàm imgrotate để tự động quyết định xem hình ảnh có cần được xoay sang đúng thuộc tính không, trước khi tải nó lên máy chủ.Cách kiểm tra/sửa hình ảnh trước khi tải lên hình ảnh bằng cách sử dụng PHP

mã html My:

<form class="form-horizontal" method="post" enctype="multipart/form-data"> 
    <div class="form-group"> 
     <div class="col-md-9"> 
      <div class="input-group"> 
       <span class="input-group-btn"> 
        <span class="btn btn-default btn-file"> 
         Choose img<input type="file" name="file" id="imgInp"> 
        </span> 
       </span> 

      </div> 
     </div> 
    </div> 
    <button type="submit">Send</button> 
</form> 

Mã PHP im cách sử dụng: Cũng trả về một lỗi: Cảnh báo: imagerotate() dự kiến ​​tham số 1 là tài nguyên, chuỗi được đưa ra trong

.

Bất cứ ai cũng có mã làm việc cho kịch bản này?

<?php 

$filename = $_FILES['file']['name']; 
$exif = exif_read_data($_FILES['file']['tmp_name']); 


if (!empty($exif['Orientation'])) { 
     switch ($exif['Orientation']) { 
      case 3: 
       $image = imagerotate($filename, -180, 0); 
       break; 
      case 6: 
       $image = imagerotate($filename, 90, 0); 
       break; 
      case 8: 
       $image = imagerotate($filename, -90, 0); 
       break; 
     } 
    } 

    imagejpeg($image, $filename, 90); 

?> 
+0

'imagerotate() 'đòi hỏi một' hình ảnh resource' chứ không phải là một tên tập tin . Xem: http://php.net/manual/en/function.imagerotate.php – Fredrik

Trả lời

5

Bạn đang sử dụng imagerotate sai. Nó mong đợi tham số đầu tiên là tài nguyên trong khi bạn đang truyền tên tệp. Check manual

Hãy thử điều này:

<?php 

$filename = $_FILES['file']['name']; 
$filePath = $_FILES['file']['tmp_name']; 
$exif = exif_read_data($_FILES['file']['tmp_name']); 
if (!empty($exif['Orientation'])) { 
    $imageResource = imagecreatefromjpeg($filePath); // provided that the image is jpeg. Use relevant function otherwise 
    switch ($exif['Orientation']) { 
     case 3: 
     $image = imagerotate($imageResource, 180, 0); 
     break; 
     case 6: 
     $image = imagerotate($imageResource, -90, 0); 
     break; 
     case 8: 
     $image = imagerotate($imageResource, 90, 0); 
     break; 
     default: 
     $image = $imageResource; 
    } 
} 

imagejpeg($image, $filename, 90); 

?> 

Đừng quên để giải phóng bộ nhớ bằng cách thêm sau hai dòng:

imagedestroy($imageResource); 
imagedestroy($image); 
+0

Tôi nhận được: Thông báo: Chỉ mục không xác định: tmp_path, không thể thấy điều này khi bán FILES. – sdfgg45

+0

@ sdfgg45 đã được sửa. Hãy kiểm tra ngay bây giờ – ksg91

+0

Hoạt động, nhưng nó xoay hình ảnh một bước đến nhiều. (iphone5) – sdfgg45

Các vấn đề liên quan