如何将用户输入的图像保存到照片库
How to save user input drawing over image to photo gallery
我的代码成功地将图像保存到照片库,但是我在该图像上绘制的内容没有保存在它上面。所以我的代码需要保存图像和用户输入的绘图。现在它只是保存图像。
var nextPage = UIButton()
var clear = UIButton()
var submitToDB = UIButton()
var myLayer = CALayer()
var path = UIBezierPath()
var startPoint = CGPoint()
var touchPoint = CGPoint()
var playName = UITextField()
var drawPlace = UIImageView()//The imageview
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
let touch = touches.first
if let point = touch?.location(in: drawPlace){
startPoint = point
}
}
override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) {
let touch = touches.first
if let point = touch?.location(in: drawPlace){
touchPoint = point
}
path.move(to: startPoint)
path.addLine(to: touchPoint)
startPoint = touchPoint
draw()
}
func draw() {
submitToDB.layer.cornerRadius = 0
drawPlace.clipsToBounds = true
drawPlace.isMultipleTouchEnabled = false
let strokeLayer = CAShapeLayer()
strokeLayer.fillColor = nil
strokeLayer.lineWidth = 5
strokeLayer.strokeColor = UIColor.blue.cgColor
strokeLayer.path = path.cgPath
drawPlace.layer.insertSublayer(strokeLayer, below: myLayer)
drawPlace.setNeedsDisplay()
let star:UIImage = UIImage(named: "bb.png")!
let newSize = CGSize(width: star.size.width, height: star.size.height )
UIGraphicsBeginImageContextWithOptions(newSize, false, star.scale)
star.draw(in: CGRect(x: newSize.width/10.6,
y: newSize.height/8,
width: newSize.width/1.2,
height: newSize.height/1.2),
blendMode:CGBlendMode.normal, alpha:1)
let newImage:UIImage = UIGraphicsGetImageFromCurrentImageContext()!
UIGraphicsEndImageContext()
drawPlace.image = newImage
}
func save() {
guard let selectedImage = drawPlace.image else {
print("Image not found!")
return
}
UIImageWriteToSavedPhotosAlbum(selectedImage, self, #selector(image(_:didFinishSavingWithError:contextInfo:)), nil)
}
我想我需要以某种方式在正在保存的图像上保存图层我只是不知道该怎么做。
您需要从 UIImageView
进行捕获,所以试试这个:
向 UIView
添加扩展以进行捕获:
extension UIView {
func screenshot() -> UIImage {
return UIGraphicsImageRenderer(size: bounds.size).image { _ in
drawHierarchy(in: CGRect(origin: .zero, size: bounds.size), afterScreenUpdates: true)
}
}
}
之后,将您的 save()
更改为:
func save() {
let image = drawPlace.screenshot()
UIImageWriteToSavedPhotosAlbum(image, self, #selector(image(_:didFinishSavingWithError:contextInfo:)), nil)
}
我的代码成功地将图像保存到照片库,但是我在该图像上绘制的内容没有保存在它上面。所以我的代码需要保存图像和用户输入的绘图。现在它只是保存图像。
var nextPage = UIButton()
var clear = UIButton()
var submitToDB = UIButton()
var myLayer = CALayer()
var path = UIBezierPath()
var startPoint = CGPoint()
var touchPoint = CGPoint()
var playName = UITextField()
var drawPlace = UIImageView()//The imageview
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
let touch = touches.first
if let point = touch?.location(in: drawPlace){
startPoint = point
}
}
override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) {
let touch = touches.first
if let point = touch?.location(in: drawPlace){
touchPoint = point
}
path.move(to: startPoint)
path.addLine(to: touchPoint)
startPoint = touchPoint
draw()
}
func draw() {
submitToDB.layer.cornerRadius = 0
drawPlace.clipsToBounds = true
drawPlace.isMultipleTouchEnabled = false
let strokeLayer = CAShapeLayer()
strokeLayer.fillColor = nil
strokeLayer.lineWidth = 5
strokeLayer.strokeColor = UIColor.blue.cgColor
strokeLayer.path = path.cgPath
drawPlace.layer.insertSublayer(strokeLayer, below: myLayer)
drawPlace.setNeedsDisplay()
let star:UIImage = UIImage(named: "bb.png")!
let newSize = CGSize(width: star.size.width, height: star.size.height )
UIGraphicsBeginImageContextWithOptions(newSize, false, star.scale)
star.draw(in: CGRect(x: newSize.width/10.6,
y: newSize.height/8,
width: newSize.width/1.2,
height: newSize.height/1.2),
blendMode:CGBlendMode.normal, alpha:1)
let newImage:UIImage = UIGraphicsGetImageFromCurrentImageContext()!
UIGraphicsEndImageContext()
drawPlace.image = newImage
}
func save() {
guard let selectedImage = drawPlace.image else {
print("Image not found!")
return
}
UIImageWriteToSavedPhotosAlbum(selectedImage, self, #selector(image(_:didFinishSavingWithError:contextInfo:)), nil)
}
我想我需要以某种方式在正在保存的图像上保存图层我只是不知道该怎么做。
您需要从 UIImageView
进行捕获,所以试试这个:
向 UIView
添加扩展以进行捕获:
extension UIView {
func screenshot() -> UIImage {
return UIGraphicsImageRenderer(size: bounds.size).image { _ in
drawHierarchy(in: CGRect(origin: .zero, size: bounds.size), afterScreenUpdates: true)
}
}
}
之后,将您的 save()
更改为:
func save() {
let image = drawPlace.screenshot()
UIImageWriteToSavedPhotosAlbum(image, self, #selector(image(_:didFinishSavingWithError:contextInfo:)), nil)
}