如何在 Kotlin Compose 桌面中从远程 url 加载图像?

Tho*_*iao 8 android-jetpack-compose compose-desktop

如何在 Kotlin Compose 桌面中从远程 url 加载图像?

在Android中它使用大肠杆菌作为官方样本

@Composable
fun NetworkImage(
    url: String,
    modifier: Modifier = Modifier,
    contentScale: ContentScale = ContentScale.Crop,
    placeholderColor: Color? = MaterialTheme.colors.compositedOnSurface(0.2f)
) {
    CoilImage(
        data = url,
        modifier = modifier,
        contentScale = contentScale,
        loading = {
            if (placeholderColor != null) {
                Spacer(
                    modifier = Modifier
                        .fillMaxSize()
                        .background(placeholderColor)
                )
            }
        }
    )
}
Run Code Online (Sandbox Code Playgroud)

bu 作为桌面应用程序,不支持 aar。

Sau*_*rat 7

用于javax.imageio.ImageIO从网络加载图像:

import androidx.compose.ui.graphics.ImageBitmap
import androidx.compose.ui.graphics.asImageBitmap
import org.jetbrains.skija.Image
import java.io.ByteArrayOutputStream
import java.net.HttpURLConnection
import java.net.URL
import javax.imageio.ImageIO

fun loadNetworkImage(link: String): ImageBitmap {
    val url = URL(link)
    val connection = url.openConnection() as HttpURLConnection
    connection.connect()

    val inputStream = connection.inputStream
    val bufferedImage = ImageIO.read(inputStream)

    val stream = ByteArrayOutputStream()
    ImageIO.write(bufferedImage, "png", stream)
    val byteArray = stream.toByteArray()

    return Image.makeFromEncoded(byteArray).asImageBitmap()
}
Run Code Online (Sandbox Code Playgroud)

然后将其用作:

Image(
    bitmap = loadNetworkImage("Your image link")
)
Run Code Online (Sandbox Code Playgroud)

  • 实际上,我找到了像 Glide 或 Coli 一样的解决方案,用于从远程 url 获取、解码和显示图像,并具有暂停、恢复等状态。但是谢谢 @Saurabh Thorat (2认同)