反应本机,目标C返回nil whit initwithbase64encodedstring

发布于 2025-02-12 20:21:28 字数 1259 浏览 0 评论 0原文

我正在尝试将来自React天然到目标C的Base64映像衡量,以便在OPENCV的帮助下检索图像的数据像素。

但是,使用initwithbase64encodedString时,每个基本64映像返回nil。 我已经尝试了有关此问题的多个答案,但没有任何作用。

base64来自React Native中ImagePicker的结果,

ImagePicker.launchImageLibrary({...})

这是目标C中使用的代码:

RCT_EXPORT_METHOD(getImagePixels:(NSString *)imageAsBase64 callback:(RCTResponseSenderBlock)callback)
{
   NSUInteger paddedLength = imageAsBase64.length + ((4 - (imageAsBase64.length % 4)) % 4);
   NSString *correctBase64String = [imageAsBase64 stringByPaddingToLength:paddedLength withString:@"=" startingAtIndex:0];
   
   /* Here decodedData always nil */
   NSData *decodedData = [[NSData alloc]initWithBase64EncodedString:correctBase64String options:NSDataBase64DecodingIgnoreUnknownCharacters];
   
   UIImage *image = [UIImage imageWithData:decodedData];
   
   cv::Mat imageMat;
   cv::Mat imageMatRGBA;
   
   UIImageToMat(image, imageMat);
   
   cv::cvtColor(imageMat, imageMatRGBA, cv::COLOR_BGR2RGBA);
   cv::Mat Image8bit;
   imageMat.convertTo(Image8bit, CV_8UC1);

   unsigned char *pixelsChar = Image8bit.data;
   NSString *pixels = [NSString stringWithUTF8String:(char *)pixelsChar];
   
   callback(@[[NSNull null], pixels]);
}

I'm trying to passe base64 images from react native to objective c so that I can retrieve image's data pixels with the help of openCV.

However, each base64 image return nil when using initWithBase64EncodedString.
I have tried multiple answer regarding this issue but none worked.

The Base64 comes from the result of ImagePicker in React Native

ImagePicker.launchImageLibrary({...})

here is the code used in Objective C :

RCT_EXPORT_METHOD(getImagePixels:(NSString *)imageAsBase64 callback:(RCTResponseSenderBlock)callback)
{
   NSUInteger paddedLength = imageAsBase64.length + ((4 - (imageAsBase64.length % 4)) % 4);
   NSString *correctBase64String = [imageAsBase64 stringByPaddingToLength:paddedLength withString:@"=" startingAtIndex:0];
   
   /* Here decodedData always nil */
   NSData *decodedData = [[NSData alloc]initWithBase64EncodedString:correctBase64String options:NSDataBase64DecodingIgnoreUnknownCharacters];
   
   UIImage *image = [UIImage imageWithData:decodedData];
   
   cv::Mat imageMat;
   cv::Mat imageMatRGBA;
   
   UIImageToMat(image, imageMat);
   
   cv::cvtColor(imageMat, imageMatRGBA, cv::COLOR_BGR2RGBA);
   cv::Mat Image8bit;
   imageMat.convertTo(Image8bit, CV_8UC1);

   unsigned char *pixelsChar = Image8bit.data;
   NSString *pixels = [NSString stringWithUTF8String:(char *)pixelsChar];
   
   callback(@[[NSNull null], pixels]);
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文