微信分享視頻的時候,須要傳一個圖片數組,大小不能大於32k。 java
解決方案:使用Bitmap自帶的compress方法解決了這個問題.android
源碼以下:數組
<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次退出循環緩存