【问题标题】:Draw image and text into a single image将图像和文本绘制到单个图像中
【发布时间】:2017-08-02 12:12:34
【问题描述】:

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

我使用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 是我的相机拍摄的图像(never null),textOverlay 是包含所需文本的 UITextField

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

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

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

图片可见here

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

【问题讨论】:

  • 试试UIGraphicsBeginImageContextWithOptions(takenImage.size, false, takenImage.scale)
  • 不会改变任何东西@LeoDabus

标签: ios swift xcode image


【解决方案1】:

您需要重新计算区域大小来绘制文本。

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。 希望对您有所帮助。

【讨论】:

  • 刚试过这个,仍然得到相同的输出图像。不知何故没有使用文本坐标。
  • 你能调试multiWidth multiHeight 的值吗?
  • 宽/高均为 1.0
  • 嘿。错误就在这里。我使用let imageViewSize = self.imageView.size 而不是let imageViewSize = self.takenImage.size
猜你喜欢
  • 2017-11-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-21
  • 1970-01-01
  • 2016-07-25
相关资源
最近更新 更多