Last active
March 19, 2022 18:07
-
-
Save jershell/bf6d628e322e946261b916d581452728 to your computer and use it in GitHub Desktop.
jetpack compose desktop svg loader
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// implementation("org.apache.xmlgraphics:batik-all:1.13") | |
// and load svg from resources/svg/pic.svg | |
// use like Icon(asset = svgAsset("svg/play-button.svg"), modifier = Modifier.width(36.dp) + Modifier.height(36.dp)) | |
import androidx.compose.ui.graphics.ImageAsset | |
import androidx.compose.ui.graphics.asImageAsset | |
import org.apache.batik.transcoder.TranscoderInput | |
import org.apache.batik.transcoder.TranscoderOutput | |
import org.apache.batik.transcoder.image.PNGTranscoder | |
import org.jetbrains.skija.Image | |
import java.io.ByteArrayOutputStream | |
fun svgAsset(path: String): ImageAsset { | |
val resource = Thread.currentThread().contextClassLoader.getResource(path) | |
requireNotNull(resource) { "Resource $path not found" } | |
return resource.openStream().use { | |
val buffer = ByteArrayOutputStream() | |
val transcoderOutput = TranscoderOutput(buffer) | |
// Convert SVG to PNG | |
val pngTranscoder = PNGTranscoder() | |
pngTranscoder.transcode(TranscoderInput(it), transcoderOutput) | |
val ba = buffer.toByteArray() | |
// Clean Up | |
buffer.flush() | |
buffer.close() | |
Image.makeFromEncoded(ba).asImageAsset() | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment