iOS:使用UIGraphicsGetImageFromCurrentImageContext进行屏幕捕获时保持真实照片分辨率
我想在我的应用程序中进行基本的照片编辑,现在我需要能够在照片上添加文本。原始照片的宽度和高度都大于2000像素,因此它将被缩放以适应屏幕,而无需修改其比例 因此,我将图像放在UIImageView中,在其上拖动一个标签,然后使用UIGraphicsGetImageFromCurrentImageContext将图像保存在屏幕上。问题是我会得到一个小图像(320 X一些高度) 完成这项任务但不缩减解决方案的最佳方法是什么iOS:使用UIGraphicsGetImageFromCurrentImageContext进行屏幕捕获时保持真实照片分辨率,ios,Ios,我想在我的应用程序中进行基本的照片编辑,现在我需要能够在照片上添加文本。原始照片的宽度和高度都大于2000像素,因此它将被缩放以适应屏幕,而无需修改其比例 因此,我将图像放在UIImageView中,在其上拖动一个标签,然后使用UIGraphicsGetImageFromCurrentImageContext将图像保存在屏幕上。问题是我会得到一个小图像(320 X一些高度) 完成这项任务但不缩减解决方案的最佳方法是什么 非常感谢 我在一个应用程序中遇到了完全相同的问题 我意识到你不能通过截屏来实
非常感谢 我在一个应用程序中遇到了完全相同的问题 我意识到你不能通过截屏来实现这一点。反过来,这意味着用UILabels等工具无法将标签和文本拖到图像上(我只能忍受) 您需要做的是在数据方面跟踪正在发生的一切 目前,您拥有
UIImageView
的框架。事实上,这是无关紧要的。它纯粹是为了向用户展示正在发生的事情
这与ui标签
相同。它也有一个框架。同样,这与最终图像无关
您需要的是以非绝对的方式存储数据,然后将这些值转换为帧以便在设备上显示
因此,如果您有一个3200x4800
像素的图像(这对我来说很简单),并且它显示在设备上并“缩小”到320x480
。现在,用户放置一个标签,其框架为10,10,100,21
,文本为“Hello,world”,字体大小为特定字体
存储帧10,10,100,21
是无用的,因为输出图像时需要的是<代码>1001001000210
(即大小的十倍)
所以,你真的应该在后台存储信息,比如
frame = 0.031, 0.021, 0.312, 0.044
// these are all percentages
现在,根据图像的大小,有了标签的位置和大小的百分比值
因此,对于缩小的图像大小,它将返回10、10、100、21
,对于完整的图像大小,它将返回100、100、1000、210
,因此打印出来时看起来大小相同
您可以创建一个带有UIImageView和UILabel的UIView复合视图,然后只需在渲染之前将其调整为完整图像大小即可。这将是一种简单但天真的方法
或者您可以创建一个UIView,CALayers支持它来显示图像和文本
或者,您可以使用某种绘图方法渲染图像和文本
不管怎样,你都不能只使用屏幕截图
是的,这比它第一次出现时要复杂得多。非常感谢您的详细回答。首先,我将尝试第一种方法,即屏幕上的视图具有真实图像大小的方法。我希望字体大小是算术级数,否则用缩小的比例乘以它就行不通了。如果我被卡住了,我会带着更多的问题回来。@Meeshoo别担心。对于字体大小,我必须创建一个循环,增加字体大小并计算边界矩形(NSString函数),直到它变得太大,然后使用以前的大小。包含真实大小图像的视图也可以使用UIGraphicsGetImageFromCurrentImageContext呈现?您是否收到内存警告?我的应用程序因“由于内存压力而终止”错误而崩溃。编辑后照片的大小为2 mb,而不是最初的0.6 mb。