Remote convert to png preload

This commit is contained in:
niuhuan 2022-05-09 09:45:08 +08:00
parent 087b09fe68
commit 7a8e70e693
6 changed files with 1 additions and 89 deletions

View File

@ -96,7 +96,6 @@ class MainActivity : FlutterActivity() {
// 获取可以迁移数据地址
"androidGetExtendDirs" -> androidGetExtendDirs()
"androidSecureFlag" -> androidSecureFlag(call.argument("flag")!!)
"convertToPNG" -> convertToPNG(call.argument("path")!!)
else -> {
notImplementedToken
}
@ -347,28 +346,6 @@ class MainActivity : FlutterActivity() {
}
}
private fun convertToPNG(path: String): ByteArray {
BitmapFactory.decodeFile(path)?.let { bitmap ->
val maxWidth =
when {
Build.VERSION.SDK_INT >= Build.VERSION_CODES.R -> windowManager.currentWindowMetrics.bounds.width()
Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1 -> {
val displayMetrics = DisplayMetrics()
windowManager.defaultDisplay.getRealMetrics(displayMetrics)
displayMetrics.widthPixels
}
else -> throw Exception("not support")
}
if (bitmap.width > maxWidth) {
val newHeight = maxWidth * bitmap.height / bitmap.width
val newImage = Bitmap.createScaledBitmap(bitmap, maxWidth, newHeight, true)
return compressBitMap(newImage)
}
return compressBitMap(bitmap)
}
throw Exception("error pic")
}
private fun compressBitMap(bitmap: Bitmap): ByteArray {
val bos = ByteArrayOutputStream()
bos.use { bos ->

View File

@ -684,11 +684,6 @@ class Method {
return _flatInvoke("saveDownloadThreadCount", "$value");
}
/// PNG
Future<Uint8List> convertToPNG(String path) async {
return await _channel.invokeMethod("convertToPNG", {"path": path});
}
/// HTTP-GET-STRING
Future<String> defaultHttpClientGet(String url) async {
return await _flatInvoke("defaultHttpClientGet", url);

View File

@ -1,48 +0,0 @@
import 'dart:io';
import 'package:flutter/material.dart';
import '../Common.dart';
import '../Method.dart';
const _propertyName = "convertToPNG";
var _convertToPNG = false;
Future initConvertToPNG() async {
if (Platform.isAndroid) {
_convertToPNG =
(await method.loadProperty(_propertyName, "false")) == "true";
}
}
bool convertToPNG() {
return _convertToPNG;
}
Future<void> _chooseConvertToPNGSetting(BuildContext context) async {
String? result = await chooseListDialog<String>(context, "超大图片缩放", ["", ""],
tips: "会增加耗电\n可以解决部分漫画崩溃的问题");
if (result != null) {
var target = result == "";
await method.saveProperty(_propertyName, "$target");
_convertToPNG = target;
}
}
Widget convertToPNGSetting() {
if (Platform.isAndroid) {
return StatefulBuilder(
builder: (BuildContext context, void Function(void Function()) setState) {
return ListTile(
title: const Text("读取到超大图片时进行缩放(防止崩溃)"),
subtitle: Text(_convertToPNG ? "" : ""),
onTap: () async {
await _chooseConvertToPNGSetting(context);
setState(() {});
},
);
},
);
}
return Container();
}

View File

@ -6,7 +6,6 @@ import 'package:pikapika/basic/config/AutoClean.dart';
import 'package:pikapika/basic/config/AutoFullScreen.dart';
import 'package:pikapika/basic/config/ChooserRoot.dart';
import 'package:pikapika/basic/config/ContentFailedReloadAction.dart';
import 'package:pikapika/basic/config/ConvertToPNG.dart';
import 'package:pikapika/basic/config/DownloadAndExportPath.dart';
import 'package:pikapika/basic/config/DownloadThreadCount.dart';
import 'package:pikapika/basic/config/FullScreenAction.dart';
@ -80,7 +79,6 @@ class _InitScreenState extends State<InitScreen> {
await initDownloadAndExportPath();
await initAndroidSecureFlag();
await initDownloadThreadCount();
await initConvertToPNG();
await initNoAnimation();
await initExportRename();
await initVersion();

View File

@ -8,7 +8,6 @@ import 'package:pikapika/basic/config/AutoClean.dart';
import 'package:pikapika/basic/config/AutoFullScreen.dart';
import 'package:pikapika/basic/config/ChooserRoot.dart';
import 'package:pikapika/basic/config/ContentFailedReloadAction.dart';
import 'package:pikapika/basic/config/ConvertToPNG.dart';
import 'package:pikapika/basic/config/DownloadAndExportPath.dart';
import 'package:pikapika/basic/config/DownloadThreadCount.dart';
import 'package:pikapika/basic/config/ExportRename.dart';
@ -66,7 +65,6 @@ class SettingsScreen extends StatelessWidget {
const NetworkSetting(),
const Divider(),
qualitySetting(),
convertToPNGSetting(),
readerTypeSetting(),
readerDirectionSetting(),
readerSliderPositionSetting(),

View File

@ -6,20 +6,12 @@ import 'package:pikapika/basic/Common.dart';
import 'package:pikapika/basic/Cross.dart';
import 'package:pikapika/basic/Method.dart';
import 'package:flutter_svg/svg.dart';
import 'package:pikapika/basic/config/ConvertToPNG.dart';
import 'package:pikapika/basic/config/ImageAddress.dart';
import 'dart:io';
import 'dart:ui' as ui show Codec;
import '../FilePhotoViewScreen.dart';
Future<Uint8List> _loadImageFile(String path) {
if (convertToPNG()) {
return method.convertToPNG(path);
}
return File(path).readAsBytes();
}
//
class ResourceFileImageProvider
extends ImageProvider<ResourceFileImageProvider> {
@ -46,7 +38,7 @@ class ResourceFileImageProvider
Future<ui.Codec> _loadAsync(ResourceFileImageProvider key) async {
assert(key == this);
return PaintingBinding.instance!
.instantiateImageCodec(await _loadImageFile(path));
.instantiateImageCodec(await File(path).readAsBytes());
}
@override