|
@@ -27,8 +27,6 @@ import tachiyomi.decoder.ImageDecoder
|
|
|
import java.io.BufferedInputStream
|
|
|
import java.io.ByteArrayInputStream
|
|
|
import java.io.ByteArrayOutputStream
|
|
|
-import java.io.File
|
|
|
-import java.io.FileOutputStream
|
|
|
import java.io.InputStream
|
|
|
import java.net.URLConnection
|
|
|
import kotlin.math.abs
|
|
@@ -202,7 +200,7 @@ object ImageUtil {
|
|
|
/**
|
|
|
* Splits tall images to improve performance of reader
|
|
|
*/
|
|
|
- fun splitTallImage(imageFile: UniFile, imageFilePath: String): Boolean {
|
|
|
+ fun splitTallImage(tmpDir: UniFile, imageFile: UniFile, filenamePrefix: String): Boolean {
|
|
|
if (isAnimatedAndSupported(imageFile.openInputStream()) || !isTallImage(imageFile.openInputStream())) {
|
|
|
return true
|
|
|
}
|
|
@@ -221,11 +219,15 @@ object ImageUtil {
|
|
|
|
|
|
return try {
|
|
|
splitDataList.forEach { splitData ->
|
|
|
- val splitPath = splitImagePath(imageFilePath, splitData.index)
|
|
|
+ val splitImageName = splitImageName(filenamePrefix, splitData.index)
|
|
|
+ // Remove pre-existing split if exists (this split shouldn't exist under normal circumstances)
|
|
|
+ tmpDir.findFile(splitImageName)?.delete()
|
|
|
+
|
|
|
+ val splitFile = tmpDir.createFile(splitImageName)
|
|
|
|
|
|
val region = Rect(0, splitData.topOffset, splitData.splitWidth, splitData.bottomOffset)
|
|
|
|
|
|
- FileOutputStream(splitPath).use { outputStream ->
|
|
|
+ splitFile.openOutputStream().use { outputStream ->
|
|
|
val splitBitmap = bitmapRegionDecoder.decodeRegion(region, options)
|
|
|
splitBitmap.compress(Bitmap.CompressFormat.JPEG, 100, outputStream)
|
|
|
splitBitmap.recycle()
|
|
@@ -240,8 +242,8 @@ object ImageUtil {
|
|
|
} catch (e: Exception) {
|
|
|
// Image splits were not successfully saved so delete them and keep the original image
|
|
|
splitDataList
|
|
|
- .map { splitImagePath(imageFilePath, it.index) }
|
|
|
- .forEach { File(it).delete() }
|
|
|
+ .map { splitImageName(filenamePrefix, it.index) }
|
|
|
+ .forEach { tmpDir.findFile(it)?.delete() }
|
|
|
logcat(LogPriority.ERROR, e)
|
|
|
false
|
|
|
} finally {
|
|
@@ -249,8 +251,7 @@ object ImageUtil {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- private fun splitImagePath(imageFilePath: String, index: Int) =
|
|
|
- imageFilePath.substringBeforeLast(".") + "__${"%03d".format(index + 1)}.jpg"
|
|
|
+ private fun splitImageName(filenamePrefix: String, index: Int) = "${filenamePrefix}__${"%03d".format(index + 1)}.jpg"
|
|
|
|
|
|
/**
|
|
|
* Check whether the image is a long Strip that needs splitting
|