2017-03-12 4 views
0

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?

+0

versuchen Sie 'UIGraphicsBeginImageContextWithOptions (takenImage.size, false, takenImage.scale)' –

+0

Ändert nichts @ LeoDabus –

Antwort

0

Sie müssen Flächengröße neu berechnen, um Text zu zeichnen.

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) 

Hier verwende ich self.imageView - es ist Ihr Imageview takenImage enthält. Ich hoffe es hilft.

+0

Probieren Sie dies, immer noch die gleiche Ausgabe Bild. Irgendwie werden die Textkoordinaten nicht verwendet. –

+0

Können Sie den Wert von 'multiWidth' und 'multiHeight' debuggen? –

+0

Beide width/height = 1.0 –