weex image组件显示合成后的图片

项目中有个功能需要对图片进行合成,所以在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 区别在哪里。

你可能感兴趣的:(weex image组件显示合成后的图片)