我需要创建一个NSImage可可对象的base64字符串表示.处理这个问题的最佳方法是什么,苹果文档似乎有点简短(或者我找不到).Base64编码从外部看起来相当复杂.
任何帮助将非常感谢.
干杯亚历克斯
编辑
NSArray *keys = [NSArray arrayWithObject:@"NSImageCompressionFactor"];
NSArray *objects = [NSArray arrayWithObject:@"1.0"];
NSDictionary *dictionary = [NSDictionary dictionaryWithObjects:objects forKeys:keys];
NSImage *image = [[NSImage alloc] initWithContentsOfFile:[imageField stringValue]];
NSBitmapImageRep *imageRep = [[NSBitmapImageRep alloc] initWithData:[image TIFFRepresentation]];
NSData *tiff_data = [imageRep representationUsingType:NSPNGFileType properties:dictionary];
NSString *base64 = [tiff_data encodeBase64WithNewlines:NO];
Run Code Online (Sandbox Code Playgroud)
NSImage 是一个非常抽象的对象。NSImage 并不真正关心它是光栅图像还是矢量图像;NSImage 对象甚至可以同时具有光栅、矢量甚至编程表示\xe2\x80\x94\xe2\x80\x94it\就是这么一般。
\n\n在生成 Base64 数据之前,您必须决定要编码的内容。
\n\n第一步是决定是否要对栅格或矢量进行编码。前者很简单,我猜这可能就是你的意思。然而,NSImage 可能来自矢量源,例如 PDF 文档。
\n\n如果您知道您从光栅源创建了图像,则只需对该源数据进行编码即可。
\n\n如果它来自矢量源,如果您知道解码端的应用程序能够处理它(例如,如果它是另一个 Cocoa 或 Cocoa Touch 应用程序),您仍然可以对其进行编码。另一方面,如果解码端的应用程序可能无法处理矢量数据,那么您应该避免这种策略。
\n\n适用于所有情况的一种解决方案是使用NSBitmapImageRep创建图像的光栅捕获。将焦点锁定在图像上,然后使用该方法创建 NSBitmapImageRep,然后解锁焦点。然后,使用representationUsingType:properties:为图像生成PNG(或任何合适的格式)数据。然后对 PNG(或任何格式)数据进行 Base64 编码。
\n