|
@@ -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 createBitmap(inputStream, width, height)
|
|
|
|
|
|
|
+ return kotlin.runCatching {
|
|
|
|
|
+ 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 getSize(inputStream)
|
|
|
|
|
|
|
+ return kotlin.runCatching {
|
|
|
|
|
+ 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 canvas = Canvas(bitmap)
|
|
|
|
|
- canvas.drawPicture(drawable.picture)
|
|
|
|
|
|
|
+ val viewBox: RectF? = svg.documentViewBox
|
|
|
|
|
+ if (viewBox == null && size.width > 0 && size.height > 0) {
|
|
|
|
|
+ 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
|
|
|
}
|
|
}
|
|
|
|
|
|