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:如何将视图另存为图像??? (例如保存你画的东西)的主要内容,如果未能解决你的问题,请参考以下文章

在 iPhone 上另存为图像

将渲染的 Razor 视图另存为 HTML 字符串

将 SwiftUI 视图渲染到屏幕外并将视图另存为 UIImage 以共享

如何将表格另存为图像,但又保持其质量? R

如何将图像另存为在 retrofit2 中发送到 wcf Web 服务的流中的图像

如何将面板另存为 BMP