2014-12-05 1 views
-1

나는 내 웹 사이트에 대해 PHP, jQuery, AJAX, HTMl5, 부트 스트랩 프레임 워크 (v.3.3.0)을 사용하고 있습니다.jQuery/PHP를 사용하여 스마트 장치에서 캡처하고 업로드 한 이미지의 방향을 어떻게 조정해야합니까?

나는 사용자가 장치의 카메라를 사용하여 사진을 캡처하고 서버에 업로드 할 수 있도록 허용하고 있습니다.

내가 직면 한 문제는 캡처 한 이미지를 업로드 할 때 서버에 저장된 이미지의 방향이 변경된다는 것입니다. 즉 사진을 촬영하는 동안 휴대 전화의 방향이 세로이고 해당 세로 방향 이미지가 서버에로드되면 서버에 저장된 이미지의 방향이 가로 방향으로 변경됩니다.

어떻게해야합니까?

HTML 코드 :

<form id="request_form" method="post" class="form-horizontal" enctype="multipart/form-data" action=""> 
    <input type="file" name="student_image" id="student_image" accept="image/*" capture/> 
</form> 

jQuery를-AJAX 코드 :

$('#request_form').submit(function(e) { 

    var form = $(this); 

    var formdata = false; 

    if(window.FormData) { 
    formdata = new FormData(form[0]); 
    } 

    var formAction = form.attr('action'); 

    $.ajax({ 
    url   : 'request.php', 
    type  : 'POST',  
    cache  : false, 
    data  : formdata ? formdata : form.serialize(), 
    contentType : false, 
    processData : false, 
    success: function(response) { 

     var responseObject = $.parseJSON(response);  
     if(responseObject.error_message) { 

     if ($(".alert-dismissible")[0]) { 
      $('.alert-dismissible').remove(); 
     } 
     alert(responseObject.error_message);  

     } else { 
     alert("Success");  
     } 
    } 
    }); 
    e.preventDefault(); 
}); 

PHP 코드 :

다음

내 코드입니다
<?php 
    $target_dir = "uploads/"; 
    $target_file = $target_dir . basename($_FILES["student_image"]["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["student_image"]["tmp_name"]); 
    if($check !== false) { 
     echo "File is an image - " . $check["mime"] . "."; 
     $uploadOk = 1; 
    } else { 
     echo "File is not an image."; 
     $uploadOk = 0; 
    } 
    } 
    // Check if file already exists 
    if (file_exists($target_file)) { 
    echo "Sorry, file already exists."; 
    $uploadOk = 0; 
    } 
    // Check file size 
    if ($_FILES["student_image"]["size"] > 500000) { 
    echo "Sorry, your file is too large."; 
    $uploadOk = 0; 
    } 
    // Allow certain file formats 
    if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg" && $imageFileType != "gif") { 
    echo "Sorry, only JPG, JPEG, PNG & GIF 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["student_image"]["tmp_name"], $target_file)) { 
     echo "The file ". basename($_FILES["student_image"]["name"]). " has been uploaded."; 
    } else { 
     echo "Sorry, there was an error uploading your file."; 
    } 
    } 
?> 

파일을 업로드 할 때 문제가 없습니다. 파일이 업로드 중입니다. 문제는 업로드 된 이미지의 방향 변경 때문입니다. 나는 그 일을 피하고 싶다. 캡처되고 업로드 된 이미지의 방향은 동일해야합니다.

내 문제와 관련하여 추가 정보가 필요하면 알려주십시오.

미리 감사드립니다.

답변

0

imageMagick을 사용하여 이미지를 열고 JPEG의 exif 데이터에서 방향을 확인하십시오.

<?php 
// Note: $image is an Imagick object, not a filename! See example use below. 
function autoRotateImage($image) { 
    $orientation = $image->getImageOrientation(); 

    switch($orientation) { 
     case imagick::ORIENTATION_BOTTOMRIGHT: 
      $image->rotateimage("#000", 180); // rotate 180 degrees 
     break; 

     case imagick::ORIENTATION_RIGHTTOP: 
      $image->rotateimage("#000", 90); // rotate 90 degrees CW 
     break; 

     case imagick::ORIENTATION_LEFTBOTTOM: 
      $image->rotateimage("#000", -90); // rotate 90 degrees CCW 
     break; 
    } 

    // Now that it's auto-rotated, make sure the EXIF data is correct in case the EXIF gets saved with the image! 
    $image->setImageOrientation(imagick::ORIENTATION_TOPLEFT); 
} 
?> 

이 코드는 php.net 설명서에서 직접 가져옵니다.

**PHP code :** 

    <?php 
     $target_dir = "uploads/"; 
     $target_file = $target_dir . basename($_FILES["student_image"]["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["student_image"]["tmp_name"]); 
     if($check !== false) { 
      echo "File is an image - " . $check["mime"] . "."; 
      $uploadOk = 1; 
     } else { 
      echo "File is not an image."; 
      $uploadOk = 0; 
     } 
     } 
     // Check if file already exists 
     if (file_exists($target_file)) { 
     echo "Sorry, file already exists."; 
     $uploadOk = 0; 
     } 
     // Check file size 
     if ($_FILES["student_image"]["size"] > 500000) { 
     echo "Sorry, your file is too large."; 
     $uploadOk = 0; 
     } 
     // Allow certain file formats 
     if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg" && $imageFileType != "gif") { 
     echo "Sorry, only JPG, JPEG, PNG & GIF 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 { 
     $filename = $_FILES["student_image"]["tmp_name"]; 
     $image = new Imagick($filename); 
     autoRotateImage($image); 
     $image->writeImage($filename); 
     if (move_uploaded_file($filename, $target_file)) { 
      echo "The file ". basename($_FILES["student_image"]["name"]). " has been uploaded and rotated maybe."; 
     } else { 
      echo "Sorry, there was an error uploading your file."; 
     } 
     } 
    ?> 

이렇게 해보십시오. 물론 php 파일에 upper 함수를 포함시켜야하고 imagick을 사용할 수 있어야합니다.

Imagic을 사용하지 않으려면 exif_read_data() 함수를 사용하여 jpeg를 열어보십시오.

<?php 
echo "test1.jpg:<br />\n"; 
$exif = exif_read_data('tests/test1.jpg', 'IFD0'); 
echo $exif===false ? "No header data found.<br />\n" : "Image contains headers<br />\n"; 

$exif = exif_read_data('tests/test2.jpg', 0, true); 
echo "test2.jpg:<br />\n"; 
foreach ($exif as $key => $section) { 
    foreach ($section as $name => $val) { 
     echo "$key.$name: $val<br />\n"; 
    } 
} 
?> 

당신은 IDF0.Orientation 찾고있다 : 나는에 인수로 전달 이미지 파일 이름에 혼란 스러워요 이후

0x0112 Orientation unsigned short 1 The orientation of the camera relative to the scene, when the image was captured. The start point of stored data is, '1' means upper left, '3' lower right, '6' upper right, '8' lower left, '9' undefined. 
+0

당신이 내가 작성한 코드에 따라 답을 보여 주시겠습니까 함수? – PHPLover

+0

코드에 맞는 대답을 편집했습니다. – AndreaBogazzi

+0

답변을 주셔서 감사합니다.하지만 내 서버에 설치할 수 없기 때문에 Imagick 확장 기능을 사용하고 싶지 않습니다. 이 일을 끝낼 수있는 다른 해결책을 제게 제공해 주시겠습니까? – PHPLover

관련 문제