Iphone 重新缩放和光栅化UILabel时的图像质量问题

Iphone 重新缩放和光栅化UILabel时的图像质量问题,iphone,ios,image,uilabel,scale,Iphone,Ios,Image,Uilabel,Scale,当UILabel对象存储为图像时,我在重新缩放其内容时遇到了一些问题。由于渲染图像必须大于原始UILabel,因此我计算了重新缩放原始图像所需的比例imageScale,并将其保存到CGSize变量中。在下文中,我将解释采用(和失败)的方法 用于渲染图像的代码 以下代码用于在画布上渲染提取的图像 [labelImage drawInRect:CGRectMake(xCoordinate/imageScale.width, yCo

UILabel
对象存储为图像时,我在重新缩放其内容时遇到了一些问题。由于渲染图像必须大于原始
UILabel
,因此我计算了重新缩放原始图像所需的比例
imageScale
,并将其保存到
CGSize
变量中。在下文中,我将解释采用(和失败)的方法

用于渲染图像的代码

以下代码用于在画布上渲染提取的图像

[labelImage drawInRect:CGRectMake(xCoordinate/imageScale.width,
                                  yCoordinate/imageScale.height,
                                  newSize.width,
                                  newSize.height)
                          blendMode:kCGBlendModeNormal alpha:0.8];
其中变量
newSize
的计算如下:

  • newSize.width=originalWidth/imageScale.width
  • newSize.height=原始高度/imageScale.height
方法1

我使用以下代码提取标签:

UIGraphicsBeginImageContextWithOptions(newSize, NO, 0.0);
    [[label layer] renderInContext: UIGraphicsGetCurrentContext()];
    UIImage *snapshotImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
UIGraphicsBeginImageContextWithOptions([label bounds].size, NO, 0.0);
    [[label layer] renderInContext: UIGraphicsGetCurrentContext()];
    UIImage *snapshotImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
其中,
label
UILabel
变量,
newSize
是重缩放图像应具有的大小(有关详细信息,请参见上文)

但是,我得到了下面的图像,这显然是失败的,因为内容很少,也没有居中:

方法2

我使用以下代码提取标签:

UIGraphicsBeginImageContextWithOptions(newSize, NO, 0.0);
    [[label layer] renderInContext: UIGraphicsGetCurrentContext()];
    UIImage *snapshotImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
UIGraphicsBeginImageContextWithOptions([label bounds].size, NO, 0.0);
    [[label layer] renderInContext: UIGraphicsGetCurrentContext()];
    UIImage *snapshotImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
但是,由于我使用原始图像大小来提取图像,因此我获得的效果如下:

正如您所注意到的,引出序号中的文本分辨率不高,因此无法正确显示

问题


如何纠正这两种方法中的一种,以便以高分辨率显示图像?

似乎您只需要为生成的图像设置适当的比例

这就是功能:

void UIGraphicsBeginImageContextWithOptions(
    CGSize size,
    BOOL opaque,
    CGFloat scale
);

将比例设置为
0.0
。尝试将其替换为
[UIScreen mainScreen]。缩放

不幸的是,这并不能解决问题。您找到了解决方案吗?