Я изо всех сил пытался найти поддерживаемое решение для кодирования изображений (из ресурсов) и средства выбора фотографий в base64string.
Я могу сделать это через Swift в прямом родном приложении.
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, но я получаю ошибки при запуске RCTConvert в фоновом потоке вместо основного.
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
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.
2 библиотек, которые я пробовал.
npm версия, которую я использую: 6.4.1
Версия узла, которую я использую: 8.12.0
Xcode v10
реагируют родной образ-base64
реагировать-родное-изображение-к-base64