iPhone:如何将视图另存为图像??? (例如保存你画的东西)
Posted
技术标签:
【中文标题】iPhone:如何将视图另存为图像??? (例如保存你画的东西)【英文标题】:iPhone : How to save a view as image ??? (ex.save what you draw ) 【发布时间】:2011-05-21 02:41:02 【问题描述】:我找到了一些示例,教你如何在 iphone 上画画
但它没有说明如何将视图保存为图像?
有人知道吗???
或者任何示例都会有所帮助:)
实际上,我正在尝试将用户的签名保存为图像并将其上传到服务器。
谢谢
韦伯
【问题讨论】:
【参考方案1】:UIView *view = // your view
UIGraphicsBeginImageContext(view.bounds.size);
[view.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
这给出了您可以使用 -
存储的图像NSData *imageData = UIImageJPEGRepresentation(image, 1.0);
[imageData writeToFile:path atomically:YES];
路径是您要保存到的位置。
【讨论】:
对不起,你能告诉更多关于这段代码的细节吗……我不知道要使用它…… 这个想法是为视图生成一个UIImage
对象,以便我们可以将其保存为图像。为此,我们使用了一点Core Graphics
。我们获取视图的图层(每个视图都有一个代表视图视觉方面的图层)并将其绘制到图像上下文中(将上下文想象为绘图板)。绘制完成后,我们生成上下文的UIImage
对象。我们使用框架函数UIImageJPEGRepresentation(image,1.0)
将其转换为 jpeg 表示形式的数据。请注意,1.0
是您想要的图像质量,1.0
是最好的
一旦我们有了NSData
对象,我们使用它的方法writeToFile:atomically
将图像保存在所需的文件path
中。希望这就是您想要的。
谢谢,我会试试你的方法,非常感谢:)
两个注意事项:1. 您应该检查零边界大小。 2. 一般来说,最好使用UIImagePNGRepresentation
将绘制的图像存储在PNG中。【参考方案2】:
这是一种将任何 UIView 呈现为图像的快速方法。它考虑了设备运行的 ios 版本,并利用相关方法获取 UIView 的图像表示。
更具体地说,现在有更好的方法(即 drawViewHierarchyInRect:afterScreenUpdates:) 在运行 iOS 7 或更高版本的设备上截取 UIView 的屏幕截图,据我所知,这被认为是与“renderInContext”方法相比,性能更好。
更多信息在这里:https://developer.apple.com/library/ios/documentation/uikit/reference/uiview_class/UIView/UIView.html#//apple_ref/doc/uid/TP40006816-CH3-SW217
用法示例:
#import <QuartzCore/QuartzCore.h> // don't forget to import this framework in file header.
UIImage* screenshotImage = [self imageFromView:self.view]; //or any view that you want to render as an image.
代码:
#define IS_OS_7_OR_LATER ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0)
- (UIImage*)imageFromView:(UIView*)view
CGFloat scale = [UIScreen mainScreen].scale;
UIImage *image;
if (IS_OS_7_OR_LATER)
//Optimized/fast method for rendering a UIView as image on iOS 7 and later versions.
UIGraphicsBeginImageContextWithOptions(view.bounds.size, YES, scale);
[view drawViewHierarchyInRect:view.bounds afterScreenUpdates:YES];
image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
else
//For devices running on earlier iOS versions.
UIGraphicsBeginImageContextWithOptions(view.bounds.size,YES, scale);
[view.layer renderInContext:UIGraphicsGetCurrentContext()];
image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return image;
【讨论】:
【参考方案3】:在 MonoTouch/C# 中作为扩展方法:
public static UIImage ToImage(this UIView view)
try
UIGraphics.BeginImageContext(view.ViewForBaselineLayout.Bounds.Size);
view.Layer.RenderInContext(UIGraphics.GetCurrentContext());
return UIGraphics.GetImageFromCurrentImageContext();
finally
UIGraphics.EndImageContext();
【讨论】:
以上是关于iPhone:如何将视图另存为图像??? (例如保存你画的东西)的主要内容,如果未能解决你的问题,请参考以下文章
将 SwiftUI 视图渲染到屏幕外并将视图另存为 UIImage 以共享