gpt4 book ai didi

cocoa - NSImage 转 Base64

转载 作者:行者123 更新时间:2023-12-03 16:08:33 43 4
gpt4 key购买 nike

我需要创建 NSImage cocoa 对象的 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];

最佳答案

NSImage 是一个非常抽象的对象。 NSImage 并不真正关心它是光栅图像还是矢量图像; NSImage 对象甚至可以同时具有光栅、矢量、甚至编程 表示形式 - 就是这么一般。

在生成 Base64 数据之前,您必须决定要编码的内容。

第一步是决定是否要对栅格或矢量进行编码。前者很简单,我猜这可能就是你的意思。但是,NSImage 可能来自矢量源,例如 PDF 文档。

如果您知道图像是从光栅源创建的,则只需对该源数据进行编码即可。

如果它来自矢量源,如果您知道解码端的应用程序能够处理它(例如,如果它是另一个 Cocoa 或 Cocoa Touch 应用程序),您仍然可以对其进行编码。另一方面,如果解码端的应用程序可能无法处理矢量数据,那么您应该避免这种策略。

适用于所有情况的一个解决方案是使用 NSBitmapImageRepcreate a raster capture的图像。将焦点锁定在图像上,然后使用该方法创建 NSBitmapImageRep,然后解锁焦点。然后,使用representationUsingType:properties:为图像生成 PNG(或任何合适的格式)数据。然后对 PNG(或任何格式)数据进行 Base64 编码。

关于cocoa - NSImage 转 Base64,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/934940/

43 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com