From 115ca980e9847d44c8327fdd1c1a3049f280b14d Mon Sep 17 00:00:00 2001 From: Xwite <1797350009@qq.com> Date: Tue, 1 Mar 2022 08:45:22 +0800 Subject: [PATCH] =?UTF-8?q?=E5=B0=81=E9=9D=A2=E6=94=AF=E6=8C=81dataURL?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/java/io/legado/app/constant/AppPattern.kt | 2 ++ app/src/main/java/io/legado/app/help/glide/ImageLoader.kt | 8 ++++++++ .../java/io/legado/app/model/analyzeRule/AnalyzeUrl.kt | 2 +- 3 files changed, 11 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/io/legado/app/constant/AppPattern.kt b/app/src/main/java/io/legado/app/constant/AppPattern.kt index 98df27df0..0ca092f2d 100644 --- a/app/src/main/java/io/legado/app/constant/AppPattern.kt +++ b/app/src/main/java/io/legado/app/constant/AppPattern.kt @@ -10,6 +10,8 @@ object AppPattern { //匹配格式化后的图片格式 val imgPattern: Pattern = Pattern.compile("]*src=\"([^\"]*(?:\"[^>]+\\})?)\"[^>]*>") + //dataURL图片类型 + val dataUriRegex = Regex("data:[\\w/\\-\\.]+;base64,(.*)") val nameRegex = Regex("\\s+作\\s*者.*|\\s+\\S+\\s+著") val authorRegex = Regex("^\\s*作\\s*者[::\\s]+|\\s+著") diff --git a/app/src/main/java/io/legado/app/help/glide/ImageLoader.kt b/app/src/main/java/io/legado/app/help/glide/ImageLoader.kt index c6d011aeb..cdf5b5014 100644 --- a/app/src/main/java/io/legado/app/help/glide/ImageLoader.kt +++ b/app/src/main/java/io/legado/app/help/glide/ImageLoader.kt @@ -4,9 +4,11 @@ import android.content.Context import android.graphics.Bitmap import android.graphics.drawable.Drawable import android.net.Uri +import android.util.Base64 import androidx.annotation.DrawableRes import com.bumptech.glide.Glide import com.bumptech.glide.RequestBuilder +import io.legado.app.constant.AppPattern.dataUriRegex import io.legado.app.model.analyzeRule.AnalyzeUrl import io.legado.app.utils.isAbsUrl import io.legado.app.utils.isContentScheme @@ -19,8 +21,14 @@ object ImageLoader { * 自动判断path类型 */ fun load(context: Context, path: String?): RequestBuilder { + val dataUriFindResult = dataUriRegex.find(path ?: "") return when { path.isNullOrEmpty() -> Glide.with(context).load(path) + dataUriFindResult != null -> { + val dataUriBase64 = dataUriFindResult.groupValues[1] + val byteArray = Base64.decode(dataUriBase64, Base64.DEFAULT) + Glide.with(context).load(byteArray) + } path.isAbsUrl() -> { val url = kotlin.runCatching { AnalyzeUrl(path).getGlideUrl() diff --git a/app/src/main/java/io/legado/app/model/analyzeRule/AnalyzeUrl.kt b/app/src/main/java/io/legado/app/model/analyzeRule/AnalyzeUrl.kt index d4c0b603e..8dc3ed72f 100644 --- a/app/src/main/java/io/legado/app/model/analyzeRule/AnalyzeUrl.kt +++ b/app/src/main/java/io/legado/app/model/analyzeRule/AnalyzeUrl.kt @@ -8,6 +8,7 @@ import com.bumptech.glide.load.model.LazyHeaders import io.legado.app.constant.AppConst.SCRIPT_ENGINE import io.legado.app.constant.AppConst.UA_NAME import io.legado.app.constant.AppPattern.JS_PATTERN +import io.legado.app.constant.AppPattern.dataUriRegex import io.legado.app.data.entities.BaseSource import io.legado.app.data.entities.Book import io.legado.app.data.entities.BookChapter @@ -463,7 +464,6 @@ class AnalyzeUrl( */ suspend fun getByteArrayAwait(): ByteArray { @Suppress("RegExpRedundantEscape") - val dataUriRegex = Regex("data:[\\w/\\-\\.]+;base64,(.*)") val dataUriFindResult = dataUriRegex.find(urlNoQuery) val concurrentRecord = fetchStart() setCookie(source?.getKey())