现在我有两个图像视图。按钮所要做的就是将照片和红色框保存在蓝色框上,并将image2保存在蓝色框中,将image1保存在红色框中。我希望将红色框保存在蓝色框右下角的蓝色框内。就像您在电视上看到的三分之一一样]]
导入UIKit
class ViewController: UIViewController {
var image1 = UIImage(named: "f.jpg")
var image2 = UIImage(named: "l.jpg")
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
}
func saveImage(image1:UIImage, image2:UIImage) -> UIImage {
let size1 = image1.size
let size2 = image2.size
let origin = CGPoint(x: size1.width-size2.width, y: size1.height - size2.height)
UIGraphicsBeginImageContextWithOptions(size2, false, 0.0)
image1.draw(in: CGRect(origin: CGPoint.zero, size: size1))
image2.draw(in: CGRect(origin: origin, size: size2))
let newImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return newImage!
}
@IBAction func d(_ sender: Any) {
UIImageWriteToSavedPhotosAlbum(saveImage(image1:image1!, image2:image2!), self, #selector(image(_:didFinishSavingWithError:contextInfo:)), nil)
}
func image(_ image: UIImage, didFinishSavingWithError error: Error?, contextInfo: UnsafeRawPointer) {
if let error = error {
// we got back an error!
let ac = UIAlertController(title: "Save error", message: error.localizedDescription, preferredStyle: .alert)
ac.addAction(UIAlertAction(title: "OK", style: .default))
present(ac, animated: true)
} else {
let ac = UIAlertController(title: "Saved!", message: "Your altered image has been saved to your photos.", preferredStyle: .alert)
ac.addAction(UIAlertAction(title: "OK", style: .default))
present(ac, animated: true)
}
}}
最佳答案
saveImage函数中的代码应该可以工作-(假定,即image1大于image2),但是,如果image1和image2的大小相同,则您只会看到第二个图像,因为原点将变为(0,0)。因此,换句话说,如果image1和image2均为300x300,则image2会覆盖image1。
IBAction方法似乎已正确连接,我相信您缺少的是一些用于调整第二个图像大小的逻辑。使用下面的代码来指导您,数学可能会根据您要查找的image1与image2的比率而变化。
func cropImageIntoQuarterSquare(image: UIImage) -> UIImage? {
let originalImageSize: CGSize = image.size
let smallImageSize = CGSize(width: (originalImageSize.width / 4), height: (originalImageSize.height / 4))
UIGraphicsBeginImageContext(smallImageSize)
image.draw(at: CGPoint.zero)
let imageResult = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return imageResult
}
如果合并调整大小的代码,则IBAction可能看起来像这样:
@IBAction func save(_ sender: Any) {
guard let croppedImage = cropImageIntoQuarterSquare(image: image2),
let combinedImage = saveImage(image1: image1, image2: croppedImage) else {
// handle the error
return
}
UIImageWriteToSavedPhotosAlbum(combinedImage, self, #selector(image(_:didFinishSavingWithError:contextInfo:)), nil)
}
func saveImage(image1: UIImage, image2: UIImage) -> UIImage? {
let size1 = image1.size
let size2 = image2.size
let origin = CGPoint(x: size1.width - size2.width, y: size1.height - size2.height)
UIGraphicsBeginImageContext(size1)
image1.draw(in: CGRect(origin: CGPoint.zero, size: size1))
image2.draw(in: CGRect(origin: origin, size: size2))
let combinedImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return combinedImage
}
func image(_ image: UIImage, didFinishSavingWithError error: Error?, contextInfo: UnsafeRawPointer) {
if let error = error {
// we got back an error!
let ac = UIAlertController(title: "Save error", message: error.localizedDescription, preferredStyle: .alert)
ac.addAction(UIAlertAction(title: "OK", style: .default))
present(ac, animated: true)
} else {
let ac = UIAlertController(title: "Saved!", message: "Your altered image has been saved to your photos.", preferredStyle: .alert)
ac.addAction(UIAlertAction(title: "OK", style: .default))
present(ac, animated: true)
}
}
编辑:忘了@Peter Tao提供的一些他已经提供的代码-以及他提供的hackingwithswift.com的链接。
关于ios - 如何将uiimageview保存在另一个uiimageview(swift3)的顶部,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42461637/