1

在我的应用程序中,它允许用户在像 snapchat 这样的图像上放置文本,然后他们可以将图像保存到他们的设备上。我只需在图像顶部添加文本视图并使用代码为图像拍照:

UIGraphicsBeginImageContext(imageView.layer.bounds.size);
[imageView.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage* savedImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

但是,当我将图像上的文本与 snapchat 图像中的文本进行比较时……它明显不同。Snapchat 在图像顶部的文字比我的要清晰得多。我的看起来很像素化。另外我根本没有压缩图像,只是使用 ALAssetLibrary 保存图像。

谢谢你

4

2 回答 2

2

当您使用UIGraphicsBeginImageContext时,它默认为 1x 比例(即非视网膜分辨率)。你可能想要:

UIGraphicsBeginImageContextWithOptions(imageView.layer.bounds.size, YES, 0);

它将使用与屏幕相同的比例(可能是 2x)。最后一个参数是生成图像的比例;0 表示“无论屏幕是什么”。

于 2015-04-24T20:51:58.223 回答
0

如果您的 imageView 被缩放到屏幕的大小,那么我认为您的 jpeg 也将被限制为该分辨率。如果在 UIGraphicsBeginImageContextWithOptions 上设置比例不能为您提供足够的分辨率,您可以在更大的屏幕外图像中进行绘图。就像是:

UIGraphicsBeginImageContext(imageSize);
[image drawInRect:CGRectMake(0,0,imageSize.width,imageSize.height)];
CGContextScaleCTM(UIGraphicsGetCurrentContext(),scale,scale);
[textOverlay.layer renderInContext:UIGraphicsGetCurrentContext()];
newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

您需要设置“缩放”值以将 textOverlay 视图(可能是屏幕大小)缩放到屏幕外图像大小。

或者,可能更简单,您可以从更大的 UIImageView 开始,但将其放在另一个 UIView 中以缩放以适应屏幕。对您的文本覆盖视图执行相同的操作。然后,无论您为 UIImageView 选择什么分辨率,您用于创建合成的代码都应该可以工作。

于 2015-04-24T21:37:25.617 回答