Рисование NSString в UIImage - PullRequest
       21

Рисование NSString в UIImage

1 голос
/ 08 сентября 2011

У меня есть объект NSString.Я хочу написать это в существующий объект UIImage.У объекта UIImage уже есть некоторое изображение, связанное с ним.Я хочу написать строку в том же изображении.Как мне этого добиться?

Ответы [ 4 ]

2 голосов
/ 08 сентября 2011

EDIT: Ниже приведен основной шаг для редактирования UIImage и написания на нем текста.

  1. Получить CGImage из UIImage.
  2. Визуализация CGImage On context.
  3. Визуализация текста, который вы хотите написать в том же контексте.
  4. Получить растровое изображение контекста и сделать из этого CGImage.
  5. Получить UIImage от CGImage ....

Было бы намного проще отобразить текст, подписать его и показать на изображении. И ответ за это уже есть.

Затем обновите файл или покажите его на экране ....

1 голос
/ 08 сентября 2011

Вы бы нарисовали (составное) и изображение, и строку в графическом контексте, а затем захватили получившийся UIImage.

Чтобы нарисовать изображение, используйте renderInContext. Чтобы нарисовать текст, используйте CGContextShowTextAtPoint. Чтобы получить результирующее изображение

UIImage *compositeImage = UIGraphicsGetImageFromCurrentImageContext();
1 голос
/ 08 сентября 2011

NSString не может стать UIImage.Тем не менее, похоже, что все, что вы хотите сделать, это вставить текст поверх изображения, и это может быть легко достигнуто.

  1. Создайте UILabel *label.Установите текст для вашей строки с помощью label.text = myString;.

  2. Создать UIImageView *imageView.Установите изображение вида для вашего изображения с помощью imageView.image = myimage.

  3. Добавьте UILabel как подпредставление UIImageView (в качестве подкласса UIView, требуетсяподпредставления) с помощью [imageView addSubview:label]; (или перетащите метку на просмотр изображения, если вы используете IB).

Убедитесь, что для фона метки установлено значение [UIColor clearColor] или установитеalpha = 0.0, чтобы он был прозрачным.

0 голосов
/ 11 сентября 2012

Вот мой код. У меня есть вид 35x480, и я рисую на нем текст, повернутый на 90 градусов. Надеюсь, это поможет. Я рисую изображение, а затем текст, чтобы он появился. Это похоже на заголовок окна.

Я рисую изображение, а затем текст на drawRect.

@synthesize topView;
@synthesize delegate;

- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
    // Initialization code
    topView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 480)];
    topView.backgroundColor = [UIColor clearColor];
    topView.opaque = NO;


    }
    return self;
}


// Only override drawRect: if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
- (void)drawRect:(CGRect)rect
{
    UIGraphicsBeginImageContext(img.image.size);
    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextSaveGState(context);

    // draw titleborder
    CGRect titleRect = CGRectMake(0, 0, 35, 480);
    NSString *filePath = [[NSBundle mainBundle] pathForResource:@"titleborder" ofType:@"png"];  
    UIImage *titleImage = [[UIImage alloc] initWithContentsOfFile:filePath];
    [titleImage drawInRect:titleRect];
    [self bringSubviewToFront:topView];

    UIFont *font = [UIFont boldSystemFontOfSize:16.0];

    CGRect textRect = CGRectMake(0, rect.size.height/2, 480, 40);
    NSLog(@"text rect frame: %@", NSStringFromCGRect(textRect));

    [self drawText:[[NSString alloc] initWithFormat:@"My Window Title"] rect:textRect context:context font:font red:1.0 green:1.0 blue:1.0 alpha:1.0] ;

    CGContextRestoreGState(context);


}

- (void) drawText: (NSString *)text rect: (CGRect)rect context:(CGContextRef)context font:(UIFont *)font red:(CGFloat)r green: (CGFloat)g blue:(CGFloat)b alpha:(CGFloat)alpha {
    CGContextSetTextDrawingMode(context, kCGTextFill);

    CGContextSetRGBFillColor(context, r, g, b, alpha); // 6 
    CGContextSetRGBStrokeColor(context, 1, 1, 1, 1);
    CGAffineTransform transform1 = CGAffineTransformMakeRotation(-90.0 * M_PI/180.0);
    CGContextConcatCTM(context, transform1);

    CGSize sizeOfString = [text sizeWithFont:font];
    CGContextTranslateCTM(context, (sizeOfString.width/2) - 420,-232);

    [text drawInRect:rect withFont:font lineBreakMode:UILineBreakModeClip alignment:UITextAlignmentLeft];
}
...