0

我知道关于如何在图像视图的一部分上覆盖文本框的资源已经足够了。但是,有什么方法可以在上传时将图像+叠加文本保存为新图像?

  1. 用户选择照片和图像视图填充图像
  2. 用户在图像视图顶部输入文本
  3. 用户点击“上传”按钮,图像+文本被渲染为一个新图像,在保存到后端数据库之前在其上合并文本。

这可能吗?如何?

4

1 回答 1

0

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

链接 1:iOS 绘图/打印

链接 2:Quartz 2D 编程指南

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

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. 将文本绘制模式设置为填充和描边。
  6. 将填充颜色设置为绿色,alpha 值为 0.5,以实现部分透明的填充。请注意,这不是特定于文本的属性。填充颜​​色适用于图形状态。
  7. 将描边颜色设置为不透明的蓝色。这是另一个不是文本特定的属性。
  8. 创建执行 45 度旋转的仿射变换。MyRadians 例程是一个应用程序定义的便利函数,用于根据弧度计算度数。您要么需要提供自己的例程来将度数转换为弧度,要么需要将此调用替换为指定弧度的值。否则,此代码示例将无法编译。
  9. 将文本矩阵设置为上一步中创建的转换。
  10. 绘制文本,传递文本空间中的 x 和 y 坐标以在 (40,0) 处开始绘制、要绘制的字符数组以及指定文本数组长度的值。在这种情况下,您传递一个 C 风格的字符串和值 9 来指定字符数。
于 2012-05-15T18:50:30.487 回答