Biblioteca de carga de imágenes Compose-jb load-the-image, adecuada para el escritorio KMM Compose (Windows, Linux, MacOs)

prefacio

Hay muchos marcos de carga de imágenes excelentes en la plataforma Android, como Glide, Picasso, Fresco

Y el marco de carga de imágenes en Compose-jetpack tiene Coil

Sin embargo, no hay un marco de carga de imágenes en Compose-jb por el momento.Sucede que uso Compose-jb para escribir algunas herramientas pequeñas, y hay una demanda para la carga de imágenes, así que escribí una biblioteca de carga de imágenes con funciones simples basado en la biblioteca de carga de imágenes de la plataforma Android.

El proyecto es de código abierto, dirección:  load-the-image (github.com)  Bienvenido a star

Ejemplo:

Función

1. Soporte simple para la carga de imágenes en múltiples plataformas de escritorio (algunos formatos se cargan de forma asíncrona)

2. Admite múltiples formatos: enlaces de red, archivos locales, rutas de recursos, InputStream, mapa de bits, imagen, ByteArray, etc., y admite formatos compatibles personalizados

3. Admite caché doble: caché de memoria y caché local, caché de memoria admite configuración de memoria máxima, caché local admite configuración de ruta de caché o configuración de caché personalizada

texto

Cómo utilizar

En primer lugar, cuando usamos Compose para mostrar imágenes, generalmente usamos la función Imagen. El primer parámetro de entrada de una de las funciones es de tipo Painter, y nuestra API devuelve un objeto de tipo Painter, por lo que el método de uso es muy simple. como se muestra en el siguiente código:

//url="https://img.zcool.cn/community/017e625e57415ea801216518c25819.jpg@1280w_1l_2o_100sh.jpg"
Image(rememberImagePainter(url), "")

Sí, es muy fácil de usar, por supuesto, debe consultar las dependencias remotas para usar el proyecto.

Configuracion basica

De forma predeterminada, Compose-jb está configurado con gradle+kts emmm

1. Agregue a build.gradle.kts en su directorio raíz:

buildscript {
    repositories {
        maven("https://jitpack.io")//this
        ...
    }
}

allprojects {
    repositories {
        maven("https://jitpack.io")//this
        ...
    }
}

2. Agregue a build.gradle.kts en el directorio de código (generalmente escritorio) de su proyecto Compose-jb:

kotlin {
    sourceSets {
        val jvmMain by getting {
            dependencies {
                ...
                implementation("com.github.ltttttttttttt:load-the-image:1.0.2")//this
            }
        }
    }
}

 pd: La referencia de la última versión: Github  o  JitPack

3. Recomendación: configuración unificada de la ruta del mapa de fallas que se muestra cuando falla la carga:

fun main() {
    LoadTheImageManager.defaultErrorImagePath = "drawable-xxhdpi/load_error.jpeg"//this
    application {
        Window(onCloseRequest = ::exitApplication) {
            MaterialTheme {
                Image(rememberImagePainter("https://img.zcool.cn/community/017e625e57415ea801216518c25819.jpg@1280w_1l_2o_100sh.jpg"),"")
            }
        }
    }
}

pd: la ubicación del recurso es más o menos así, por supuesto, puede personalizar la ubicación del recurso (puede verificar el código en github):

4. Recomendación: actualice la versión de compose-jb (desktop) a 1.1.1 o superior

De acuerdo con los comentarios, se encontró que compose-jb versión 1.1.0 tiene un error y no se iniciará

configuración personalizada

1. Configure la imagen de marcador de posición cuando se carga la imagen y la imagen que no se pudo cargar

En primer lugar, la imagen que no se pudo cargar en la configuración unificada se ha escrito en el tercer punto anterior

Configurado por separado, hay un parámetro placeholderResource en el método RememberImagePainter en formato String para indicar la imagen del marcador de posición:

Utilizar de la siguiente manera:

