iOS 图片裁剪方法
更多图片处理方法见图片组件 BBWebImage
iOS 图片裁剪方法
通过 CGImage 或 CIImage 裁剪
UIImage 有 cgImage 和 ciImage 属性,分别可以获得 CGImage 和 CIImage 对象。CGImage 和 CIImage 对象都有裁剪方法,传入 CGRect 的参数表示要裁剪的区域(采用 UIImage 的坐标)。
static func cropImage(_ image: UIImage, withRect originalRect: CGRect) -> UIImage? {
if originalRect.width <= 0 || originalRect.height <= 0 { return nil }
var rect = originalRect
if image.scale != 1 {
rect.origin.x *= image.scale
rect.origin.y *= image.scale
rect.size.width *= image.scale
rect.size.height *= image.scale
}
if let croppedCgImage = image.cgImage?.cropping(to: rect) {
return UIImage(cgImage: croppedCgImage)
} else if let ciImage = image.ciImage {
let croppedCiImage = ciImage.cropped(to: rect)
return UIImage(ciImage: croppedCiImage)
}
return nil
}
对 CGImage 来说,传入的 CGRect 参数如果完全不在原图区域内,cropping(to:) 方法返回空;如果有部分在原图区域内,cropping(to:) 方法返回在原图区域部分的 CGImage。
通过位图(Bitmap)裁剪
通过位图重新绘制图片,也可以获得裁剪之后的图片。
static func cropImage(_ image: UIImage, withRect rect: CGRect) -> UIImage? {
if rect.width <= 0 || rect.height <= 0 { return nil }
UIGraphicsBeginImageContext(rect.size)
guard let context = UIGraphicsGetCurrentContext() else { return nil }
context.translateBy(x: -rect.minX, y: -rect.minY)
image.draw(at: .zero)
let croppedImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return croppedImage
}
位图大小为需要裁剪区域 CGRect 的大小 size。用原图绘制,为了使裁剪区域正好在位图区域,需要进行坐标位移 context.translateBy(x: -rect.minX, y: -rect.minY)。
如果传入的 CGRect 参数有部分或全部不在原图区域内,则超出原图区域的部分也会被绘制(绘制为透明),这与 CGImage 的裁剪方法不同。
简单试了几次,发现通过 CGImage 裁剪的 CPU 占用率比通过位图裁剪要低。仅从性能角度考虑,推荐使用前者。如果希望裁剪出来的图片不超出原图区域,也推荐使用前者。如果需要绘制其他的内容(比如其他形状、颜色,或绘制的内容超出原图区域),则要使用后者。
转载请注明出处:http://www.cnblogs.com/silence-cnblogs/p/6490037.html
iOS 图片裁剪方法的更多相关文章
- iOS 图片裁剪 + 旋转
iOS 图片裁剪 + 旋转 之前分别介绍了图片裁剪和图片旋转方法 <iOS 图片裁剪方法> 地址:http://www.cnblogs.com/silence-cnblogs/p/6490 ...
- iOS 图片压缩方法
iOS 图片压缩方法 两种图片压缩方法 两种压缩图片的方法:压缩图片质量(Quality),压缩图片尺寸(Size). 压缩图片质量 NSData *data = UIImageJPEGReprese ...
- iOS 图片旋转方法
iOS 图片旋转方法 通过 CGImage 或 CIImage 旋转特定角度 UIImage可通过CGImage或CIImage初始化,初始化方法分别为init(cgImage: CGImage, s ...
- iOS 图片裁剪与修改
最近做的项目中需要上传头像,发表内容的时候也要涉及到图片上传,我直接用的原图上传,但是由于公司网络差,原图太大,老是加载好久好久,所以需要把原图裁剪或者修改分辨率之后再上传,找了好久,做了很多尝试才解 ...
- ios 图片拉伸方法
前提:要注意图片的size和展示的图片view的size的大小. 假如图片高度50,展示图片view的高度30,拉伸会变成剪切. 如果图片尺寸不对,可以用mac自带的图片编辑器修改大小: 双击打开图 ...
- [转]常用iOS图片处理方法
自:http://blog.sina.com.cn/s/blog_8988732e0100xcx1.html ========== (one) UIImage 图像 等比例缩放=========== ...
- iOS常见用户头像的圆形图片裁剪常见的几种方法
在开发中,基本上APP的用户头像的处理都需要把用户所上传的方形图片,处理为圆形图片.在这里就总结三种常见的处理圆形图片的方法. 1.使用位图上下文 2.使用UIView的layer进行处理 3.使用r ...
- react-native多图选择、图片裁剪(支持ad/ios图片个数控制)
扯淡: 目前关于rn比较知名并且封装好的图片选择控件很多,不过能同时支持多图片上传,个数控制兼容iOS/Ad的却寥寥无几,而今天介绍的这款框架可以实现:图片裁剪.最大图片个数限制.拍照.本地相册等功能 ...
- iOS高效裁剪图片圆角算法
项目有个需求:裁剪图片,针对头像,下面是要求: 大家可以看到这张图片的圆角已经去除,下面说说我在项目利用了两种方式实现此裁剪以及查看技术文档发现更高效裁剪方式,下面一一讲解:看下来大约需要15-20分 ...
随机推荐
- css所有属性参考
学习地址:https://developer.mozilla.org/zh-CN/docs/Web/CSS/Reference
- 如何使用Grunt(好文)
Grunt 是什么? Grunt 基于Node.js之上,是一个以任务处理为基础的命令行工具,可以减少优化开发版本为发布版本所需的人力和时间,从而加速开发流程.它的工作原理是把这 些工作整合为不同的任 ...
- PHP正则表达式验证是否含有中文
判断是否 有中文. if (preg_match("/[\x7f-\xff]/", $string)) { echo "true"; }else{ echo & ...
- Xcache和memcache的比较
Xcache 和 memcached 是两个不同层面的缓存,不存在可比性. Xcache 是 php 底层的缓存,它将PHP程式编译成字节码(byte code),再透过服务器上安装对应的程式来执行P ...
- PHP实现验证码图片
<?php header("Content-type: image/png"); session_start(); $authnum = ''; $str = 'abcdef ...
- [转]编写高性能的Lua代码
昨天晚上闲来无事,看室友在电脑上挂机玩游戏,用的一个辅助脚本,以为是lua写的脚本在跑,实际调查发现是按键精灵的脚本. 于是在网上找相关Lua开发游戏脚本的案例,看到一个人的博客,内容很不错,学到了很 ...
- Android学习笔记总结
第一步: Android(1) - 在 Windows 下搭建 Android 开发环境,以及 Hello World 程序 搭建 Android 的开发环境,以及写一个简单的示例程序 · 在 Win ...
- PHP安全编程
转自:http://www.nowamagic.net/librarys/veda/detail/2076 1.关闭register_globals,以提高安全性 2.在部署环境,不要让不相关的人 ...
- HMX-Server C++ 分步式服务器大版本更新了(有源码)
原文地址:http://www.cnblogs.com/hellohuang/p/6294763.html # HMX-ServerHMX-Server分步式服务器框架,主要分为网关.登录.世界.场景 ...
- 我的Linux系统的VIMRC
" llvm CODING GUIDELines conformance for VIM" $Revision$"" Maintainer: The LLVM ...