![](/img/trans.png)
[英]NSImage from NSPasteBoard to base64 for HTTP POST not working as expected
[英]Print NSImage from base64 string
我想打印一个 base64 编码图像(从 web 视图中的 canvas 传入)。 如何读取/打印 base64 字符串? 这是我到目前为止所拥有的:
- (void) printImage:(NSString *)printerName andData:(NSString *)base64img andW:(float)paperW andH:(float)paperH {
NSImage *img = [base64img dataUsingEncoding:NSDataBase64Encoding64CharacterLineLength];
NSPrintInfo *printInfo = [NSPrintInfo sharedPrintInfo];
[printInfo setTopMargin:0.0];
[printInfo setBottomMargin:0.0];
[printInfo setLeftMargin:0.0];
[printInfo setRightMargin:0.0];
[printInfo setHorizontalPagination:NSFitPagination];
[printInfo setVerticalPagination:NSFitPagination];
[printInfo setPaperSize:NSMakeSize(paperW, paperH)];
[printInfo setPrinter:[NSPrinter printerWithName:printerName]];
NSPrintOperation *op = [img printOperationForPrintInfo: printInfo autoRotate: YES];
[op setShowsPrintPanel:NO];
[op setShowsProgressPanel:NO];
[op runOperation];
}
提前致谢!
此行至少有三个错误:
NSImage *img = [base64img dataUsingEncoding:NSDataBase64Encoding64CharacterLineLength];
首先, dataUsingEncoding:
消息要求字符串将自身编码为数据,但您需要解码操作,而不是编码操作。
其次, dataUsingEncoding:
方法需要一个NSStringEncoding
参数,并且NSDataBase64Encoding64CharacterLineLength
不是NSStringEncoding
。 (它是一个NSDataBase64EncodingOptions
。)
不幸的是,因为您使用的是 Objective-C 而不是 Swift,所以编译器不会拒绝此代码。 (也许它会发出警告?我没有尝试过。)
第三, dataUsingEncoding:
返回一个NSData
,而不是一个NSImage
。 我很确定编译器至少会为此发出警告。
您需要使用initWithBase64EncodingString:options:
将字符串解码为NSData
,然后您需要使用initWithData:
从NSData
创建一个NSImage
。
NSData *data = [[NSData alloc] initWithBase64EncodedString:base64img
options:NSDataBase64DecodingIgnoreUnknownCharacters];
if (data == nil) {
return;
}
NSImage *img = [[NSImage alloc] initWithData:data];
if (img == nil) {
return;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.