项目中有个功能需要对图片进行合成,所以在ios下自定义了一个图片合成的mudule。由于weex的image组件的src为本地或者远程地址,或者base64编码数据,最后我采用mudule回传base64的方式进行图片显示。
程序写完,图片始终显示不出来,而且weex的modal.toast也不显示我回传的内容。起初以为是mudule回传weex出了问题(是不是weex接收不到我回传的消息),调试后发现weex可以接收到消息,但toast不出我的图片数据(base64),我想是不是我的图片数据太大,就找了一个小点的图片通过第三方工具得到base64数据,通过在mudule回传那里写死,weex中的toast依然不显示,但image组件将图片显示出来了。此时我想问题应该在base64编码那里。
NSData *data = UIImagePNGRepresentation([UIImage imageNamed:@"background.png"]);
NSString *encodedImageStr = [data base64EncodedStringWithOptions:NSDataBase64Encoding64CharacterLineLength];
NSData *ImageData = [[NSData alloc] initWithBase64EncodedString:encodedImageStr options:NSDataBase64DecodingIgnoreUnknownCharacters];
UIImage *testImage = [UIImage imageWithData:ImageData];
self.imageView.image = testImage;
在ios平台,通过把图片base64后,再转换回来,图片是可以正常显示的。那问题出在哪里了?最终我进行尝试,图片终于在weex的image组件中显示出来了。
应该使用 base64EncodedStringWithOptions:NSDataBase64EncodingEndLineWithLineFeed
NSData *data = UIImagePNGRepresentation(image);
NSString *encodedImageStr = [data base64EncodedStringWithOptions:NSDataBase64EncodingEndLineWithLineFeed];
NSMutableDictionary * callbackRsp = [[NSMutableDictionary alloc] initWithCapacity:0];
NSString * imageBase64 = [NSString stringWithFormat:@"data:image/png;base64,%@",encodedImageStr];
[callbackRsp setObject:imageBase64 forKey:@"image"];
callback(callbackRsp, false);
遗留问题:我没有搞清楚 NSDataBase64Encoding64CharacterLineLength NSDataBase64EncodingEndLineWithLineFeed 区别在哪里。