| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107 |
- //
- // UIImage+JChat.swift
- // JChat
- //
- // Created by deng on 2017/6/20.
- // Copyright © 2017年 HXHG. All rights reserved.
- //
- import UIKit
- extension UIImage {
-
- func fixOrientation() -> UIImage {
- var image = self
- if self.imageOrientation == .up {
- return image
- }
- var transform = CGAffineTransform.identity
- switch self.imageOrientation {
- case .down, .downMirrored:
- transform = transform.translatedBy(x: image.size.width, y: image.size.height)
- transform = transform.rotated(by: .pi / 2)
- case .left, .leftMirrored:
- transform = transform.translatedBy(x: image.size.width, y: 0)
- transform = transform.rotated(by: .pi / 2)
- case .right, .rightMirrored :
- transform = transform.translatedBy(x: 0, y: image.size.height)
- transform = transform.rotated(by: -.pi / 2)
- default:
- break
- }
-
- switch self.imageOrientation {
- case .upMirrored, .downMirrored:
- transform = transform.translatedBy(x: image.size.width,y: 0)
- transform = transform.scaledBy(x: -1, y: 1)
- case .rightMirrored, .leftMirrored:
- transform = transform.translatedBy(x: image.size.height,y: 0)
- transform = transform.scaledBy(x: -1, y: 1)
- default:
- break
- }
-
- let ctx = CGContext(data: nil , width: Int(image.size.width), height: Int(image.size.height), bitsPerComponent: image.cgImage!.bitsPerComponent, bytesPerRow: 0, space: image.cgImage!.colorSpace!, bitmapInfo: image.cgImage!.bitmapInfo.rawValue)
-
- ctx!.concatenate(transform)
-
- switch image.imageOrientation {
- case .left, .leftMirrored, .right, .rightMirrored:
- ctx?.draw(image.cgImage!, in: CGRect(x: 0, y: 0, width: image.size.height, height: image.size.width))
- default:
- ctx?.draw(image.cgImage!, in: CGRect(x: 0, y: 0, width: image.size.width, height: image.size.height))
- }
-
- let cgImage = ctx!.makeImage()
- image = UIImage(cgImage: cgImage!)
- return image
- }
- static func createImage(color: UIColor, size: CGSize) -> UIImage? {
- var rect = CGRect(origin: CGPoint.zero, size: size)
- UIGraphicsBeginImageContext(size)
- defer {
- UIGraphicsEndImageContext()
- }
- let context = UIGraphicsGetCurrentContext()
- context?.setFillColor(color.cgColor)
- context?.fill(rect)
- let image = UIGraphicsGetImageFromCurrentImageContext()
- return image
- }
-
- static func getMyAvator() -> UIImage? {
- if let data = UserDefaults.standard.object(forKey: kLastUserAvator) as? Data {
- let avatorData = NSKeyedUnarchiver.unarchiveObject(with: data) as! Data
- return UIImage(data: avatorData)
- }
- return nil
- }
-
- func resizeImage(_ newSize: CGSize) -> UIImage {
- UIGraphicsBeginImageContextWithOptions(newSize, false, UIScreen.main.scale)
- self.draw(in: CGRect(x: 0, y: 0, width: newSize.width, height: newSize.height))
- let newImage = UIGraphicsGetImageFromCurrentImageContext()
- UIGraphicsEndImageContext()
- return newImage!
- }
-
- // iOS 9 以后,ImageView.image 设置圆角并不会触发离屏渲染了
- // 可以异步绘制,再主线刷新
- func imageCornerRadius(_ radius: CGFloat) -> UIImage? {
- let rect = CGRect(x: 0, y: 0, width: size.width, height: size.height)
- UIGraphicsBeginImageContextWithOptions(self.size, false, UIScreen.main.scale);
- guard let ctx = UIGraphicsGetCurrentContext() else {
- return nil
- }
- ctx.addPath(UIBezierPath(roundedRect: rect, cornerRadius: radius).cgPath)
- ctx.clip()
- draw(in: rect)
- let image = UIGraphicsGetImageFromCurrentImageContext()
- UIGraphicsEndImageContext()
- return image
- }
- }
|