iOS Swift 3图像向左旋转90度

Kav*_*gam 7 uiimagepickercontroller uiimage ios swift swift3

在我的应用程序中,我有一个功能,可以拍摄照片camera并将其上传到服务器.我的问题是,当我从服务器得到响应时,图像旋转到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)"
}
Run Code Online (Sandbox Code Playgroud)

AttachedDocumentURL 包含捕获图像的base64sting.

Kru*_*nal 11

在服务器上传之前,请尝试此操作(重置图像方向)

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
    }
}
Run Code Online (Sandbox Code Playgroud)


Kru*_*nal 5

使用此通用功能可以修复任何方向的上方图像方向。

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
    }
}
Run Code Online (Sandbox Code Playgroud)