iOS Swift 3图像左转90度

问题描述:

在我的应用程序中,我有一个功能,可以从camera拍摄照片并将其上传到服务器。我的问题是,当我从服务器获得回应时,图像旋转到90度左侧。这里是我的尝试代码:iOS Swift 3图像左转90度

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) 
{ 
    self.PickerFrom = self.PickerFrom2 
    if let pickedImage = info[UIImagePickerControllerOriginalImage] as? UIImage 
    { 
     self.AttachmentImageView.image = pickedImage 
    } 
    dismiss(animated: true, completion: nil) 
    uploadGalleryImage(image: self.AttachmentImageView.image!) 
} 

func uploadGalleryImage(image:UIImage) 
{ 
    let imageData: NSData = UIImagePNGRepresentation(image)! as NSData 
    let base64String = imageData.base64EncodedString(options: NSData.Base64EncodingOptions(rawValue: 0)) 
    self.AttachedDocumentURL = "data:image/png;base64,\(base64String)" 
} 

AttachedDocumentURL包含base64sting捕获的图像。

+0

图像如何保存在服务器上,其存储的在90度或保存在正常 –

+0

当u拿手机的摄像头,该图像具有方向属性本身。因此,请按照该方向检查并旋转并发送到服务器。很多可用的网络代码都可以自己编写。 – Ammaiappan

+0

你可以在这里查看我的答案https://*.com/questions/45157225/want-fixed-orientation-but-the-uiimage-autoratate/45157920#45157920 – luckyShubhra

试试这个(重置您的图像方向),您的服务器

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) 
{ 
    self.PickerFrom = self.PickerFrom2 
    if let pickedImage = info[UIImagePickerControllerOriginalImage] as? UIImage 
    { 
     self.AttachmentImageView.image = pickedImage 
    } 
    dismiss(animated: true, completion: nil) 

    if let updatedImage = self.AttachmentImageView.image?.updateImageOrientionUpSide() { 
     uploadGalleryImage(image: updatedImage) 
    } else { 
     uploadGalleryImage(image: self.AttachmentImageView.image!) 
    } 

} 

func uploadGalleryImage(image:UIImage) 
{ 
    let imageData: NSData = UIImagePNGRepresentation(image)! as NSData 
    let base64String = imageData.base64EncodedString(options: NSData.Base64EncodingOptions(rawValue: 0)) 
    self.AttachedDocumentURL = "data:image/png;base64,\(base64String)" 
} 

// Image extension 
extension UIImage { 

    func updateImageOrientionUpSide() -> UIImage? { 
     if self.imageOrientation == .up { 
      return self 
     } 

     UIGraphicsBeginImageContextWithOptions(self.size, false, self.scale) 
     self.draw(in: CGRect(x: 0, y: 0, width: self.size.width, height: self.size.height)) 
     if let normalizedImage:UIImage = UIGraphicsGetImageFromCurrentImageContext() { 
      UIGraphicsEndImageContext() 
      return normalizedImage 
     } 
     UIGraphicsEndImageContext() 
     return nil 
    } 
} 

使用上传这个共同的功能从任何修复上攻形象定位之前。

extension UIImage { 

    func fixImageOrientation() -> UIImage? { 


     if (self.imageOrientation == .up) { 
      return self 
     } 

     var transform: CGAffineTransform = CGAffineTransform.identity 


     if (self.imageOrientation == .left || self.imageOrientation == .leftMirrored) { 
      transform = transform.translatedBy(x: self.size.width, y: 0) 
      transform = transform.rotated(by: CGFloat(Double.pi/2.0)) 
     } else if (self.imageOrientation == .right || self.imageOrientation == .rightMirrored) { 
      transform = transform.translatedBy(x: 0, y: self.size.height); 
      transform = transform.rotated(by: CGFloat(-Double.pi/2.0)); 
     } else if (self.imageOrientation == .down || self.imageOrientation == .downMirrored) { 
      transform = transform.translatedBy(x: self.size.width, y: self.size.height) 
      transform = transform.rotated(by: CGFloat(Double.pi)) 
     } else if (self.imageOrientation == .upMirrored || self.imageOrientation == .downMirrored) { 
      transform = transform.translatedBy(x: self.size.width, y: 0) 
      transform = transform.scaledBy(x: -1, y: 1) 
     } else if (self.imageOrientation == .leftMirrored || self.imageOrientation == .rightMirrored) { 
      transform = transform.translatedBy(x: self.size.height, y: 0); 
      transform = transform.scaledBy(x: -1, y: 1); 
     } 


     if let context: CGContext = CGContext(data: nil, width: Int(self.size.width), height: Int(self.size.height), 
             bitsPerComponent: self.cgImage!.bitsPerComponent, bytesPerRow: 0, 
             space: self.cgImage!.colorSpace!, 
             bitmapInfo: self.cgImage!.bitmapInfo.rawValue) { 

      context.concatenate(transform) 

      if (self.imageOrientation == UIImageOrientation.left || 
       self.imageOrientation == UIImageOrientation.leftMirrored || 
       self.imageOrientation == UIImageOrientation.right || 
       self.imageOrientation == UIImageOrientation.rightMirrored) { 
       context.draw(self.cgImage!, in: CGRect(x: 0,y: 0,width: self.size.height,height: self.size.width)) 
      } else { 
       context.draw(self.cgImage!, in: CGRect(x: 0,y: 0,width: self.size.width,height: self.size.height)) 
      } 

      if let contextImage = context.makeImage() { 
       return UIImage(cgImage: contextImage) 
      } 

     } 

     return nil 
    } 
}