2015-06-03 5 views
0

Я хочу добавить текст на изображение, и я могу сделать это, как показано ниже.Как сделать текст в центре изображения?

func textToImage(drawText: NSString, inImage: UIImage, atPoint:CGPoint)->UIImage{ 

    // Setup the font specific variables 
    var textColor: UIColor = UIColor.redColor() 
    var textFont: UIFont = UIFont(name: "AmericanTypewriter", size: 75)! 
    let textStyle = NSTextEffectLetterpressStyle 

    //Setup the image context using the passed image. 
    UIGraphicsBeginImageContext(inImage.size) 

    let textFontAttributes = [ 
     NSFontAttributeName: textFont, 
     NSForegroundColorAttributeName: textColor, 
     NSTextEffectAttributeName : textStyle 
    ] 

    inImage.drawInRect(CGRectMake(0, 0, inImage.size.width, inImage.size.height)) 

    var rect: CGRect = CGRectMake(atPoint.x, atPoint.y, inImage.size.width, inImage.size.height) 

    drawText.drawInRect(rect, withAttributes: textFontAttributes) 

    var newImage: UIImage = UIGraphicsGetImageFromCurrentImageContext() 

    UIGraphicsEndImageContext() 
    return newImage 
} 

Я назвал эту функцию, как показано ниже

let newImage : UIImage = textToImage(textToAdd!, inImage: imageToSave, atPoint:CGPoint(x: 20, y: 20)) //For now text is displaying at the top in left end for point(x:20 ,y:20) 

Но проблема в том, текст взят пользователем. Они могут дать одно слово или большое предложение. Поэтому, если они дают только одно слово, оно должно появляться в верхней и средней части изображения или сверху сверху слева направо. это больше похоже на то, что я хочу установить выравнивание текста в центр. Чтобы достичь этого, я должен изменить приведенный выше CGPoint. Но я не понимаю, как изменить его, чтобы он выглядел хорошо во всех сценариях. Пожалуйста, помогите мне, как этого достичь.

ответ

0

Добавлена ​​@osteven ответ. Ниже код работает так, как я ожидал. Надеюсь, это поможет другим.

func textToImage(drawText: NSString, inImage: UIImage, atPoint:CGPoint)->UIImage{ 

// Setup the font specific variables 
var textColor: UIColor = UIColor.redColor() 
var textFont: UIFont = UIFont(name: "AmericanTypewriter", size: 75)! 
let textStyle = NSTextEffectLetterpressStyle 

//Setup the image context using the passed image. 
UIGraphicsBeginImageContext(inImage.size) 

let textFontAttributes = [ 
    NSFontAttributeName: textFont, 
    NSForegroundColorAttributeName: textColor, 
    NSTextEffectAttributeName : textStyle 
] 

inImage.drawInRect(CGRectMake(0, 0, inImage.size.width, inImage.size.height)) 

let textSize = drawText.sizeWithAttributes(textFontAttributes) 
    if textSize.width < inImage.size.width { 
     println("lesser") 
     let textRect = CGRectMake(inImage.size.width/2 - textSize.width/2, 0, 
     inImage.size.width/2 + textSize.width/2, inImage.size.height - textSize.height) 
     drawText.drawInRect(textRect, withAttributes: textFontAttributes) 
    } 
    else { 
     println("greater") 
     let textRect = CGRectMake(0 , 0, 
      inImage.size.width, inImage.size.height) 
     drawText.drawInRect(textRect, withAttributes: textFontAttributes) 

    } 

var newImage: UIImage = UIGraphicsGetImageFromCurrentImageContext() 

UIGraphicsEndImageContext() 
return newImage 
0

Это может быть просто, как вы предложили с помощью «Я хочу установить выравнивание текста в центр».

Добавьте строку здесь:

// Setup the font specific variables 
var textColor: UIColor = UIColor.redColor() 
var textFont: UIFont = UIFont(name: "AmericanTypewriter", size: 75)! 
let textStyle = NSTextEffectLetterpressStyle 
let textAlignment = NSTextAlignment.Center 

и добавить в массив:

let textFontAttributes = [ 
    NSFontAttributeName: textFont, 
    NSForegroundColorAttributeName: textColor, 
    NSTextEffectAttributeName : textStyle 
    NSTextAlignment: textAlignment 
] 

Это должно сделать текст, расположенный в центре изображения.

Если вы измените точку начала текста назад на (0, 0) и установите для текста прямоугольник размером с изображение, он должен уметь учитывать ширину Rect и, таким образом, центрировать весь текст соответствующим образом.

+0

Я пробовал это. Но я не могу так сказать, это показывает ошибку. –

3

Вы можете центрировать текст в верхней части изображения, как это:

func textToImage(drawText: NSString, inImage: UIImage, atPoint:CGPoint)->UIImage{ 

    // Setup the font specific variables 
    var textColor: UIColor = UIColor.redColor() 
    var textFont: UIFont = UIFont(name: "AmericanTypewriter", size: 75)! 
    let textStyle = NSTextEffectLetterpressStyle 

    //Setup the image context using the passed image. 
    UIGraphicsBeginImageContext(inImage.size) 

    let textFontAttributes = [ 
     NSFontAttributeName: textFont, 
     NSForegroundColorAttributeName: textColor, 
     NSTextEffectAttributeName : textStyle 
    ] 

    inImage.drawInRect(CGRectMake(0, 0, inImage.size.width, inImage.size.height)) 

    let textSize = drawText.sizeWithAttributes(textFontAttributes) 
    let textRect = CGRectMake(inImage.size.width/2 - textSize.width/2, 0, 
     inImage.size.width/2 + textSize.width/2, inImage.size.height - textSize.height) 
    drawText.drawInRect(textRect, withAttributes: textFontAttributes) 

    var newImage: UIImage = UIGraphicsGetImageFromCurrentImageContext() 

    UIGraphicsEndImageContext() 
    return newImage 
} 
+0

Большое спасибо ... Это действительно помогло !!!! –

+0

Hi Osteven, Он работает, если это одна строчка или размер шрифта мал. Если я даю длинное предложение, размер текста становится все больше, поскольку значение х-координаты становится отрицательным. Так что текст скрывается. Не могли бы вы сообщить мне, что еще можно сделать для решения этой проблемы. –

+0

Вы можете попробовать ограничить размер textRect: 'let left = min (abs (inImage.size.width/2 - textSize.width)/2 , 4) let right = min (inImage.size.width/2 + textSize.width/2, inImage.size.width) let textRect = CGRectMake (левый, 0, правый, inImage.size.height) ' – osteven