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

TRY FIX

上级 1cb12f56
......@@ -118,7 +118,12 @@ object WeChatPluginHandler {
private suspend fun getImageByteArrayCommon(registrar: PluginRegistry.Registrar?,imagePath:String):ByteArray{
return async(CommonPool){
ShareImageUtil.getImageData(registrar, imagePath)
val r = ShareImageUtil.getImageData(registrar, imagePath)
if (r == null) {
byteArrayOf()
}else{
r
}
}.await()
}
......@@ -148,13 +153,13 @@ object WeChatPluginHandler {
if (thumbnail.isNullOrBlank()){
thumbnail = imagePath
}
val thumbnailData = getThumbnailByteArrayCommon(registrar,thumbnail!!)
handleShareImage(imgObj,call,thumbnailData,result)
// val thumbnailData = getThumbnailByteArrayCommon(registrar,thumbnail!!)
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()
msg.mediaObject = imgObj
......
package com.jarvan.fluwx.utils;
import android.content.Context;
import android.util.Log;
import java.io.File;
import java.io.IOException;
......@@ -8,6 +9,7 @@ import java.util.ArrayList;
import java.util.List;
import top.zibin.luban.Luban;
import top.zibin.luban.OnCompressListener;
class CompressImageUtil {
private CompressImageUtil() {
......@@ -15,22 +17,43 @@ class CompressImageUtil {
public static File compressUtilSmallerThan(int size, File file, Context context) {
final boolean[] run = new boolean[]{true};
File result = null;
File tmp = file;
final File[] tmp = new File[]{file};
List<File> dirtyFiles = new ArrayList<>();
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)
.ignoreBy(size)
.load(tmp)
.load(tmp[0])
.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();
tmp = compressedFiles.get(0);
dirtyFiles.add(tmp);
dirtyFiles.add(tmp[0]);
}
result = tmp;
result = tmp[0];
} catch (IOException e) {
e.printStackTrace();
......
......@@ -8,14 +8,22 @@ import com.jarvan.fluwx.constant.WeChatPluginImageSchema;
import com.jarvan.fluwx.constant.WechatPluginKeys;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.UUID;
import io.flutter.plugin.common.PluginRegistry;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
import okhttp3.ResponseBody;
import okio.BufferedSink;
import okio.Okio;
import okio.Source;
import top.zibin.luban.Luban;
public class ShareImageUtil {
......@@ -36,21 +44,50 @@ public class ShareImageUtil {
bmp = BitmapFactory.decodeFile(path);
result = Util.bmpToByteArray(bmp, true);
} else {
InputStream inputStream = openStream(path);
if (inputStream != null) {
result = streamToByteArray(inputStream);
}
result = handleNetworkImage(registrar, path);
}
return result;
}
private static byte[] handleNetworkImage(PluginRegistry.Registrar registrar, String path) {
byte[] result = null;
InputStream inputStream = openStream(path);
if (inputStream == null) {
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;
}
private static byte[] streamToByteArray(InputStream inputStream) {
Bitmap bmp = null;
bmp = BitmapFactory.decodeStream(inputStream);
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) {
String packageStr = null;
if (assetsName.contains(WechatPluginKeys.PACKAGE)) {
......@@ -60,6 +97,49 @@ public class ShareImageUtil {
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) {
OkHttpClient okHttpClient = new OkHttpClient.Builder().build();
Request request = new Request.Builder().url(url).get().build();
......
......@@ -56,7 +56,7 @@ class _MyAppState extends State<MyApp> {
onPressed: () {
var fluwx = Fluwx();
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",
title: "from dart",
scene: WeChatScene.SESSION
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论