Implement Nosrob's Image Discrambler (#881)
Implement Nosrob's Japscan Image Discrambler
This commit is contained in:
parent
8d4ccd2b03
commit
9698fd0711
|
@ -5,7 +5,7 @@ ext {
|
||||||
appName = 'Tachiyomi: Japscan'
|
appName = 'Tachiyomi: Japscan'
|
||||||
pkgNameSuffix = 'fr.japscan'
|
pkgNameSuffix = 'fr.japscan'
|
||||||
extClass = '.Japscan'
|
extClass = '.Japscan'
|
||||||
extVersionCode = 6
|
extVersionCode = 7
|
||||||
libVersion = '1.2'
|
libVersion = '1.2'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -7,21 +7,24 @@ package eu.kanade.tachiyomi.extension.fr.japscan
|
||||||
* @version 1.0
|
* @version 1.0
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
import android.graphics.Bitmap
|
||||||
|
import android.graphics.BitmapFactory
|
||||||
|
import android.graphics.Canvas
|
||||||
|
import android.graphics.Rect
|
||||||
import com.google.gson.JsonObject
|
import com.google.gson.JsonObject
|
||||||
import com.google.gson.JsonParser
|
import com.google.gson.JsonParser
|
||||||
import eu.kanade.tachiyomi.network.GET
|
import eu.kanade.tachiyomi.network.GET
|
||||||
import eu.kanade.tachiyomi.network.POST
|
import eu.kanade.tachiyomi.network.POST
|
||||||
import eu.kanade.tachiyomi.source.model.*
|
import eu.kanade.tachiyomi.source.model.*
|
||||||
import eu.kanade.tachiyomi.source.online.ParsedHttpSource
|
import eu.kanade.tachiyomi.source.online.ParsedHttpSource
|
||||||
import okhttp3.FormBody
|
import okhttp3.*
|
||||||
import okhttp3.Request
|
import org.apache.commons.lang3.StringUtils
|
||||||
import okhttp3.Response
|
|
||||||
import okhttp3.OkHttpClient
|
|
||||||
import org.jsoup.nodes.Document
|
import org.jsoup.nodes.Document
|
||||||
import org.jsoup.nodes.Element
|
import org.jsoup.nodes.Element
|
||||||
|
import java.io.ByteArrayOutputStream
|
||||||
|
import java.io.InputStream
|
||||||
import java.text.ParseException
|
import java.text.ParseException
|
||||||
import java.text.SimpleDateFormat
|
import java.text.SimpleDateFormat
|
||||||
import org.apache.commons.lang3.StringUtils
|
|
||||||
|
|
||||||
class Japscan : ParsedHttpSource() {
|
class Japscan : ParsedHttpSource() {
|
||||||
|
|
||||||
|
@ -35,7 +38,18 @@ class Japscan : ParsedHttpSource() {
|
||||||
|
|
||||||
override val supportsLatest = true
|
override val supportsLatest = true
|
||||||
|
|
||||||
override val client: OkHttpClient = network.cloudflareClient
|
override val client: OkHttpClient = network.cloudflareClient.newBuilder().addInterceptor { chain ->
|
||||||
|
val request = chain.request()
|
||||||
|
val response = chain.proceed(request)
|
||||||
|
if (!request.url().pathSegments().contains("clel")) return@addInterceptor response
|
||||||
|
|
||||||
|
val res = response.body()!!.byteStream().use {
|
||||||
|
decodeImage(it)
|
||||||
|
}
|
||||||
|
|
||||||
|
val rb = ResponseBody.create(MediaType.parse("image/png"), res)
|
||||||
|
response.newBuilder().body(rb).build()
|
||||||
|
}.build()
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
val dateFormat by lazy {
|
val dateFormat by lazy {
|
||||||
|
@ -167,4 +181,49 @@ class Japscan : ParsedHttpSource() {
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun imageUrlParse(document: Document): String = ""
|
override fun imageUrlParse(document: Document): String = ""
|
||||||
|
|
||||||
|
private fun decodeImage(img: InputStream): ByteArray {
|
||||||
|
val input = BitmapFactory.decodeStream(img)
|
||||||
|
|
||||||
|
val xResult = Bitmap.createBitmap(input.width,
|
||||||
|
input.height,
|
||||||
|
Bitmap.Config.ARGB_8888)
|
||||||
|
val xCanvas = Canvas(xResult)
|
||||||
|
|
||||||
|
val result = Bitmap.createBitmap(input.width,
|
||||||
|
input.height,
|
||||||
|
Bitmap.Config.ARGB_8888)
|
||||||
|
val canvas = Canvas(result)
|
||||||
|
|
||||||
|
for (x in 0..input.width step 200) {
|
||||||
|
val col1 = Rect(x, 0, x + 100, input.height)
|
||||||
|
if ((x + 200) <= input.width) {
|
||||||
|
val col2 = Rect(x + 100, 0, x + 200, input.height)
|
||||||
|
xCanvas.drawBitmap(input, col1, col2, null)
|
||||||
|
xCanvas.drawBitmap(input, col2, col1, null)
|
||||||
|
} else {
|
||||||
|
val col2 = Rect(x + 100, 0, input.width, input.height)
|
||||||
|
xCanvas.drawBitmap(input, col1, col1, null)
|
||||||
|
xCanvas.drawBitmap(input, col2, col2, null)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (y in 0..input.height step 200) {
|
||||||
|
val row1 = Rect(0, y, input.width, y + 100)
|
||||||
|
|
||||||
|
if ((y + 200) <= input.height) {
|
||||||
|
val row2 = Rect(0, y + 100, input.width, y + 200)
|
||||||
|
canvas.drawBitmap(xResult, row1, row2, null)
|
||||||
|
canvas.drawBitmap(xResult, row2, row1, null)
|
||||||
|
} else {
|
||||||
|
val row2 = Rect(0, y + 100, input.width, input.height)
|
||||||
|
canvas.drawBitmap(xResult, row1, row1, null)
|
||||||
|
canvas.drawBitmap(xResult, row2, row2, null)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
val output = ByteArrayOutputStream()
|
||||||
|
result.compress(Bitmap.CompressFormat.PNG, 100, output)
|
||||||
|
return output.toByteArray()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue