UIImage(Frame)和UIImage(图片)合并

时间:2017-09-01 14:01:04

标签: ios uiimage uigraphicscontext

我有多种尺寸的框架,可以硬编码,或服务器决定。我必须从图库中选择图像,这绝对可以是多维度的。

  1. 我从图库中选择图片
  2. 我正在使用代码生成白色背景UIImage。

    让size = CGSize(宽度:424/2,高度:664/2)

      UIGraphicsBeginImageContextWithOptions(size, true, 0)
      UIColor.white.setFill()
      UIRectFill(CGRect(x: 0, y: 0, width: size.width, height: size.height))
      let background_image: UIImage? = UIGraphicsGetImageFromCurrentImageContext()
      UIGraphicsEndImageContext()
    
  3. 现在,我想要的是制作另一个图像,它保持前20像素,前20像素,宽度和高度比原始背景小20像素。

    我怎样才能实现它。

    在进入StackOverflow之前我尝试了什么。

    func mergedImageWith(frontImage:UIImage?, backgroundImage: UIImage?) -> UIImage{
    
        if (backgroundImage == nil) {
          return frontImage!
        }
    
        let size = CGSize(width: 424/2, height: 664/2)
    
        UIGraphicsBeginImageContextWithOptions(size, true, 0)
        UIColor.white.setFill()
        UIRectFill(CGRect(x: 0, y: 0, width: size.width, height: size.height))
        let backgroundImage2: UIImage? = UIGraphicsGetImageFromCurrentImageContext()
        UIGraphicsEndImageContext()
    
        UIGraphicsBeginImageContextWithOptions(size, false, 0.0)
        backgroundImage2?.draw(in: CGRect.init(x: 0, y: 0, width: size.width, height: size.height))
    
        frontImage?.draw(in: getAspectFillFrame(sizeImageView: size2, sizeImage: (frontImage?.size)!))
    
        let newImage:UIImage = UIGraphicsGetImageFromCurrentImageContext()!
        UIGraphicsEndImageContext()
    
        return newImage
      }
    

    这里使用纵横填充创建背景图像,但问题是起始位置和完整的高度和宽度。

    用非常简单的话说。它就像制作自定义框架并将它们与图像(纵横填充)合并以进行打印。

    任何人都可以帮助我

    感谢。

1 个答案:

答案 0 :(得分:1)

在绘制完所有图像之前,尝试不要结束图像上下文(我还包括一些我工作的代码,稍微编辑一下)

class layeredImageView: UIImageView {
var imageBackground:UIImage!
var imageForeground:UIImage!

UIGraphicsBeginImageContextWithOptions(self.frame.size, false, UIScreen.main.scale)

    self.image?.draw(in: self.frame)

    imageBackground.draw(in: CGRect(<rect>)
    imageForeground.draw(in: CGRect(<rect>)

    self.image = UIGraphicsGetImageFromCurrentImageContext()
    UIGraphicsEndImageContext()


}