【问题标题】:Input capture on iOS image rotationiOS图像旋转的输入捕获
【发布时间】:2017-05-08 13:24:52
【问题描述】:

我正在为我的 php 表单而苦苦挣扎。我想通过输入捕获功能上传图像。但是在 iOS 设备上捕获 img 后图像会旋转。我发现了大量关于 exif 的文章,但对我没有任何帮助。所以我将我的代码粘贴在下面,我想寻求帮助如何实现代码以旋转到其余代码。 (我不知道该怎么做。)谢谢兄弟的帮助。或者有什么建议? 实现代码:

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);
                }
            }
        }
} 

【问题讨论】:

    标签: php ios input


    【解决方案1】:

    我遇到了同样的问题。所以这里是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;
     }
    }
    

    现在在将图像发送到服务器之前修复图像方向

    let imageToUpload = originalImage.fixOrientation()
    

    注意:不要删除 EXIF 数据,因为它包含方向属性。

    【讨论】:

    • 谢谢,好像很有帮助,但请告诉我如何实现它?我不是这样的专业人士。
    • @IgorMiniMinarič 这是 swift 语言代码,将在 iOS 端实现。但我猜你要的是 PHP 代码。对不起兄弟。
    【解决方案2】:

    我对网络进行了大量研究,这段代码最终完美运行。基本上我必须将 img 保存到目录中,然后打开 dir 并做这个魔术。这是我想解决 iOS 方向相机问题的最简单方法。

     $buffer = ImageCreateFromJPEG($url); //url is path to image
    $exif =@exif_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);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-02-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-11
      • 1970-01-01
      • 2016-09-30
      • 2017-04-15
      相关资源
      最近更新 更多