rememberImagePainter(url,占位图)

 Si desea configurar el mapa de marcadores de posición y el mapa de errores de carga y otros parámetros por separado, puede usar los parámetros del tipo DataToBeLoaded, como se muestra a continuación:


    rememberImagePainter(DataToBeLoaded(url).apply {
        placeholderResource = 占位图
        errorImagePath = 加载失败图
    })

2. Modifique el tamaño de la memoria caché:

LoadTheImageManager.memoryCache = ImageLruMemoryCache(99999/*最大的字节大小*/)

El tamaño predeterminado de la memoria caché es: maxOf(50M, 1% de la memoria total)

La estrategia de caché de memoria predeterminada usa LRU. Si desea cambiarlo a otra estrategia, puede personalizar una clase, luego implementar la interfaz ImageCache, implementar el método correspondiente y luego modificarlo:

LoadTheImageManager.memoryCache = 你的实现类

3. Modifique la ubicación del caché de archivos:

LoadTheImageManager.fileCache = ImageFileCache(File("C://test_dir"))

 La ubicación predeterminada de la caché de archivos es: Esta computadora->Imagen->Cargar la caché de imágenes

El caché predeterminado usa md5 como nombre de archivo. Si desea personalizar la política o el método de caché de archivos, puede personalizar una clase, luego implementar la interfaz ImageCache, implementar el método correspondiente y luego modificarlo:

LoadTheImageManager.fileCache = 你的实现类

4. Modifique el motor de red utilizado para la carga de imágenes de red:

 El motor de red predeterminado usa HttpURLConnection que viene con jvm. Si desea cambiarlo a otra red, puede personalizar una clase, luego implementar la interfaz HttpLoader, implementar el método correspondiente y luego modificarlo:

LoadTheImageManager.httpLoader = 你的实现类

 5. La función de carga de imágenes de RememberImagePainter admite múltiples formatos de entrada y se puede personalizar

Además de estos formatos definidos, también puede personalizar su propio soporte y análisis de formatos:

Primero, personalice una clase para implementar la interfaz LoadTheImage, juzgue si admite estos datos en la función canLoad y luego cárguela. Por ejemplo, lo siguiente admite la carga de matrices de bytes:

 Luego configurarlo:

LoadTheImageManager.loadTheImage.add(ByteArrayLoadTheImage())//当然目前此库已经支持字节数组了,不需要手动添加ByteArrayLoadTheImage

 Finalmente se puede usar así:

rememberImagePainter(DataToBeLoaded(byteArrayOf()))//最好还是自己封装一下函数

Configuración multiplataforma

Generalmente, al usar Compose-jb, se puede desarrollar un proyecto multiplataforma (KMM) en conjunto, como la plataforma Android y la plataforma Web, y también podemos adaptarlo para hacer un código de carga de imágenes multiplataforma.

El lado del escritorio usa esta biblioteca para cargar la imagen, y el lado de Android usa Coil

configuración

Primero, sobre la base de la configuración básica, primero agregue build.gradle.kts en su carpeta común:

val desktopMain by getting{
	dependencies {
        ...
		implementation 'com.github.ltttttttttttt:load-the-image:1.0.2'
	}
}

Agregue una función multiplataforma a commonMain:

@Composable
expect fun rememberImagePainter(url: String): Painter

Implemente esta función en androidMain (y otras plataformas (si las hay)), usando Coil:

@Composable
actual fun rememberImagePainter(url: String): Painter =
    coil.compose.rememberImagePainter(data = url)

Implemente esta función en desktopMain:

@Composable
actual fun rememberImagePainter(url: String): Painter =
    com.lt.load_the_image.rememberImagePainter(url)

Luego, la función definida se puede usar en la plataforma de escritorio o en la plataforma de código compartido

Si la configuración no tiene éxito, también puede ver directamente cómo configurarlo en mi github

El proyecto es de código abierto, dirección:  load-the-image (github.com)  Bienvenido a star

fin

Supongo que te gusta

Origin blog.csdn.net/qq_33505109/article/details/125194044
Recomendado
Clasificación