美文网首页
iOS开发笔记-115:swift5,拍照和相册里选取的orig

iOS开发笔记-115:swift5,拍照和相册里选取的orig

作者: 原味蛋炒饭 | 来源:发表于2021-11-15 18:14 被阅读0次

    在拍照和从相册中获取图片,方式是originalImage的时候,图片会逆时针旋转90度。这个时候需要在上传前把图片恢复成正常。

    代码:
    image = image.fixOrientation()
    
    Categorys:
    
    import UIKit
     
    extension UIImage {
        // 修复图片旋转
        func fixOrientation() -> UIImage {
            if self.imageOrientation == .up {
                return self
            }
             
            var transform = CGAffineTransform.identity
             
            switch self.imageOrientation {
            case .down, .downMirrored:
                transform = transform.translatedBy(x: self.size.width, y: self.size.height)
                transform = transform.rotated(by: .pi)
                break
                 
            case .left, .leftMirrored:
                transform = transform.translatedBy(x: self.size.width, y: 0)
                transform = transform.rotated(by: .pi / 2)
                break
                 
            case .right, .rightMirrored:
                transform = transform.translatedBy(x: 0, y: self.size.height)
                transform = transform.rotated(by: -.pi / 2)
                break
                 
            default:
                break
            }
             
            switch self.imageOrientation {
            case .upMirrored, .downMirrored:
                transform = transform.translatedBy(x: self.size.width, y: 0)
                transform = transform.scaledBy(x: -1, y: 1)
                break
                 
            case .leftMirrored, .rightMirrored:
                transform = transform.translatedBy(x: self.size.height, y: 0);
                transform = transform.scaledBy(x: -1, y: 1)
                break
                 
            default:
                break
            }
             
            let ctx = 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)
            ctx?.concatenate(transform)
             
            switch self.imageOrientation {
            case .left, .leftMirrored, .right, .rightMirrored:
                ctx?.draw(self.cgImage!, in: CGRect(x: CGFloat(0), y: CGFloat(0), width: CGFloat(size.height), height: CGFloat(size.width)))
                break
                 
            default:
                ctx?.draw(self.cgImage!, in: CGRect(x: CGFloat(0), y: CGFloat(0), width: CGFloat(size.width), height: CGFloat(size.height)))
                break
            }
             
            let cgimg: CGImage = (ctx?.makeImage())!
            let img = UIImage(cgImage: cgimg)
             
            return img
        }
    }
    
    
    

    相关文章

      网友评论

          本文标题:iOS开发笔记-115:swift5,拍照和相册里选取的orig

          本文链接:https://www.haomeiwen.com/subject/eavqtrtx.html