提交 bde9d52e authored 作者: JarvanMo's avatar JarvanMo

TRY FIX

上级 1cb12f56
...@@ -118,7 +118,12 @@ object WeChatPluginHandler { ...@@ -118,7 +118,12 @@ object WeChatPluginHandler {
private suspend fun getImageByteArrayCommon(registrar: PluginRegistry.Registrar?,imagePath:String):ByteArray{ private suspend fun getImageByteArrayCommon(registrar: PluginRegistry.Registrar?,imagePath:String):ByteArray{
return async(CommonPool){ return async(CommonPool){
ShareImageUtil.getImageData(registrar, imagePath) val r = ShareImageUtil.getImageData(registrar, imagePath)
if (r == null) {
byteArrayOf()
}else{
r
}
}.await() }.await()
} }
...@@ -148,13 +153,13 @@ object WeChatPluginHandler { ...@@ -148,13 +153,13 @@ object WeChatPluginHandler {
if (thumbnail.isNullOrBlank()){ if (thumbnail.isNullOrBlank()){
thumbnail = imagePath thumbnail = imagePath
} }
val thumbnailData = getThumbnailByteArrayCommon(registrar,thumbnail!!) // val thumbnailData = getThumbnailByteArrayCommon(registrar,thumbnail!!)
handleShareImage(imgObj,call,thumbnailData,result) handleShareImage(imgObj,call,null,result)
} }
} }
private fun handleShareImage(imgObj:WXImageObject,call: MethodCall,thumbnailData: ByteArray, result: MethodChannel.Result){ private fun handleShareImage(imgObj:WXImageObject,call: MethodCall,thumbnailData: ByteArray?, result: MethodChannel.Result){
val msg = WXMediaMessage() val msg = WXMediaMessage()
msg.mediaObject = imgObj msg.mediaObject = imgObj
......
package com.jarvan.fluwx.utils; package com.jarvan.fluwx.utils;
import android.content.Context; import android.content.Context;
import android.util.Log;
import java.io.File; import java.io.File;
import java.io.IOException; import java.io.IOException;
...@@ -8,6 +9,7 @@ import java.util.ArrayList; ...@@ -8,6 +9,7 @@ import java.util.ArrayList;
import java.util.List; import java.util.List;
import top.zibin.luban.Luban; import top.zibin.luban.Luban;
import top.zibin.luban.OnCompressListener;
class CompressImageUtil { class CompressImageUtil {
private CompressImageUtil() { private CompressImageUtil() {
...@@ -15,22 +17,43 @@ class CompressImageUtil { ...@@ -15,22 +17,43 @@ class CompressImageUtil {
public static File compressUtilSmallerThan(int size, File file, Context context) { public static File compressUtilSmallerThan(int size, File file, Context context) {
final boolean[] run = new boolean[]{true};
File result = null; File result = null;
File tmp = file; final File[] tmp = new File[]{file};
List<File> dirtyFiles = new ArrayList<>(); List<File> dirtyFiles = new ArrayList<>();
try { try {
while (tmp.length() > size * 1024) {
while (tmp[0].length() > size * 1024 && run[0]) {
Log.e("--","runing " + tmp[0].length());
List<File> compressedFiles = Luban.with(context) List<File> compressedFiles = Luban.with(context)
.ignoreBy(size) .ignoreBy(size)
.load(tmp) .load(tmp[0])
.setTargetDir(context.getCacheDir().getAbsolutePath()) .setTargetDir(context.getCacheDir().getAbsolutePath())
.setCompressListener(new OnCompressListener() {
@Override
public void onStart() {
}
@Override
public void onSuccess(File file) {
Log.e("---->",file.getAbsolutePath());
tmp[0] = file;
}
@Override
public void onError(Throwable e) {
Log.e("--->done",e.getMessage());
run[0] = false;
}
})
.get(); .get();
tmp = compressedFiles.get(0); dirtyFiles.add(tmp[0]);
dirtyFiles.add(tmp);
} }
result = tmp; result = tmp[0];
} catch (IOException e) { } catch (IOException e) {
e.printStackTrace(); e.printStackTrace();
......
...@@ -8,14 +8,22 @@ import com.jarvan.fluwx.constant.WeChatPluginImageSchema; ...@@ -8,14 +8,22 @@ import com.jarvan.fluwx.constant.WeChatPluginImageSchema;
import com.jarvan.fluwx.constant.WechatPluginKeys; import com.jarvan.fluwx.constant.WechatPluginKeys;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import java.io.OutputStream;
import java.util.UUID;
import io.flutter.plugin.common.PluginRegistry; import io.flutter.plugin.common.PluginRegistry;
import okhttp3.OkHttpClient; import okhttp3.OkHttpClient;
import okhttp3.Request; import okhttp3.Request;
import okhttp3.Response; import okhttp3.Response;
import okhttp3.ResponseBody; import okhttp3.ResponseBody;
import okio.BufferedSink;
import okio.Okio;
import okio.Source;
import top.zibin.luban.Luban;
public class ShareImageUtil { public class ShareImageUtil {
...@@ -36,12 +44,34 @@ public class ShareImageUtil { ...@@ -36,12 +44,34 @@ public class ShareImageUtil {
bmp = BitmapFactory.decodeFile(path); bmp = BitmapFactory.decodeFile(path);
result = Util.bmpToByteArray(bmp, true); result = Util.bmpToByteArray(bmp, true);
} else { } else {
result = handleNetworkImage(registrar, path);
}
return result;
}
private static byte[] handleNetworkImage(PluginRegistry.Registrar registrar, String path) {
byte[] result = null;
InputStream inputStream = openStream(path); InputStream inputStream = openStream(path);
if (inputStream != null) { if (inputStream == null) {
result = streamToByteArray(inputStream); return null;
} }
String suffix = ".jpg";
int index = path.lastIndexOf(".");
if (index > 0) {
suffix = path.substring(index, path.length());
}
File snapshot = inputStreamToTmpFile(inputStream, suffix);
File compressedFile = null;
compressedFile = CompressImageUtil.compressUtilSmallerThan(35, snapshot, registrar.context());
if (compressedFile == null) {
return null;
} }
result = fileToByteArray(compressedFile);
return result; return result;
} }
...@@ -51,6 +81,13 @@ public class ShareImageUtil { ...@@ -51,6 +81,13 @@ public class ShareImageUtil {
return Util.bmpToByteArray(bmp, true); return Util.bmpToByteArray(bmp, true);
} }
private static byte[] fileToByteArray(File file) {
Bitmap bmp = null;
bmp = BitmapFactory.decodeFile(file.getAbsolutePath());
return Util.bmpToByteArray(bmp, true);
}
private static String getPackage(String assetsName) { private static String getPackage(String assetsName) {
String packageStr = null; String packageStr = null;
if (assetsName.contains(WechatPluginKeys.PACKAGE)) { if (assetsName.contains(WechatPluginKeys.PACKAGE)) {
...@@ -60,6 +97,49 @@ public class ShareImageUtil { ...@@ -60,6 +97,49 @@ public class ShareImageUtil {
return packageStr; return packageStr;
} }
private static File inputStreamToTmpFile(InputStream inputStream, String suffix) {
File file = null;
BufferedSink sink = null;
Source source = null;
OutputStream outputStream = null;
try {
file = File.createTempFile(UUID.randomUUID().toString(), suffix);
outputStream = new FileOutputStream(file);
sink = Okio.buffer(Okio.sink(outputStream));
source = Okio.source(inputStream);
sink.writeAll(source);
} catch (IOException e) {
e.printStackTrace();
} finally {
if (sink != null) {
try {
sink.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (source != null) {
try {
source.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (outputStream != null) {
try {
outputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return file;
}
private static InputStream openStream(String url) { private static InputStream openStream(String url) {
OkHttpClient okHttpClient = new OkHttpClient.Builder().build(); OkHttpClient okHttpClient = new OkHttpClient.Builder().build();
Request request = new Request.Builder().url(url).get().build(); Request request = new Request.Builder().url(url).get().build();
......
...@@ -56,7 +56,7 @@ class _MyAppState extends State<MyApp> { ...@@ -56,7 +56,7 @@ class _MyAppState extends State<MyApp> {
onPressed: () { onPressed: () {
var fluwx = Fluwx(); var fluwx = Fluwx();
fluwx.share(WeChatShareImageModel( fluwx.share(WeChatShareImageModel(
image: "https://timgsa.baidu.com/timg?image&quality=80&size=b10000_10000&sec=1534342262&di=450af299b06a8a46220bdbd53d04e1b8&src=http://www.qqzhi.com/uploadpic/2014-09-25/120045136.jpg", image: "https://timgsa.baidu.com/timg?image&quality=80&size=b10000_10000&sec=1534342262&di=ae1078c9080282ec8bbd4909e6669ee2&src=http://img4q.duitang.com/uploads/item/201402/19/20140219123329_QkdNy.jpeg",
transaction: "hehe", transaction: "hehe",
title: "from dart", title: "from dart",
scene: WeChatScene.SESSION scene: WeChatScene.SESSION
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论