Shoaib khalid
10/21/2023, 2:57 PMandroid.graphics.BitmapFactory
?Michael Paus
10/21/2023, 3:28 PMimport org.jetbrains.skia.Image
val PNG_BASE64_HEADER = "data:image/png;base64,"
@OptIn(ExperimentalEncodingApi::class)
private fun resolveImage(imgBase64: String?): ByteArray? {
try {
return imgBase64?.let {
if (it.startsWith(PNG_BASE64_HEADER)) {
Base64.Default.decode(it.replaceFirst(PNG_BASE64_HEADER,""))
} else {
log.debug { "Unknown image format: '${imgBase64.take(20)}'" }
null
}
}
} catch (e: Exception) {
throw Exception("Could not resolve image from base 64 string.", e)
}
}
fun imageBitmapFromBytes(encodedImageData: ByteArray): ImageBitmap {
return Image.makeFromEncoded(encodedImageData).toComposeImageBitmap()
}
Should also work on iOS but I haven’t tested it there.Shoaib khalid
10/21/2023, 3:41 PMFunction invocation 'Image(...)' expected
Michael Paus
10/21/2023, 4:06 PMoverride fun imageBitmapFromBytes(encodedImageData: ByteArray): ImageBitmap {
return Image.makeFromEncoded(encodedImageData).toComposeImageBitmap()
}
Check the import statement for Image
import org.jetbrains.skia.Image
This code is of course platform specific, so you can’t use it in common.Shoaib khalid
10/21/2023, 4:17 PMMichael Paus
10/21/2023, 4:39 PMoverride fun imageBitmapFromBytes(encodedImageData: ByteArray): ImageBitmap {
return BitmapFactory.decodeByteArray(encodedImageData, 0, encodedImageData.size).asImageBitmap()
}
In my code these variants are part of a class which is declared via expect/actual. You can then call imageBitmapFromBytes
in your common code.Shoaib khalid
10/22/2023, 9:59 AM