2017-05-08 9 views
0

私は私のPHPフォームに苦労しています。インプットキャプチャ機能で画像をアップロードしたいしかし、画像はiOSデバイスのimgをキャプチャした後に回転されます。 exifについての記事がたくさん見つかりましたが、notihingは私のために働いていました。そこで私は以下のコードを貼り付けています。残りのコードにローテーションコードを実装する方法を教えてください。 (私はそれをやる方法はわかりません)Thx bros for help。あるいは何か提案はありますか?実装する コード:iOS画像ローテーションでのインプットキャプチャ

fileReader.onloadend = function() { 

var exif = EXIF.readFromBinaryFile(new BinaryFile(this.result)); 

switch(exif.Orientation){ 

    case 8: 
     ctx.rotate(90*Math.PI/180); 
     break; 
    case 3: 
     ctx.rotate(180*Math.PI/180); 
     break; 
    case 6: 
     ctx.rotate(-90*Math.PI/180); 
     break; 


}}; 

残り:

if (isset($_POST['submit'])) { 
    if (empty($_POST['title']) or empty($_POST['shop']) or empty($_FILES['image']) or empty($_POST['price'])) { 
     echo "All fields must be filled"; 
    } 
    else { 
     $userID = $_POST['userID']; 
     $title = $_POST['title']; 
     $price = $_POST['price']; 
     $price_before = $_POST['price_before']; 
     $town = $_POST['town']; 
     $shop = $_POST['shop']; 

     if(empty($_POST['price_before'])){ 
      $price_before = null; 
     } 
     if(empty($_POST['cut'])){ 
      $pcut = null; 
     } 
     if (isset($_FILES['image'])) { 
      $errors = array(); 
      $file_name = $_FILES['image']['name']; 
      $file_size = $_FILES['image']['size']; 
      $file_tmp = $_FILES['image']['tmp_name']; 
      $file_type = $_FILES['image']['type']; 
      $file_ext = strtolower(end(explode('.', $_FILES['image']['name']))); 
      $expensions = array("jpeg", "jpg", "png"); 
      if (in_array($file_ext, $expensions) === false) { 
       $errors[] = "extension not allowed, please choose a JPEG or PNG file."; 
      } 
      if ($file_size > 8097152) { 
       $errors[] = 'File size must be less than 8 MB'; 
      } 
      if (empty($errors) == true) { 
       session_start(); 
       $hour = date("H"); 
       $min = date("i"); 
       $sec = date("s"); 
       $day = date("d"); 
       $month = date("m"); 
       $year = date("Y"); 

       $url = "../pic/".$file_name.".".$file_ext; 

       $file_name = md5(uniqid()); 



       move_uploaded_file($file_tmp, "../pic/".$file_name.".".$file_ext); 

       $upload = "INSERT INTO item (userID, title, price, price_before, town, shop, img_name, img_ext, hour, min, sec, day, month, year) VALUES ('$userID', '$title', '$price',' $price_before', '$town', '$shop', '$file_name', '$file_ext', '$hour', '$min', '$sec', '$day', '$month', '$year')"; 



       $result = $conn -> query($upload); 
       echo '<div style=width:100%;height:100%;display:flex;margin:0;> 
    <div style=width:auto;height:auto%;vertical-align:middle;margin:auto;><div class="cssload-spin-box"></div></div></div>'; 
header('Refresh: 2; URL = ../index.php'); 
       } else { 
        print_r($errors); 
       } 
      } 
     } 
} 

答えて

0

私は同じ問題に直面していました。ここにはUIImageという拡張子があります。

extension UIImage { 

    /// (Additional method to fix the image orientation issue on b/w server and client) 
    public func fixOrientation() -> UIImage { 
    if self.imageOrientation == UIImageOrientation.Up { 
     return self 
    } 

    var transform = CGAffineTransformIdentity 

    switch self.imageOrientation { 
    case .Down, .DownMirrored: 
     transform = CGAffineTransformTranslate(transform, self.size.width, self.size.height) 
     transform = CGAffineTransformRotate(transform, CGFloat(M_PI)); 

    case .Left, .LeftMirrored: 
     transform = CGAffineTransformTranslate(transform, self.size.width, 0); 
     transform = CGAffineTransformRotate(transform, CGFloat(M_PI_2)); 

    case .Right, .RightMirrored: 
     transform = CGAffineTransformTranslate(transform, 0, self.size.height); 
     transform = CGAffineTransformRotate(transform, CGFloat(-M_PI_2)); 

    case .Up, .UpMirrored: 
     break 
    } 

    switch self.imageOrientation { 

    case .UpMirrored, .DownMirrored: 
     transform = CGAffineTransformTranslate(transform, self.size.width, 0) 
     transform = CGAffineTransformScale(transform, -1, 1) 

    case .LeftMirrored, .RightMirrored: 
     transform = CGAffineTransformTranslate(transform, self.size.height, 0) 
     transform = CGAffineTransformScale(transform, -1, 1); 

    default: 
     break; 
    } 

    // Now we draw the underlying CGImage into a new context, applying the transform 
    // calculated above. 
    let ctx = CGBitmapContextCreate(
     nil, 
     Int(self.size.width), 
     Int(self.size.height), 
     CGImageGetBitsPerComponent(self.CGImage), 
     0, 
     CGImageGetColorSpace(self.CGImage), 
     UInt32(CGImageGetBitmapInfo(self.CGImage).rawValue) 
    ) 

    CGContextConcatCTM(ctx, transform); 

    switch self.imageOrientation { 
    case .Left, .LeftMirrored, .Right, .RightMirrored: 
     // Grr... 
     CGContextDrawImage(ctx, CGRectMake(0, 0, self.size.height,self.size.width), self.CGImage); 

    default: 
     CGContextDrawImage(ctx, CGRectMake(0, 0, self.size.width,self.size.height), self.CGImage); 
     break; 
    } 

    // And now we just create a new UIImage from the drawing context 
    let cgimg = CGBitmapContextCreateImage(ctx) 

    let img = UIImage(CGImage: cgimg!) 

    return img; 
} 
} 

は今NOTEサーバー

let imageToUpload = originalImage.fixOrientation() 

を送信する前に画像の向きを修正する:それは配向性を保持しているとして、EXIFデータを削除しないでください。

+0

ありがとう、それは役に立つと思われますが、実装方法を教えてください。私はそのようなプロではない。 –

+0

@IgorMiniMinaričこれは迅速な言語コードであり、iOS側で実装されます。しかし、私はあなたがPHPコードを求めていると思います。申し訳ありません。 – TheTiger

0

私はウェブ上で巨大な研究を行い、このコードは最終的に完璧に機能しました。基本的には、imgをディレクトリに保存してからdirを開いてこの魔法を実行しなければなりませんでした。これは、iOS向きカメラの問題を解決する最も簡単な方法と推測しています。

$buffer = ImageCreateFromJPEG($url); //url is path to image 
$exif [email protected]_read_data($url); 
if(!empty($exif['Orientation'])){ 
    switch($exif['Orientation']){ 
     case 8: 
      $buffer = imagerotate($buffer,90,0); 
     break; 
     case 3: 
      $buffer = imagerotate($buffer,180,0); 
     break; 
     case 6: 
      $buffer = imagerotate($buffer,-90,0); 
     break; 
    } 
} 

imagejpeg($buffer, $url, 90); 
関連する問題