UIimageview加文字叠加保存为新图像?

时间:2012-05-15 18:18:45

标签: iphone xcode cocoa-touch

我知道在图像视图的一部分上如何叠加文本框有足够的资源。但是,有没有办法在上传时将图像+重叠文本保存为新图像?

  1. 用户选择照片和图像视图填充图像
  2. 用户在图片视图顶部输入文字
  3. 用户点击“上传”按钮,图片+文字呈现为新图像,在保存到后端数据库之前,文本在其上方。
  4. 这可能吗?怎么样?

1 个答案:

答案 0 :(得分:0)

您可以使用Core Graphics / Quartz 2D来完成此操作。我自己对Core Graphics不太熟悉,但请查看此处的文档,其中描述了使用图像加载图形上下文,然后可以在修改后将其保存到文件中,或者只是从头开始绘制图像并将其保存:

链接1:Drawing/Printing for iOS

链接2:Quartz 2D Programming Guide

从“文字”部分下的Quartz 2D Programming Guide绘制文字的快速示例:

void MyDrawText (CGContextRef myContext, CGRect contextRect) // 1
{
  float w, h;
  w = contextRect.size.width;
  h = contextRect.size.height;

  CGAffineTransform myTextTransform; // 2
  CGContextSelectFont (myContext, // 3
                "Helvetica-Bold",
                 h/10,
                 kCGEncodingMacRoman);
  CGContextSetCharacterSpacing (myContext, 10); // 4
  CGContextSetTextDrawingMode (myContext, kCGTextFillStroke); // 5

  CGContextSetRGBFillColor (myContext, 0, 1, 0, .5); // 6
  CGContextSetRGBStrokeColor (myContext, 0, 0, 1, 1); // 7
  myTextTransform =  CGAffineTransformMakeRotation  (MyRadians (45)); // 8
  CGContextSetTextMatrix (myContext, myTextTransform); // 9
  CGContextShowTextAtPoint (myContext, 40, 0, "Quartz 2D", 9); // 10
}

以下是代码的作用:

  1. 将图形上下文和要绘制的矩形作为参数。
  2. 声明仿射变换的存储空间。
  3. 将字体设置为Helvetica,将字体大小设置为页面矩形的高度除以10.字体大小以文本空间为单位。在此示例中,文本被绘制到可调整大小的窗口。当用户调整窗口大小时,文本也会调整大小。编码设置为kCGEncodingMacRoman,但唯一的另一种选择是kCGEncodingFontSpecific。
  4. 将字符间距设置为10个文本空间单位。仅当您想要在一个字形的原点和下一个字形的原点之间添加额外空格时才调用此函数。
  5. 将文本绘制模式设置为fill and stroke。
  6. 将填充颜色设置为绿色,alpha值为.5,用于部分透明填充。请注意,这不是特定于文本的属性。填充颜​​色适用于图形状态。
  7. 将笔触颜色设置为不透明蓝色。这是另一个非文本特定的属性。
  8. 创建执行45度旋转的仿射变换。 MyRadians例程是一个应用程序定义的便利函数,用于从弧度计算度数。您需要提供自己的例程来将度数转换为弧度,或者您需要使用指定弧度的值替换此调用。否则,此代码示例将无法编译。
  9. 将文本矩阵设置为在最后一步中创建的变换。
  10. 绘制文本,在文本空间中传递x和y坐标以在(40,0)处开始绘制,绘制要绘制的字符数组,以及指定文本数组长度的值。在这种情况下,您传递C样式的字符串和值9以指定字符数。