【发布时间】:2019-06-12 08:33:04
【问题描述】:
我需要将 PNG 文件转换为 Base64 数据,以便我可以使用 JXA(JavaScript 应用程序脚本)将其添加到 JSON 对象。
与常规 JavaScript 相比,JXA 受到限制,因此我无法立即使用 FileReader 等中的函数。
根据我的阅读,如果不使用 Objective-C/Cocoa(我今天才开始阅读有关此任务的内容),我无法知道如何做到这一点。
我在another post找到了如下代码:
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];
我相信这与我正在尝试做的事情有关 - 有人知道我可以如何桥接这种方法以在 JXA 中使用它吗?
我一直在阅读Syntax for calling ObjC functions 上的JXA Cookbook's 部分,但我很难理解它......这就是我迄今为止想出的全部:
var desktopString = app.pathTo("desktop").toString()
var file = `${desktopString}/test.png`
ObjC.import("Cocoa");
var image = $.NSImage.alloc.initWithContentsOfFile(file)
var imageRep = $.NSBitmapImageRep.alloc.initWithData(image)
但我不知道如何继续 - 我被以下因素甩了:
- 整个初始NSArray/NSDictionary部分
- TIFFRepresentation(我需要它吗?我应该把它放在哪里?)
- NSData *tiff_data = [imageRep representationUsingType:NSPNGFileType properties:dictionary];(没有alloc!为什么需要字典?)
- NSString *base64 = [tiff_data encodeBase64WithNewlines:NO];(再次, 没有分配。)
如果有人能指出我正确的方向/给我一些关于如何完成我想做的事情的指示,我将非常感激。
提前谢谢你!
【问题讨论】:
标签: objective-c cocoa base64 javascript-automation