微信分享視頻的時候,需要傳一個圖片數組,大小不能大於32k。
解決方案:使用Bitmap自帶的compress方法解決了這個問題.
源碼如下:
<span style="font-size:14px;">package com.example.test;
import java.io.ByteArrayOutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.widget.Toast;
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
new LoadPicThread("http://7xjp2s.dl2.z0.glb.qiniucdn.com/2015/07/01/2248c3025a9989f062ce8b8c52a72481_m.jpg",new Handler(){
@Override
public void handleMessage(Message msg) {
byte[] bytes=(byte[]) msg.obj;
if(bytes.length>IMAGE_SIZE){
Toast.makeText(MainActivity.this, "圖片尺寸太大", 0).show();
return;
}
System.out.println("視頻截屏圖片長度:"+bytes.length);
}
}).start();
}
public static final int IMAGE_SIZE=32768;//微信分享圖片大小限制
private class LoadPicThread extends Thread{
private String url;
private Handler handler;
public LoadPicThread(String url,Handler handler){
this.url=url;
this.handler=handler;
}
@Override
public void run(){
try {
URL picurl = new URL(url);
HttpURLConnection conn = (HttpURLConnection)picurl.openConnection(); // 獲得連接
conn.setConnectTimeout(6000);//設置超時
conn.setDoInput(true);
conn.setUseCaches(false);//不緩存
conn.connect();
Bitmap bmp=BitmapFactory.decodeStream(conn.getInputStream());
ByteArrayOutputStream output = new ByteArrayOutputStream();
bmp.compress(Bitmap.CompressFormat.JPEG, 100, output);
int options = 100;
while (output.toByteArray().length > IMAGE_SIZE && options != 10) {
output.reset(); //清空baos
bmp.compress(Bitmap.CompressFormat.JPEG, options, output);//這里壓縮options%,把壓縮后的數據存放到baos中
options -= 10;
}
bmp.recycle();
byte[] result = output.toByteArray();
output.close();
Message message=handler.obtainMessage();
message.obj=result;
message.sendToTarget();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}</span><span style="font-size: 18px;">
</span>
主要開啟一個線程讀取服務器圖片.用while循環壓縮圖片。。。圖片小於32k或者已經壓縮了9次退出循環
