在Objective-C中以编程方式将文本放在图像上

时间:2015-10-14 23:32:52

标签: ios objective-c

我想以编程方式在图片上添加文字,但我似乎无法找到如何做到这一点。我在这里找到了one解决方案,但很多东西都被弃用了,所以它不起作用......

请帮忙!

修改

这是我的代码:

UIImage *backgroundImage = image;

NSMutableDictionary *stringAttributes = [NSMutableDictionary dictionary];

[stringAttributes setObject: [UIFont fontWithName:@"Helvetica" size:20] forKey: NSFontAttributeName];
[stringAttributes setObject: [UIColor whiteColor] forKey: NSForegroundColorAttributeName];
[stringAttributes setObject: [NSNumber numberWithFloat: 2.0] forKey: NSStrokeWidthAttributeName];
[stringAttributes setObject: [UIColor blackColor] forKey: NSStrokeColorAttributeName];

[backgroundImage drawInRect:CGRectMake(0, 0, backgroundImage.size.width, backgroundImage.size.height)];

NSString *myString = [NSString stringWithFormat:@"Yolo"];

[myString drawInRect:CGRectMake(0, 0, 200, 50) withAttributes:stringAttributes];

UIImage *result = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
self.imageView.image = result;

新编辑:

我想澄清一些事情,以便更好地理解这个问题。我的应用程序允许用户通过短信或电子邮件发送他们自己拍摄的照片,我想在照片上添加一些预先写好的文字。

所以我的问题是:如何从字符串中获取文字到照片?

3 个答案:

答案 0 :(得分:1)

花了很长时间,但我明白了。

代码:

desired_cols_1 = (list(row[col]) for col in cols_desired) for row in reader1)

for row1 in desired_cols_1:
  # Need to make sure the reader is back at the beginning
  reader2.seek(0)
  desired_cols_2 = (list(row[col]) for col in cols_desired) for row in reader2)
  for row2 in desired_cols_2:
    print row1, row2

答案 1 :(得分:0)

只需将UILabel放在IB中的UIImageView顶部,然后根据需要使用约束来定位它们。然后根据需要将文本设置到标签中。

编辑:

现在我知道你想要保存我建议使用UIGraphicsBeginImageContextWithOptions创建一个离屏图形上下文。我觉得比CGContext和Core Graphics调用更容易处理。

绘制上下文以及从中获取和获取图像。

使上下文与图像大小相同,并以0为单位传递以使用设备的原始比例。

您的代码可能如下所示:

//Create an off-screen graphics context for drawing.
CGSize imageSize = myImage.size;
UIGraphicsBeginImageContextWithOptions(imageSize, false, 0);

//draw your image using drawAtPoint(CGPointmake(0,0));
//draw your string using one of the drawAtPoint or drawInRect methods
//available in NSString UIKit additions

//Fetch the resulting image from the context.
UIImage *maskImage = UIGraphicsGetImageFromCurrentImageContext();

//End the off-screen context
UIGraphicsEndImageContext();

答案 2 :(得分:0)

这是一种通用的方法,代码可能会丢失,但它会为您提供重要的信息。

 CGContextRef ctx = CGBitmapContextCreate(...)
 CGContextDrawImage (gtx, myContextRect, myimage);

 CGContextSelectFont(ctx, "Helvetica", 10.0, kCGEncodingMacRoman);
 CGContextSetCharacterSpacing(ctx, 1.7);
 CGContextSetTextDrawingMode(ctx, kCGTextFill);
 CGContextShowTextAtPoint(ctx, 100.0, 100.0, "SOME TEXT", 9);

 CGImageRef imageRef = CGBitmapContextCreateImage(ctx);
 UIImage *finalImage = [UIImage imageWithCGImage:imageRef];

这将为您提供一个可放入视图的图像,或通过UIActivityViewController共享。我相信你能解决这些问题。 方法是: 1)创建位图上下文。 2)渲染图像 3)添加文字 4)将上下文保存到图像