哪种类型的字符集适合图像编码?[Kotlin]



我曾尝试将btye数组转换为charset-8中的字符串,但它不起作用。有人能指引我吗。

以下是我如何将位图转换为字节数组

private fun BitmapToByteArray(): ByteArray
{
val stream = ByteArrayOutputStream()
btm1!!.compress(Bitmap.CompressFormat.PNG, 100, stream)
val bitmapdata: ByteArray = stream.toByteArray()
return bitmapdata
} 

以下是我如何加密数据

private fun encrypting_data(bitmapdata: ByteArray): String {
val key = secretkey!!.text.toString()
val btm1 = bitmapdata.toString(Charsets.UTF_8)
val s = btm1
//generating key from given secret key
val skey: Key = SecretKeySpec(key.toByteArray(), "AES")
print(skey.toString())
val c: Cipher = Cipher.getInstance("AES")
c.init(Cipher.ENCRYPT_MODE, skey)
//encrypting text string
val re = c.doFinal(s.toByteArray())
//converting encrypted string to base64
val re_base64 = Base64.encodeToString(re, Base64.NO_WRAP or Base64.NO_PADDING)
Log.e("aaAA", re_base64.toString())
//converting each chr of base64 string to binary and combining it
for (i in re_base64) {
var single_b_string = Integer.toBinaryString((i.toInt()))
//if binary str is less than 8 bit then making it 8 bit by adding 0's
if (single_b_string.length < 8) {
for (j in 1..(8 - single_b_string.length)) {
single_b_string = "0" + single_b_string
}
}
//final binary string to hide in image
b_string = b_string + single_b_string
}
Log.e("barraylength", b_string.toString())
Log.e("barray", b_string!!.length.toString())
return b_string.toString()
}

请引导我,谢谢

简短回答:无。

字符集用于将字符映射到二进制,反之亦然。使用字符编码将图像的字节解码为字符串是没有意义的。甚至有可能在您选择的字符编码中发现字节序列不是有效序列,因此它们将无法正确转换为字符。

有时有必要使用文本来表示二进制数据(例如,当使用纯文本传输/媒体来存储它时(。在这些情况下,您可以使用其他类型的编码,例如Base64,但我想您知道这一点,因为您在这里也已经使用了Base64。

请注意,在当前代码中,将ByteArray(bitmapdata(转换为String(btm1/s(只是为了将其转换回ByteArray(s.toByteArray()(。你为什么还要这么做?

最新更新