现在我有两个图像视图。按钮所要做的就是将照片和红色框保存在蓝色框上,并将image2保存在蓝色框中,将image1保存在红色框中。我希望将红色框保存在蓝色框右下角的蓝色框内。就像您在电视上看到的三分之一一样]]

ios - 如何将uiimageview保存在另一个uiimageview(swift3)的顶部-LMLPHP
导入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)
    }

 }}

ios - 如何将uiimageview保存在另一个uiimageview(swift3)的顶部-LMLPHP

最佳答案

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/

10-11 15:02