如何在另一个 UIImageView Swift 3 上方应用和移动 UIImageView 层

Posted

技术标签:

【中文标题】如何在另一个 UIImageView Swift 3 上方应用和移动 UIImageView 层【英文标题】:How apply and move a UIImageView layered above another UIImageView Swift3 【发布时间】:2017-03-10 15:31:59 【问题描述】:

我在这里阅读了许多指南,如何创建一个合并两个现有图像的新图像,使用两个 UIImageView 的 UIGraphics 和 layer.render 方法,最后我可以创建一个然后保存我的新图像。问题是我无法理解如何将第二个 UIImageView 放在我想要的位置,例如底部。我现在将发布一张合并图像的图像以及我的代码运行的函数使这成为可能。

Captured merged photo

这是我的代码:

extension UIImage 

    class func imageWithWatermark(image1: UIImageView, image2: UIImageView) -> UIImage 
        UIGraphicsBeginImageContextWithOptions(image1.bounds.size, false, 0.0)

        let frame = image1.frame
        image2.frame = CGRect(x: 0, y: frame.size.height * 0.80, width: frame.size.width, height: frame.size.height * 0.20 )

        image1.layer.render(in: UIGraphicsGetCurrentContext()!)
        image2.layer.render(in: UIGraphicsGetCurrentContext()!)



        let img = UIGraphicsGetImageFromCurrentImageContext()
        UIGraphicsEndImageContext()
        return img!
    

然后是我保存合并图像的函数:

func addWatermark() 
        let newImage = UIImage.imageWithWatermark(image1: cameraPreview, image2: provaImage)
        UIImageWriteToSavedPhotosAlbum(newImage, nil,nil,nil)
    

【问题讨论】:

你有什么问题?你能总结一下吗? @ethrbunny 例如,如何移动底部的第二个图像。如果你打开我上传的图片,看看代码,保存时它在顶部,但通过代码我把它放在底部,我在手机上的控制器中看到它。 你现在明白了吗?还是我让问题变得更难了? 如果你可以在 UIView 中随意放置两个 UIImageView,并截取 UIView 的截图,这样你就可以很容易地得到结果,不需要太多的计算。 【参考方案1】:

您可以使用此功能合并两个图像,第二个将被替换在底部

func mergeTwoImageSeconInBottom(backgroundImage: UIImage, imageOnBottom: UIImage) -> UIImage 
    let size = YOUR_CG_SIZE
    UIGraphicsBeginImageContextWithOptions(size, false, 0.0)
    backgroundImage.draw(in: CGRect(x: 0, y: 0, width: size.width, height: size.height))
    imageOnBottom.draw(at: CGPoint(x: (size.width - imageOnBottom.size.width) / 2, y: size.height - imageOnBottom.size.height))
    let newImage: UIImage = UIGraphicsGetImageFromCurrentImageContext()!
    UIGraphicsEndImageContext()
    return newImage

【讨论】:

试图实现它,设置 CGSize(width: 100, height :100) 进行测试,保存和裁剪的图像,除了照片不显示任何内容。尝试使用instagram stile设置为(宽度:1024,高度:1024),保存一个大的白色正方形,并在左上角保存一个带有照片的小正方形,而不是底部顶部的其他图像。 还尝试切换两个 Image.draw 调用的顺序,就像在我的代码中一样,在第二个图像的顶部,作为第一个图像的背景。

以上是关于如何在另一个 UIImageView Swift 3 上方应用和移动 UIImageView 层的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Swift 中检测 UIImageView 上的 UIImageView 更改或 KVO 炒锅

如何将图片分配给 UIImageView (Swift 3)

Xcode+Swift:UIImageView 自动产生空白区域。如何删除它?

如何解决UIImageView连接到Swift4? [关闭]

如何在 Swift 中使用 UIImageView 设置背景图像

你如何使情节提要上的 UIImageView 可点击(swift)