import UIKit //MARK: - 获取 view的快照视图(返回 UIImageView) public func snapshotFromView(inputView: UIView) -> UIView{ UIGraphicsBeginImageContextWithOptions(inputView.bounds.size, false, 0) inputView.layer.renderInContext(UIGraphicsGetCurrentContext()!) let image = UIGraphicsGetImageFromCurrentImageContext() UIGraphicsEndImageContext() let snapshotView = UIImageView(image: image) snapshotView.layer.masksToBounds = false snapshotView.layer.cornerRadius = 0 snapshotView.layer.shadowOffset = CGSizeMake(-5, 0) snapshotView.layer.shadowRadius = 5 snapshotView.layer.shadowOpacity = 0.4 return snapshotView } //MARK: - 生成指定尺寸的纯色图片 public func imageWithColor(color: UIColor!, size: CGSize) -> UIImage{ var size = size if CGSizeEqualToSize(size, CGSizeZero){ size = CGSizeMake(1, 1) } let rect = CGRectMake(0, 0, size.width, size.height) UIGraphicsBeginImageContext(rect.size) let context = UIGraphicsGetCurrentContext() CGContextSetFillColorWithColor(context, color.CGColor) CGContextFillRect(context, rect) let image = UIGraphicsGetImageFromCurrentImageContext() UIGraphicsEndImageContext() return image } //MARK: - 修改图片尺寸 public func imageScaleToSize(image: UIImage, size: CGSize) -> UIImage{ // 创建一个bitmap的context // 并把它设置成为当前正在使用的context // Determine whether the screen is retina if UIScreen.mainScreen().scale == 2.0{ UIGraphicsBeginImageContextWithOptions(size, false, 2.0) }else{ UIGraphicsBeginImageContext(size) } // 绘制改变大小的图片 image.drawInRect(CGRectMake(0, 0, size.width, size.height)) // 从当前context中创建一个改变大小后的图片 let scaledImage = UIGraphicsGetImageFromCurrentImageContext() // 使当前的context出堆栈 UIGraphicsEndImageContext() // 返回新的改变大小后的图片 return scaledImage } public func ciimageScaleToSize(ciimage: CIImage, size: CGSize) -> UIImage{ let cgImage = CIContext(options: nil).createCGImage(ciimage, fromRect: ciimage.extent) if UIScreen.mainScreen().scale == 2.0{ UIGraphicsBeginImageContextWithOptions(size, false, 2.0) }else{ UIGraphicsBeginImageContext(size) } let context = UIGraphicsGetCurrentContext() CGContextSetInterpolationQuality(context, CGInterpolationQuality.None) CGContextScaleCTM(context, 1.0, -1.0) CGContextDrawImage(context, CGContextGetClipBoundingBox(context), cgImage) let image = UIGraphicsGetImageFromCurrentImageContext() UIGraphicsEndImageContext() return image } //MARK: - 调整图片方向向上 public func imageOrientationToUp(image: UIImage) -> UIImage{ let imageRef = image.CGImage let imageSize = CGSizeMake(CGFloat(CGImageGetWidth(imageRef)), CGFloat(CGImageGetHeight(imageRef))) var newSzie = imageSize var transform = CGAffineTransformIdentity let orientation = image.imageOrientation switch orientation{ case .Up: transform = CGAffineTransformIdentity case .UpMirrored: transform = CGAffineTransformMakeTranslation(imageSize.width, 0) transform = CGAffineTransformScale(transform, -1, 1) case .Down: transform = CGAffineTransformMakeTranslation(imageSize.width, imageSize.height) transform = CGAffineTransformRotate(transform, CGFloat(M_PI)) case .DownMirrored: transform = CGAffineTransformMakeTranslation(0.0, imageSize.height) transform = CGAffineTransformScale(transform, 1.0, -1.0) case .Left: (newSzie.width, newSzie.height) = (newSzie.height, newSzie.width) transform = CGAffineTransformMakeTranslation(0.0, imageSize.width) transform = CGAffineTransformRotate(transform, CGFloat(3.0 * M_PI / 2.0)) case .LeftMirrored: (newSzie.width, newSzie.height) = (newSzie.height, newSzie.width) transform = CGAffineTransformMakeTranslation(imageSize.height, imageSize.width) transform = CGAffineTransformScale(transform, -1.0, 1.0) transform = CGAffineTransformRotate(transform, CGFloat(3.0 * M_PI / 2.0)) case .Right: (newSzie.width, newSzie.height) = (newSzie.height, newSzie.width) transform = CGAffineTransformMakeTranslation(imageSize.height, 0.0) transform = CGAffineTransformRotate(transform, CGFloat(M_PI / 2.0)) case .RightMirrored: (newSzie.width, newSzie.height) = (newSzie.height, newSzie.width) transform = CGAffineTransformMakeScale(-1.0, 1.0) transform = CGAffineTransformRotate(transform, CGFloat(M_PI / 2.0)) } UIGraphicsBeginImageContext(newSzie) let context = UIGraphicsGetCurrentContext() if orientation == UIImageOrientation.Right || orientation == UIImageOrientation.Left{ CGContextScaleCTM(context, -1, 1) CGContextTranslateCTM(context, -imageSize.height, 0) }else{ CGContextScaleCTM(context, 1, -1) CGContextTranslateCTM(context, 0, -imageSize.height) } CGContextConcatCTM(context, transform) CGContextDrawImage(context, CGRectMake(0, 0, imageSize.width, imageSize.height), imageRef) let imageCopy = UIGraphicsGetImageFromCurrentImageContext() UIGraphicsEndImageContext() return imageCopy } //MARK: - 压缩图片大小 public func imageCompress(originalImage: UIImage) -> UIImage{ guard let imageData = UIImageJPEGRepresentation(originalImage, 0.5) else{ return originalImage } let compressImage = UIImage(data: imageData)! return compressImage }