Objective-C snapchat 如何使 image/video 上方的文字如此清晰而不像素化?

Objective-C How does snapchat make the text on top of an image/video so sharp and not pixelated?

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

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

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

谢谢

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

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

它将使用与屏幕相同的比例(可能是 2 倍)。最后一个参数是生成图像的比例; 0 表示 "whatever the screen is"。

如果您的 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();

您需要设置 "scale" 值以将可能处于屏幕大小的 textOverlay 视图缩放到屏幕外图像大小。

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