zoukankan      html  css  js  c++  java
  • Swift开发中常用的一些图片处理方法

    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
    }
    

      

  • 相关阅读:
    【BZOJ】2157: 旅游
    ValidateUtil常用验证工具类,如手机、密码、邮箱等
    Java时间格式转换大全
    springboot 使用redis
    java 判断Map集合中包含指定的键名,则返回true,否则返回false。
    Springboot 项目中引入WebSocket后,单元测试出现错误
    springboot 项目中在普通类中调用dao层的mapper 出现空指针异常
    Springboot 使用 webSocket
    微信小程序需求IIS服务器配置https关于SSL,TLS的综合解决方案
    Spring Boot使用阿里云证书启用HTTPS
  • 原文地址:https://www.cnblogs.com/FranZhou/p/5066510.html
Copyright © 2011-2022 走看看