如何在React Native(iOS)中对图像(资产)进行编码并通过照片选择器将其编码为base64? [英] How to encode image (asset) and via photo picker to base64 in React Native (iOS)?

查看:55
本文介绍了如何在React Native(iOS)中对图像(资产)进行编码并通过照片选择器将其编码为base64?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我一直在努力寻找一种受支持的解决方案,以对图像(从资产)和照片选择器编码为base64string.

I've been struggling to find a supported solution to encode images (from assets) and photo picker to base64string.

我可以在直接的本机应用程序中通过Swift做到这一点.

I can do this via Swift in a straight native app.

func convertImageTobase64(format: ImageFormat, image:UIImage) -> String? {
var imageData: Data?
switch format {
case .png: imageData = image.pngData()
case .jpeg(let compression): imageData = image.jpegData(compressionQuality: compression)
}
return imageData?.base64EncodedString()

}

var mylogo: UIImage? = UIImage.init(named: "DFU-180x180")
let base64String = convertImageTobase64(format: .png, image: mylogo!)
let dataString = "data:image/jpg;base64," + base64String!

我试图通过NativeModules执行此操作,但是在后台线程而不是main上运行RCTConvert时出现错误.图片.h

I tried to do this via NativeModules, but I get errors for RCTConvert being run on background thread instead of main. Images.h

#import <Foundation/Foundation.h>
#import <React/RCTBridgeModule.h>


@interface Images : NSObject <RCTBridgeModule>
@end

Images.m

#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
#import "Images.h"

@implementation Images
RCT_EXPORT_MODULE()

// All the methods are implemented in a Swift extension, see FileBridgeExtension.swift
RCT_EXTERN_METHOD(convertImageTobase64:(nonnull NSString*)format image:(nonnull UIImage*)image callback:(RCTResponseSenderBlock))

@end

ImagesExtension.swift

ImagesExtension.swift

import UIKit

public enum ImageFormat {
    case png
    case jpeg(CGFloat)
}

@objc extension Images {

    @objc func convertImageTobase64(_ format: NSString, image:UIImage, callback: @escaping ([Any]?)->Void) {
        var imageData: Data?
        print("convertImageTobase64_line 1")
        print("convert format: " + (format as! String))
        switch format {
        case ".png": imageData = UIImagePNGRepresentation(image)
        print("convertImageTobase64_line 2")
        case ".jpeg": imageData = UIImageJPEGRepresentation(image, 1.0)
        print("convertImageTobase64_line 3")
        default:
            print("convertImageTobase64_line 4")
            let error = RCTMakeError("Invalid image format", nil, nil)
            callback([[error], []]);
        }
        let base64string = imageData?.base64EncodedString()
        print("convertImageTobase64_line 5 = " + base64string!)
        callback([[NSNull()], [base64string]]);
    }

}

我尝试了4种不同的React Native库,但没有任何效果.我收到该库不存在的错误,甚至以为我进行了npm安装并确认该库存在于node_modules中.我什至删除了node_modules文件夹,并使用npm install对其进行了重建.

I've tried 4 different React Native libraries and nothing works. I get errors that the library doesn't exist, even thought I do the npm install and confirm the library exists in node_modules. I even remove the node_modules folder, and rebuild it with npm install.

我尝试过的两个库.

npm版本是:6.4.1我正在使用的节点版本是:8.12.0Xcode v10 react-native-image-base64

npm version that I'm using is: 6.4.1 node version that I'm using is: 8.12.0 Xcode v10 react-native-image-base64

react-native-image-to-base64

推荐答案

您可以使用此包rn-fetch-blob ,它具有此功能文件流将满足您的目的.

You can use this package rn-fetch-blob, it has this function File Stream which will serve your purpose.

希望这对您有所帮助.

如果您需要进一步的帮助,请通过评论此帖子来对我进行ping操作.

If you want further assistance, do ping me by commenting this post.

这篇关于如何在React Native(iOS)中对图像(资产)进行编码并通过照片选择器将其编码为base64?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