2017-07-26 1 views
3

Dans mon application, j'ai une fonctionnalité pour prendre une photo de camera et le télécharger sur le serveur. Mon problème est que lorsque je reçois une réponse du serveur, cette image tourne à 90 degrés sur le côté gauche. Voici mon code essayé:iOS Swift 3 Image pivoté 90 degrés gauche

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 contient base64sting de l'image capturée.

+0

comment l'image est enregistrée dans le serveur, son stocké à 90 degrés ou conservé à –

+0

normal quand u prendre téléphone à huis clos, cette image ont la propriété d'orientation lui-même. donc, vérifiez cela et la rotation selon cette orientation et envoyez au serveur. beaucoup de code disponible en net ou vous pouvez écrire vous-même. – Ammaiappan

+0

Vous pouvez consulter mes années ici https://stackoverflow.com/questions/45157225/want-fixed-orientation-but-the-uiimage-autoratate/45157920#45157920 – luckyShubhra

Répondre

6

Essayez cette (vous réinitialiser l'orientation de l'image) avant de télécharger sur le serveur

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 
    } 
} 
3

Utilisez cette fonction commune pour fixer l'orientation de l'image à l'envers de tout.

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