Swift 如何在图片上放置图片
Swift how to place pictures on top of pictures
我想制作一个应用程序,让您可以拍照,然后从一组预先制作的 "pictures" 中选择您要应用到该照片上的照片。
例如,你拍了一张某人的照片,然后涂上了胡须,里面有一只鸡和假嘴唇。
应用示例为Aokify应用。
但是搜索了 Internet 的各个角落,但找不到指向正确方向的示例。
感谢 jesses.co.tt 提供我需要的提示。
该方法称为 UIGraphicsContext。
我终于找到了教程:https://www.youtube.com/watch?v=m1QnT72I6f0 由 thenewboston 编写。
另一个更简单的实现可能是使用 UIImageView 作为 parent 视图,然后将 UIImageView 添加为子视图,用于您希望覆盖在原始图像之上的任何图像。
let mainImage = UIImage(named:"main-pic")
let overlayImage = UIImage(named:"overlay")
var mainImageView = UIImageView(image:mainImage)
var overlayImageView = UIImageView(image:overlayImage)
self.view.addSubview(mainImageView)
mainImageview.addSubview(overlayImageView)
编辑:由于这已成为公认的答案,我觉得值得一提的是,定位 overlayImageView 也有不同的选项:您可以在第一个视图出现后将叠加层添加到相同的 parent已添加,或者您可以将叠加层添加为主 imageView 的子视图,如示例所示。
不同之处在于为覆盖框架设置坐标时的参照系:您是否希望它们具有相同的坐标 space,或者您是否希望覆盖坐标相对于主图像而不是 parent.
为了正确回答问题并满足要求,您需要添加选项以根据原始图像将叠加图像移动和放置在适当的位置,但是将一张图像添加到另一张图像上的代码如下一个-
对于 Swift3
extension UIImage {
func overlayed(with overlay: UIImage) -> UIImage? {
defer {
UIGraphicsEndImageContext()
}
UIGraphicsBeginImageContextWithOptions(size, false, scale)
self.draw(in: CGRect(origin: CGPoint.zero, size: size))
overlay.draw(in: CGRect(origin: CGPoint.zero, size: size))
if let image = UIGraphicsGetImageFromCurrentImageContext() {
return image
}
return nil
}
}
用法-
image.overlayed(with: overlayImage)
也可用 here as a gist。
代码最初是为了回答而写的。
我想制作一个应用程序,让您可以拍照,然后从一组预先制作的 "pictures" 中选择您要应用到该照片上的照片。
例如,你拍了一张某人的照片,然后涂上了胡须,里面有一只鸡和假嘴唇。
应用示例为Aokify应用。
但是搜索了 Internet 的各个角落,但找不到指向正确方向的示例。
感谢 jesses.co.tt 提供我需要的提示。
该方法称为 UIGraphicsContext。
我终于找到了教程:https://www.youtube.com/watch?v=m1QnT72I6f0 由 thenewboston 编写。
另一个更简单的实现可能是使用 UIImageView 作为 parent 视图,然后将 UIImageView 添加为子视图,用于您希望覆盖在原始图像之上的任何图像。
let mainImage = UIImage(named:"main-pic")
let overlayImage = UIImage(named:"overlay")
var mainImageView = UIImageView(image:mainImage)
var overlayImageView = UIImageView(image:overlayImage)
self.view.addSubview(mainImageView)
mainImageview.addSubview(overlayImageView)
编辑:由于这已成为公认的答案,我觉得值得一提的是,定位 overlayImageView 也有不同的选项:您可以在第一个视图出现后将叠加层添加到相同的 parent已添加,或者您可以将叠加层添加为主 imageView 的子视图,如示例所示。
不同之处在于为覆盖框架设置坐标时的参照系:您是否希望它们具有相同的坐标 space,或者您是否希望覆盖坐标相对于主图像而不是 parent.
为了正确回答问题并满足要求,您需要添加选项以根据原始图像将叠加图像移动和放置在适当的位置,但是将一张图像添加到另一张图像上的代码如下一个-
对于 Swift3
extension UIImage {
func overlayed(with overlay: UIImage) -> UIImage? {
defer {
UIGraphicsEndImageContext()
}
UIGraphicsBeginImageContextWithOptions(size, false, scale)
self.draw(in: CGRect(origin: CGPoint.zero, size: size))
overlay.draw(in: CGRect(origin: CGPoint.zero, size: size))
if let image = UIGraphicsGetImageFromCurrentImageContext() {
return image
}
return nil
}
}
用法-
image.overlayed(with: overlayImage)
也可用 here as a gist。
代码最初是为了回答