Support svg
This commit is contained in:
@@ -2,13 +2,11 @@ package io.legado.app.utils
|
|||||||
|
|
||||||
import android.graphics.Canvas
|
import android.graphics.Canvas
|
||||||
import android.graphics.Bitmap
|
import android.graphics.Bitmap
|
||||||
import android.graphics.drawable.PictureDrawable
|
import android.graphics.RectF
|
||||||
import android.util.Size
|
import android.util.Size
|
||||||
import java.io.FileInputStream
|
import java.io.FileInputStream
|
||||||
import java.io.InputStream
|
import java.io.InputStream
|
||||||
import com.caverock.androidsvg.SVG
|
import com.caverock.androidsvg.SVG
|
||||||
import com.caverock.androidsvg.PreserveAspectRatio
|
|
||||||
import com.caverock.androidsvg.SVGParseException
|
|
||||||
import kotlin.math.max
|
import kotlin.math.max
|
||||||
|
|
||||||
@Suppress("WeakerAccess", "MemberVisibilityCanBePrivate")
|
@Suppress("WeakerAccess", "MemberVisibilityCanBePrivate")
|
||||||
@@ -16,12 +14,13 @@ object SvgUtils {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 从Svg中解码bitmap
|
* 从Svg中解码bitmap
|
||||||
* https://github.com/qoqa/glide-svg/blob/master/library/src/main/java/ch/qoqa/glide/svg/SvgBitmapTranscoder.kt
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
fun createBitmap(filePath: String, width: Int, height: Int? = null): Bitmap? {
|
fun createBitmap(filePath: String, width: Int, height: Int? = null): Bitmap? {
|
||||||
val inputStream = FileInputStream(filePath)
|
return kotlin.runCatching {
|
||||||
return createBitmap(inputStream, width, height)
|
val inputStream = FileInputStream(filePath)
|
||||||
|
createBitmap(inputStream, width, height)
|
||||||
|
}.getOrNull()
|
||||||
}
|
}
|
||||||
|
|
||||||
fun createBitmap(inputStream: InputStream, width: Int, height: Int? = null): Bitmap? {
|
fun createBitmap(inputStream: InputStream, width: Int, height: Int? = null): Bitmap? {
|
||||||
@@ -33,8 +32,10 @@ object SvgUtils {
|
|||||||
|
|
||||||
//获取svg图片大小
|
//获取svg图片大小
|
||||||
fun getSize(filePath: String): Size? {
|
fun getSize(filePath: String): Size? {
|
||||||
val inputStream = FileInputStream(filePath)
|
return kotlin.runCatching {
|
||||||
return getSize(inputStream)
|
val inputStream = FileInputStream(filePath)
|
||||||
|
getSize(inputStream)
|
||||||
|
}.getOrNull()
|
||||||
}
|
}
|
||||||
|
|
||||||
fun getSize(inputStream: InputStream): Size? {
|
fun getSize(inputStream: InputStream): Size? {
|
||||||
@@ -56,13 +57,20 @@ object SvgUtils {
|
|||||||
hRatio > 1 -> hRatio
|
hRatio > 1 -> hRatio
|
||||||
else -> 1
|
else -> 1
|
||||||
}
|
}
|
||||||
svg.documentPreserveAspectRatio = PreserveAspectRatio.START
|
|
||||||
val picture = svg.renderToPicture(size.width / ratio, size.height / ratio)
|
|
||||||
val drawable = PictureDrawable(picture)
|
|
||||||
|
|
||||||
val bitmap = Bitmap.createBitmap(size.width / ratio, size.height / ratio, Bitmap.Config.ARGB_8888)
|
val viewBox: RectF? = svg.documentViewBox
|
||||||
val canvas = Canvas(bitmap)
|
if (viewBox == null && size.width > 0 && size.height > 0) {
|
||||||
canvas.drawPicture(drawable.picture)
|
svg.setDocumentViewBox(0f, 0f, svg.documentWidth, svg.documentHeight)
|
||||||
|
}
|
||||||
|
|
||||||
|
svg.setDocumentWidth("100%")
|
||||||
|
svg.setDocumentHeight("100%")
|
||||||
|
|
||||||
|
val bitmapWidth = size.width / ratio
|
||||||
|
val bitmapHeight = size.height / ratio
|
||||||
|
val bitmap = Bitmap.createBitmap(bitmapWidth, bitmapHeight, Bitmap.Config.ARGB_8888)
|
||||||
|
|
||||||
|
svg.renderToCanvas(Canvas(bitmap))
|
||||||
return bitmap
|
return bitmap
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user