Ich versuche, ein Bild und ein Textfeld in einem einzigen Bild zu kombinieren, während die Texte immer noch die ursprüngliche Positionierung beibehalten.Zeichnen Sie Bild und Text in ein einziges Bild
Ich verwende UIGraphicsBeginImageContext
, um einen Bitmap-Kontext zu erstellen und UIGraphicsGetImageFromCurrentImageContext
, um das endgültige Bild zu zeichnen.
Bisher habe ich folgende in einer Funktion enthalten:
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
ist das aufgenommene Bild von meiner Kamera (nie null) und textOverlay
ist ein UITextField
den gewünschten Text enthält.
Ich erstelle zuerst die Bitmap und zeichne takenImage
mit der ursprünglichen Breite/Höhe.
Wenn ich nur dieses zu meinem finalImage
zeichne, funktioniert alles gut. Das Problem ergibt sich aus dem Versuch, den Text hinzuzufügen und in der gleichen Position zu halten.
Ich habe versucht, eine zweite CGRect
mit x, y, w, h Koordinaten aus dem UITextField : textOverlay
zu erstellen, aber beim Anzeigen des endgültigen Bildes, bekomme ich seltsame Ergebnisse.
Die Bilder können here gesehen werden.
Wie würde ich die Position des Textes im zusammengeführten Bild beibehalten?
versuchen Sie 'UIGraphicsBeginImageContextWithOptions (takenImage.size, false, takenImage.scale)' –
Ändert nichts @ LeoDabus –