iOS 像素图转高清大图

  • 比较
  • 最近邻插值
  • CoreGraphics画矩形

一张小的像素图转大图时会变得模糊

有两种方式可以使生成的大图更清晰

  1. 用最近邻插值算法生成大图
  2. 按其宽高和像素行列去取颜色,CoreGraphics 用颜色数组画多个矩形去绘制大图

比较

随机生成 20 张原图 64px * 64px(iOS 由颜色数组生成像素图),用上诉两种方式生成大图,比对生成速度和内存峰值:内存用量几乎完全一致,而速度上,放大倍数小时最近邻插值更快,放大倍数大时 CoreGraphics 更快。

因为最近邻插值算法的原理是找到原图像中对应的点后,找到离它最近的一个整数坐标的像素值作为目标图像对应位置处的像素值,当放大倍数越大,处理次数越多

而 CoreGraphics 画矩形,无论放大倍数多少,处理次数是一样的。

本文给出两种方式的具体代码,读者可自行传入倍数,测试生成时间

最近邻插值

CGInterpolationQuality 插值质量

kCGInterpolationDefault 默认

kCGInterpolationNone 无插值(最近邻插值

kCGInterpolationLow 插值质量低,图像渲染速度快

kCGInterpolationMedium 插值质量中等,渲染速度中等

kCGInterpolationHigh 插值质量高,渲染速度较慢

extension UIImage {func resize(to size: CGSize, interpolationQuality: CGInterpolationQuality = .none, isOpaque: Bool = false) -> UIImage? {let format = imageRendererFormatformat.opaque = isOpaquereturn UIGraphicsImageRenderer(size: size, format: format).image { context incontext.cgContext.interpolationQuality = interpolationQualitydraw(in: CGRect(origin: .zero, size: size))}}
}

CoreGraphics画矩形

  1. 原图转 UIColor 数组,注意行列非图片本身宽高,而是像素图行列数(一格可能有很多像素)
  2. 用 UIColor 数组画大图,每个 UIColor 对应一个矩形,代码在iOS 由颜色数组生成像素图,其中 size 是想要转出来的图片大小,
extension UIImage {/// 从 UIImage 转 colors/// - Parameters:///   - image: 图///   - column: 列(宽///   - row: 行(高static func colors(with image: UIImage, column: Int, row: Int) -> [UIColor]? {guard let cgImage = image.cgImage else { return nil}let imageRef = cgImagelet width = imageRef.widthlet height = imageRef.heightlet colorSpace = CGColorSpaceCreateDeviceRGB()let bytesPerPixel = 4let bytesPerRow = bytesPerPixel * widthlet bitsPerComponent = 8let bitmapInfo: UInt32 = CGImageAlphaInfo.premultipliedLast.rawValue | CGBitmapInfo.byteOrder32Big.rawValueguard let context = CGContext(data: nil, width: width, height: height,bitsPerComponent: bitsPerComponent, bytesPerRow: bytesPerRow,space: colorSpace, bitmapInfo: bitmapInfo),let ptr = context.data?.assumingMemoryBound(to: UInt8.self) else {return nil}context.draw(imageRef, in: CGRect(x: 0, y: 0, width: width, height: height))var colors = [UIColor]()let offset = width / column / 2let perPixel = width / columnfor y in 0..<row {for x in 0..<column {let i = (bytesPerRow * (y * perPixel + offset)) + (x * perPixel + offset) * bytesPerPixellet alpha = CGFloat(ptr[i + 3]) / 255.0let red = (CGFloat(ptr[i]) / alpha) / 255.0let green = (CGFloat(ptr[i + 1]) / alpha) / 255.0let blue = (CGFloat(ptr[i + 2]) / alpha) / 255.0colors.append(UIColor(red: red, green: green, blue: blue, alpha: alpha))}}return colors}
}

iOS 像素图转高清大图相关推荐

  1. AsyncLoadLocalImage ios 加载本地高清大图

    如果你的iOS项目中需要加载项目中或者沙盒中的多张高清大图时,希望这个框架能助你一臂之力. If your iOS project needs to be loaded multi high qual ...

  2. ios 加载大量图片崩溃_加载高清大图崩溃问题

    SDWebImage加载高清大图崩溃问题: 经验证没测试出来,在网上查找根源应该是在iOS7上有问题,特此记录一下 第一种:老版本SDWebImage_v4.2.0 更改源码 这里面对图片的处理是直接 ...

  3. 【高清大图下载】机器学习从入门到精通思维导图

    好久不见!我们的github超赞分享环节又来啦 这是一家德国软件公司 AMAI GmbH 近期发布的 GitHub 项目--AI 专家路线图(AI-Expert-Roadmap). 该路线涵盖了 AI ...

  4. html 图片点击查看大图_【神游千年,大美敦煌】北魏-260窟【高清大图】

    [神游千年,大美敦煌]北魏-260窟[高清大图] --------------------------------------------------------------------------- ...

  5. 人工智能 ppt_【138期】厉害了!人工智能高清大图+PPT模板全集系列!

    工欲善其事必先利其器!! 今天我们为你精选了 人工智能高清大图+PPT模板 大小:879.63MB 提供方式:百度网盘 资源获取方式: 私信我想要获取的资源的所在文章期数 如:想要获取第 1 期资源则 ...

  6. 爬虫案例:利用python爬虫关键词批量下载高清大图

    环境: python3+pycharm+requests+re+BeatifulSoup+json 这个确实也属实有一些勉强,不少童鞋私信问我有木有 下载大图 的源码,我说可能会有,现在分享给大家. ...

  7. 史上最佳GAN被超越!生成人脸动物高清大图真假难辨,DeepMind发布二代VQ-VAE

    栗子 安妮 发自 凹非寺 量子位 出品 | 公众号 QbitAI 不得了,以生成逼真假照片出名.被称作"史上最佳GAN"的BigGAN,被"本家"踢馆了. 挑战 ...

  8. 这些假脸实在太逼真了!英伟达造出新一代GAN,生成壁纸级高清大图毫无破绽...

    栗子 晓查 发自 凹非寺  量子位 报道 | 公众号 QbitAI 不敢相信,上面这些人脸,全都是假的. 是英伟达的AI生成的. 借用风格迁移的思路,团队为GAN创造了一种新的生成器. 连GAN之父G ...

  9. pulse 去马赛克软件_细致到毛孔头发 神还原的高清大图!AI去马赛克新算法

    AI人工智能技术近年来大热,尤其是在图像识别领域,大家很期待的一个功能就是AI去马赛克.美国杜克大学的研究人员日前发明了一种新的PULSE算法,它可以将低分辨图片变成高清图片,细致到毛孔.头发都能神还 ...

最新文章

  1. 【FFmpeg】警告:[mpegts] H.264 bitstream error, startcode missing, size 0
  2. hdu 5077 NAND(打表)2014 Asia regional 鞍山站 H题
  3. 请详细描述一下线程从创建到死亡的几种状态都有哪些?
  4. python下载模块命令_python kafka模块操作命令集合
  5. 五十五、Java单元测试类Junit
  6. Android 8.0 targetsdkversion升级到26填坑
  7. hadoop伪分布式配置修改配置文件的时候无法保存(没有权限保存)
  8. python连接不上数据库_pycharm连接mysql数据库连接不上
  9. win10 python 调用模块_python常识系列14--gt;python通过jpype模块调用jar包
  10. 求出千位数上的数加百位数上的数等于十位数上的数加个位数上的数的个数cnt,再把所有满足条件的四位数依次存入数组b中,然后对数组b中的四位数按从大到小的顺序进行排序。
  11. Excel与DataGridView的操作示例
  12. 闻泰通讯手机软件测试笔试内容,中科方德软件测试面试笔试经验
  13. verilog之门级相关知识
  14. 大数据对企业竞争的作用
  15. 我去,这么简单的条件表达式竟然也有这么多坑
  16. Java堆栈的简单图示
  17. 计算机组成原理第五版第四章课后答案,计算机组成原理第四章课后习题及答案_唐朔飞(完整版).docx...
  18. zkonline java_U.ARE.U4000B指纹仪,ZKOnline SDK,java服务器端指纹特征码验证--转载
  19. c2c电子商务php源码,c2c电子商务网站管理系统
  20. 仿联想商城laravel实战---2、后端页面搭建(验证码如何在页面中使用)

热门文章

  1. 2018.09.26朴素贝叶斯算法研究日志
  2. Python pip自动管理脚本
  3. 飞信2010分析 – SSI登录
  4. 当我们说“嘿,siri”时,会发生什么?
  5. K-means聚类分析
  6. proteus7【硬件课程设计】
  7. git push失败,报错fatal: does not appear to a git repository Could not read from remote repository
  8. GROUP Function
  9. 大学生IT博客大赛最技术50强与最生活10强文章
  10. android 选择联系人右侧首字母显示