欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

iOS 图片裁剪 + 旋转

程序员文章站 2024-02-14 16:48:04
之前分别介绍了图片裁剪和图片旋转方法 《ios 图片裁剪方法》 地址: 《ios 图片旋转方法》 地址: 裁剪和旋转是可以连在一起执行的。先定位到需要裁剪的区域,...

之前分别介绍了图片裁剪和图片旋转方法

《ios 图片裁剪方法》

地址:

《ios 图片旋转方法》

地址:

裁剪和旋转是可以连在一起执行的。先定位到需要裁剪的区域,然后以此区域的中心为轴,旋转一定角度,最后获取旋转后此区域内的图片。可以用位图(bitmap)绘制实现

static func cropimage(_ image: uiimage, withrect rect: cgrect, angle: double) -> uiimage? {
 // creates a bitmap-based graphics context with rect size
 // and makes it the current context
 uigraphicsbeginimagecontext(rect.size)
 // get current graphics context
 guard let context = uigraphicsgetcurrentcontext() else { return nil }
 // move context origin to rect center
 context.translateby(x: rect.width / 2, y: rect.height / 2)
 // convert angle to radian and rotate
 context.rotate(by: cgfloat(angle / 180 * m_pi))
 // move context origin back (-rect.width / 2, -rect.height / 2)
 // and move opposite direction of rect origin (-rect.minx, -rect.miny)
 context.translateby(x: -rect.width / 2 - rect.minx, y: -rect.height / 2 - rect.miny)
 // draw image at context origin
 image.draw(at: .zero)
 // get image
 let finalimage = uigraphicsgetimagefromcurrentimagecontext()
 // removes the current bitmap-based graphics context from the top of the stack
 uigraphicsendimagecontext()
 // return image
 return finalimage
}

rect为需要裁剪的区域,采用原图的坐标系。angle为需要旋转的角度,单位是度,正值表示图片顺时针方向旋转。具体实现的讲解见注释。

最后的图片可能超出原图区域,超出部分为透明。

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持!