首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >iOS图像旋转时的输入捕获

iOS图像旋转时的输入捕获
EN

Stack Overflow用户
提问于 2017-05-08 21:24:52
回答 2查看 85关注 0票数 0

我正在努力处理我的php表单。我想通过输入捕获功能上传图像。但在iOS设备上捕获img后,图像会发生旋转。我找到了很多关于exif的文章,但是通知对我很有效。因此,我将我的代码粘贴到下面,我想寻求帮助,如何实现代码的旋转到其余代码。(我不知道该怎么做。)兄弟们寻求帮助。或者可能有什么建议?要实现的代码:

代码语言:javascript
复制
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;


}};

剩下的:

代码语言:javascript
复制
    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);
                }
            }
        }
} 
EN

回答 2

Stack Overflow用户

发布于 2017-05-08 21:40:48

我也面临着同样的问题。下面是UIImage扩展。

代码语言:javascript
复制
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;
 }
}

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

代码语言:javascript
复制
let imageToUpload = originalImage.fixOrientation()

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

票数 0
EN

Stack Overflow用户

发布于 2017-05-08 23:59:04

我在web上做了大量的研究,这段代码终于完美地工作了。基本上,我必须将img保存到目录中,然后打开dir并执行此魔术。我想这是解决iOS定位相机问题最简单的方法。

代码语言:javascript
复制
 $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);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43848912

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档