NSData到UIImage

bru*_*in 20 iphone uiimage nsdata

我正在尝试保存UIIMage,然后检索并显示它.我已成功将图像保存在捆绑中,从那里检索并显示.我的问题来自于我尝试将图像保存到磁盘(将其转换为NSData),然后检索它.我像这样将图像转换为NSData ...

NSData* topImageData = UIImageJPEGRepresentation(topImage, 1.0);
Run Code Online (Sandbox Code Playgroud)

然后我把它写成磁盘就像这样......

[topImageData writeToFile:topPathToFile atomically:NO];
Run Code Online (Sandbox Code Playgroud)

然后我试着像这样检索它......

topSubView.image = [[UIImage alloc] initWithContentsOfFile:topPathToFile];
Run Code Online (Sandbox Code Playgroud)

它不返回任何图像(大小为零).所以我试过......

NSData *data = [[NSData alloc] initWithContentsOfFile:topPathToFile];
topSubView.image = [[UIImage alloc] initWithData:data];
Run Code Online (Sandbox Code Playgroud)

无济于事.当我单步执行调试器时,我确实看到数据包含正确的字节数,但我很困惑为什么我的图像没有被创建.我错过了一步吗?在转换为图像之前,我是否需要对NSData执行某些操作?

Aru*_*nGJ 33

试试这个代码.这对我有用.

保存数据.

创建保存图像的路径.

let libraryDirectory = NSSearchPathForDirectoriesInDomains(.libraryDirectory,
                                                               .userDomainMask,
                                                               true)[0]
let libraryURL = URL(fileURLWithPath: libraryDirectory, isDirectory: true)
let fileURL = libraryURL.appendingPathComponent("image.data")
Run Code Online (Sandbox Code Playgroud)

将图像转换为Data对象并将其保存到文件中.

let data = UIImageJPEGRepresentation(myImage, 1.0)
try? data?.write(to: fileURL)
Run Code Online (Sandbox Code Playgroud)

检索保存的图像

let newImage = UIImage(contentsOfFile: fileURL.relativePath)
Run Code Online (Sandbox Code Playgroud)

创建一个imageview并使用检索到的图像加载它.

let imageView = UIImageView(image: newImage)
self.view.addSubview(imageView)
Run Code Online (Sandbox Code Playgroud)

  • 在说出错误之前首先尝试代码. (5认同)

Kar*_*hah 17

您应该能够使用UIImage的类方法

[UIImage imageWithContentsOfFile:topPathToFile]; 
Run Code Online (Sandbox Code Playgroud)

要么

[UIImage imageWithData:data];
Run Code Online (Sandbox Code Playgroud)

这不起作用吗?

希望这可以帮助!


Mik*_*ane 6

为了防止有人,从iOS6我们有了imageWithData:scale方法.要从NSData对象获取具有正确比例的UIImage,请使用该方法,声明用于存储原始图像的比例.例如:

CGFloat screenScale = [[UIScreen mainScreen] scale];
UIImage *image = [UIImage imageWithData:myimage scale:screenScale];
Run Code Online (Sandbox Code Playgroud)

这里,myimage是存储原始图像的NSData对象.在示例中,我使用了屏幕的比例.如果您对原始图像使用其他比例,请改用该值.