将NSString绘制为UIImage

我有一个NSString对象。 我想将它写入现有的UIImage对象。 UIImage对象已经有一些与之关联的图像。 我想将字符串写入相同的图像。 我如何实现它?

编辑:以下是编辑UIImage并在其上写文本的基本步骤。

  1. 从UIImage获取CGImage。
  2. 渲染CGImage在上下文中。
  3. 渲染要在同一上下文中编写的文本。
  4. 获取上下文的位图并使其成为CGImage。
  5. 从CGImage获取UIImage ….

在图像视图上显示文本和标签并显示更容易。 并且答案已经存在。

然后将其更新为文件或在屏幕上显示….

NSString不能成为UIImage 。 然而,听起来你想要做的只是在图像上插入一些文字,这很容易实现。

  1. 创建UILabel *label 。 使用label.text = myString;将文本设置为您的字符串label.text = myString;

  2. 创建一个UIImageView *imageView 。 使用imageView.image = myimage将视图图像设置为图像。

  3. 使用[imageView addSubview:label];添加UILabel作为UIImageView的子视图(作为UIView的子类,它采用子视图) [imageView addSubview:label]; (如果您正在使用IB,则将标签放在imageview上)。

确保将标签的背景设置为[UIColor clearColor]或设置alpha = 0.0以使其透明。

您可以将图像和字符串绘制(合成)到图形上下文中,然后抓取生成的UIImage。

要绘制图像,请使用renderInContext 。 要绘制文本,请使用CGContextShowTextAtPoint 。 获得生成的图像

 UIImage *compositeImage = UIGraphicsGetImageFromCurrentImageContext(); 

这是我的代码。 我有一个35×480视图,我在其上绘制旋转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]; }