我试图使用UIPanGesture,UIRotateGesture和UIPinchGesture来实现编辑图像。编辑完成后,我希望保存已编辑的UIImage。如何使用平移,旋转和捏手势编辑后保存UIImage
我完成了编辑图像功能。
但我不知道如何保存完全像本机iOS相机应用程序一样完美。
Pan手势工作正常。
我的问题是旋转和缩放。
如何设置UIImage的中心定位点?
当我从转换信息保存的UIImage然后UIImage的结果看起来是不同的,因为旋转和缩放,那么它总是采用基于(0,0)
@IBAction func showEditedImage(_ sender: Any) {
let image = preview.image!
var drawingRect : CGRect = CGRect.zero
drawingRect.size = preview.frame.size
let scale = transformedImg.frame.width/(preview.image?.size.width)!
let height = (preview.image?.size.height)! * scale
UIGraphicsBeginImageContextWithOptions(CGSize(width: transformedImg.frame.width, height: height), false, 0)
let context = UIGraphicsGetCurrentContext()
context!.concatenate(preview.transform)
image.draw(in: CGRect(x: 0, y: 0, width: transformedImg.frame.width, height: height))
resultsImg = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext();
transformedImg.image = resultsImg
}
这里是我的所有代码。
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var preview: UIImageView!
@IBOutlet weak var frame: UIView!
@IBOutlet weak var transformedImg: UIImageView!
//save edited image
var resultsImg : UIImage!
override func viewDidLoad() {
resultsImg = UIImage()
super.viewDidLoad()
}
@IBAction func showEditedImage(_ sender: Any) {
let image = preview.image!
var drawingRect : CGRect = CGRect.zero
drawingRect.size = preview.frame.size
let scale = transformedImg.frame.width/(preview.image?.size.width)!
let height = (preview.image?.size.height)! * scale
UIGraphicsBeginImageContextWithOptions(CGSize(width: transformedImg.frame.width, height: height), false, 0)
let context = UIGraphicsGetCurrentContext()
context!.concatenate(preview.transform)
image.draw(in: CGRect(x: 0, y: 0, width: transformedImg.frame.width, height: height))
resultsImg = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext();
transformedImg.image = resultsImg
}
@IBAction func pinchaction(_ sender: UIPinchGestureRecognizer) {
preview.transform = preview.transform.scaledBy(x: sender.scale, y: sender.scale)
sender.scale = 1
}
@IBAction func rotateaction(_ sender: UIRotationGestureRecognizer) {
let rotate = sender.rotation
preview.transform = preview.transform.rotated(by: rotate)
sender.rotation = 0
}
@IBAction func panaction(_ sender: UIPanGestureRecognizer) {
let points = sender.translation(in: self.frame)
preview.transform = preview.transform.translatedBy(x: points.x, y: points.y)
let translatedCenter = CGPoint(x:self.frame.center.x + points.x, y:self.frame.center.y + points.y)
sender.setTranslation(CGPoint.zero, in: self.frame)
}
}
环境:XCode9 +斯威夫特4
更新2017年10月14日
我解决我的问题
@IBAction func showEditedImage(_ sender: Any) {
let image = preview.image!
var drawingRect : CGRect = CGRect.zero
drawingRect.size = preview.frame.size
let scale = transformedImg.frame.width/(preview.image?.size.width)!
let height = (preview.image?.size.height)! * scale
UIGraphicsBeginImageContextWithOptions(CGSize(width: transformedImg.frame.width, height: height), false, 0)
let context = UIGraphicsGetCurrentContext()
//Set Center Position before Scale, Rotate Image
context?.translateBy(x: transformedImg.frame.width/2, y: height/2)
//Applied Translate, Scale, Rotate
context!.concatenate(preview.transform)
context?.translateBy(x: -(transformedImg.frame.width/2), y: -(height/2))
image.draw(in: CGRect(x: 0, y: 0, width: transformedImg.frame.width, height: height))
resultsImg = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext();
transformedImg.image = resultsImg
}
感谢你的代码帮助了我很多。 :) –