将图像和文本绘制成单个图像

时间:2017-03-12 12:26:21

标签: ios swift xcode image

我试图将图像和文本字段组合成单个图像,同时仍保持文本初始定位。

我使用UIGraphicsBeginImageContext创建位图上下文,使用UIGraphicsGetImageFromCurrentImageContext绘制最终图像。

到目前为止,我在函数中包含以下内容:

let size = CGSize(width: self.takenImage.size.width, height: self.takenImage.size.height)
    UIGraphicsBeginImageContextWithOptions(takenImage.size, false, takenImage.scale)

    let areaSize = CGRect(x: 0, y: 0, width: self.takenImage.size.width, height: self.takenImage.size.height)
    takenImage.draw(in: areaSize)

    let imageViewSize = self.takenImage.size
    let multiWidth = areaSize.width / imageViewSize.width
    let multiHeight = areaSize.height / imageViewSize.height
    print ("multiWidth = \(multiWidth)")
    print ("multiHeight = \(multiHeight)")

    let textSize = CGRect(x: textOverlay.frame.origin.x * multiWidth, y: textOverlay.frame.origin.y * multiHeight, width: textOverlay.frame.size.width * multiWidth, height: textOverlay.frame.size.height * multiHeight)
    textOverlay.drawText(in: textSize)

    let outputImage:UIImage = UIGraphicsGetImageFromCurrentImageContext()!
    UIGraphicsEndImageContext()

    self.finalImage = outputImage

takenImage是我相机拍摄的图像(从不 null),textOverlay是包含所需文字的UITextField

我首先使用原始宽度/高度创建位图并绘制takenImage

如果我将此画到我的finalImage,一切正常。问题源于尝试添加文本并将其保持在相同位置。

我尝试使用CGRect的x,y,w,h坐标创建第二个UITextField : textOverlay,但在查看最终图像时,我得到了奇怪的结果。

可以看到图像here

如何在合并图像中保留文本的位置?

1 个答案:

答案 0 :(得分:0)

您需要重新计算区域大小以绘制文字。

let areaSize = CGRect(x: 0, y: 0, width: self.takenImage.size.width, height: self.takenImage.size.height)
takenImage.draw(in: areaSize)

let imageViewSize = self.imageView.size
let multiWidth = areaSize.width / imageViewSize.width
let multiHeight = areaSize.height / imageViewSize.height

let textSize = CGRect(x: textOverlay.frame.origin.x * multiWidth, y: textOverlay.frame.origin.y * multiHeight, width: textOverlay.frame.size.width * multiWidth, height: textOverlay.frame.size.height * multiHeight)
textOverlay.drawText(in: textSize)

在这里,我使用self.imageView - imageView包含您的takenImage。 希望它有所帮助。