Ich verwende die Antwort von SO POST, um Text auf einem Bild zu zeichnen. Das Problem, das ich habe, ist, wenn der CGPoint in der Nähe der rechten Kante des Bildes eingestellt ist, erstreckt sich der Text aus dem Bild. Ich versuche, einen Weg zu finden, nach links anstatt nach rechts vom CGPoint zu zeichnen oder irgendwie die Größe in Punkten des Textes zu berechnen, der gezeichnet wird, und dann den Zeichenpunkt zu verschieben, um diese Größe zu berücksichtigen.Text auf Bild zeichnen aus dem Bild
Hier ist der Code, den ich verwende.
func textToImage(drawText text: NSString, inImage image: UIImage, atPoint point: CGPoint) -> UIImage {
let color = UserDefaults.standard.colorForKey(key: "color")!
let font = UserDefaults.standard.value(forKey: "font") as! String
let size = UserDefaults.standard.value(forKey: "size") as! Int
let fontAndSize = UIFont(name: font, size: CGFloat(size))!
let scale = UIScreen.main.scale
UIGraphicsBeginImageContextWithOptions(image.size, false, scale)
let textFontAttributes = [
NSFontAttributeName: fontAndSize,
NSForegroundColorAttributeName: color,
] as [String : Any]
image.draw(in: CGRect(origin: CGPoint.zero, size: image.size))
let rect = CGRect(origin: point, size: image.size)
text.draw(in: rect, withAttributes: textFontAttributes)
let newImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return newImage!
}
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
if let mediaType = info[UIImagePickerControllerMediaType] as? String {
if mediaType.isEqual((kUTTypeImage as String)) {
if let pickedImage = info[UIImagePickerControllerOriginalImage] as? UIImage {
let width = pickedImage.size.width
let height = pickedImage.size.height
// this puts the point in the bottom right of the image which then causes the text drawn to extend off of the image
let point = CGPoint(x: width - 20, y: height - 50)
let timestampText = getTimestampText() as NSString
let timestampImage = textToImage(drawText: timestampText, inImage: pickedImage, atPoint: point)
if newMedia {
UIImageWriteToSavedPhotosAlbum(timestampImage, nil, nil, nil)
}
}
Danke! Das hat funktioniert. Ich versuche auch herauszufinden, wie man in der Mitte zeichnet. Dafür habe ich die Eigenschaft rect folgendermaßen geändert: let rect = CGRect (x: point.x- (rectSize.width/2), y: point.y, width: rectSize.width, height: rectSize.height). Dies gibt mir die korrekte x-Position, aber die Y-Position ist nicht genau zentriert, stattdessen liegt sie etwas unterhalb der Mitte des Bildes. Irgendwelche Vorschläge, warum es nicht genau zentriert ist? – chickenparm
Nevermind! Ich änderte es in let rect = CGRect (x: point.x- (rectSize.width/2), y: point.y- (rectSize.height/2), Breite: rectSize.width, height: rectSize.height) und es funktioniert. – chickenparm
@chickenparm Froh zu hören :) –