我想在我的应用程序中进行基本的照片编辑,现在我需要能够在照片上添加文本。原始照片的宽度和高度均为> 2000像素,因此可以缩放以适应屏幕,而无需修改其比例。
因此,我将图像放在UIImageView中,在其上面拖动一个Label,然后使用UIGraphicsGetImageFromCurrentImageContext将图像保存在屏幕上。问题是我会得到一个小图像(320 X高度)。
完成此任务但不缩小分辨率的最佳方法是什么?
非常感谢!
答案 0 :(得分:1)
我在应用中遇到了同样的问题。
我意识到的是你不能通过屏幕捕获来做到这一点。反过来,这意味着将标签和文字拖到图像上并不能真正完成(它可以承受我)与UILabels等......
您需要做的是跟踪正在发生的所有事情数据明智。
目前您拥有frame
的{{1}}。实际上这是无关紧要的。纯粹是向用户显示正在发生的事情。
UIImageView
的情况相同。它也有一个UILabel
。同样,这与最终图像无关。
您需要的是以非绝对的方式存储数据,然后将这些值转换为帧以便在设备上显示。
所以,如果你有一个frame
像素的图像(只是让我很容易),这会在设备上显示并“缩小”到3200x4800
。现在,用户放置一个标签,其框架为320x480
,文本“Hello,world”为特定字体大小。
存储框架10, 10, 100, 21
是没用的,因为输出图像时需要的是...... 10, 10, 100, 21
(即大小的十倍)。
所以,你真的应该在后台存储信息,如......
100, 100, 1000, 210
现在,您有标签所在位置的百分比值以及根据图像大小应该有多大的值。
因此,对于缩小的图像尺寸,它将返回frame = 0.031, 0.021, 0.312, 0.044
// these are all percentages
,对于完整图像尺寸,它将为10, 10, 100, 21
,因此在打印时看起来大小相同。
您可以通过UIView与UIImageView和UILabel创建复合100, 100, 1000, 210
,然后您只需在渲染之前将其调整为完整图像大小。这将是最初接近它的简单但天真的方式。
或者您可以创建一个UIView,CALayers支持它显示图像和文本。
或者您可以使用某种绘制方法渲染图像和文本。
无论哪种方式,你都不能只使用屏幕截图。
是的,这比它最初出现的要复杂得多。