Swift中等效的Java函数Base64.encode(byte,0)



我在Java中有以下功能(在Android应用程序中编写(

Bitmap bm = BitmapFactory.decodeFile(stringPath);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bm.compress(Bitmap.CompressFormat.JPEG, 100, baos); // bm is the bitmap object  era quality 100
byte[] byteData = baos.toByteArray();
byte[] newB = Base64.encode(byteData,0);

它获取一个Image文件并将其转换为字节数组。

我需要它来处理Swift。

我能够将byteData转换为Int8,相当于Swift中的字节数组。

我使用以下代码:

let filename = "RES4010110001"
let test_image:UIImage = UIImage(named: filename)!
let dataImage = UIImageJPEGRepresentation(test_image, 1)! as Data
var bytes: [Int8] = dataImage.map{Int8(bitPattern: $0)}

当我使用print(字节(打印这些数据时,当我比较";字节数据";来自Android和";字节";来自iOS

但我不知道下面Swift 上的Java等效函数是什么

Base64.encode(byteData,0);

如何在Swift上创建上述函数的等效函数?

对我来说,这个函数似乎是在编码一个字节数组。但我不知道如何对Int8数组进行编码。

我之所以说Int8,是因为对我来说,Int8相当于Java中的Swift字节类型。

edit:我想编码一个Int8数组,我想这就是Java函数(帖子标题中的函数(在Android应用程序中所做的。

您可以使用base64EncodedDataData进行编码以获得编码的Data,而不是使用[Int8]

Java代码传递0(DEFAULT(作为flags。根据文档,这意味着它符合RFC 2045。RFC 2045说行不应该超过76个字符,所以我们应该传递lineLength76Characters。RFC 2045也要求CRLF作为行结尾,但即使我们不传递endLineWithCarriageReturnendLineWithLineFeedbase64EncodedData似乎也会自动插入它们。

let filename = "RES4010110001"
if let testImage = UIImage(named: filename),
let dataImage = testImage.jpegData(compressionQuality: 1) {
let encodedData = dataImage.base64EncodedData(options: [.lineLength76Characters])
} else {
// failed to get the UIImage, or the JPEG data, handle the error here...
}

我建议您不要在这里使用[Int8]。Java代码中的CCD_;在-128和127之间的数字列表";。它们表示数据缓冲区,这些缓冲区由Swift中的Data结构表示。别担心,Data[Int8]共享一组非常相似的协议一致性,如MutableCollectionRangeReplaceableCollectionRandomAccessCollection等。您几乎可以对Int8阵列和Data执行任何操作。

我能够使用@清扫器和另一个答案发表在这里的堆栈溢出

let filename = "RES4010110001"
let test_image:UIImage = UIImage(named: filename)!
let dataImage = UIImageJPEGRepresentation(test_image, 1)! as Data // use apenas este que é correto, o galvez usa jpg no android
let dataImageStringBase64:String = dataImage.base64EncodedString(options: [.lineLength76Characters])
let byteArray = [UInt8](dataImageStringBase64.utf8)

@Sweeper发布的答案只是错过了这一行

let byteArray = [UInt8](dataImageStringBase64.utf8)

最后一行代码使代码对我来说非常有效

最新更新