NSImage到NSData,然后到UIImage

Ano*_*dya 12 macos cocoa nsimage uiimage ios

我正在从我的OSX应用程序创建一个包含一些图像的plist.我正在写图像:

[NSKeyedArchiver archivedDataWithRootObject:self.someImage]
Run Code Online (Sandbox Code Playgroud)

然后我使用这个plist文件作为iOS应用程序的模板,但在这里我无法将文件转换为UIImage也不能NSImage(因为这仅适用于OSX).

我收到此错误:

*由于未捕获的异常'NSInvalidUnarchiveOperationException'终止应用程序,原因:'* - [NSKeyedUnarchiver decodeObjectForKey:]:无法解码类的对象(NSImage)'

请建议我一种方法来执行上述操作.

Jos*_*man 22

OS X:
而不是使用NSKeyedArchiver转换NSImage为NSData,使用NSImage的TIFFRepresentation方法:

NSData *imageData = [self.someImage TIFFRepresentation];
// save imageData to file
Run Code Online (Sandbox Code Playgroud)

iOS:
从文件中读取图像数据,然后使用UIImage的+imageWithData:便捷构造函数将其转换为UIImage :

NSData *imageData = ...; // load imageData from file
UIImage *image = [UIImage imageWithData: imageData];
Run Code Online (Sandbox Code Playgroud)


Ric*_*ich 5

您需要创建一个NSBitmapImageRep,然后保存该,然后阅读NSData到UIImage与+[UIImage imageWithData:]:

首先在 OS X 中,保存数据:

NSString *filepath;
NSBitmapImageRep *imageRep = [NSBitmapImageRep imageRepWithContentsOfFile:filepath];

NSData *data = [imageRep representationUsingType:NSPNGFileType properties:nil];
// Save the data
Run Code Online (Sandbox Code Playgroud)

imageRepWithData:如果您已经拥有NSData图像,您也可以使用- 以上将从文件中加载它(就像您也可以使用NSImage)。

然后在iOS中:

NSData *data; // Load from a file
UIImage *image = [UIImage imageWithData:data];
Run Code Online (Sandbox Code Playgroud)

请参阅此处了解representationUsingType:properties:.