微信分享注意的BUG
阿新 • • 發佈:2019-01-09
微信分享對內容,標題長度和圖片都做了限制,尤其是圖片,不能大於32k,對於6.0.1的系統可能比這個範圍還要小,所以使用的圖片要注意大小,並且放在不同尺寸的檔案下(如果不做處理小圖片也可能不符合規定),為了保險起見,最後再用程式碼壓縮一下,下面是方法,轉自大神。
解決方案:使用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;
- publicclass MainActivity extends Activity {
-
@Override
- protectedvoid 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
- byte[] bytes=(byte[]) msg.obj;
- if(bytes.length>IMAGE_SIZE){
- Toast.makeText(MainActivity.this, "圖片尺寸太大", 0).show();
- return;
- }
- System.out.println("視訊截圖圖片長度:"+bytes.length);
- }
- }).start();
- }
- publicstaticfinalint IMAGE_SIZE=32768;//微信分享圖片大小限制
- privateclass LoadPicThread extends Thread{
- private String url;
- private Handler handler;
- public LoadPicThread(String url,Handler handler){
- this.url=url;
- this.handler=handler;
- }
- @Override
- publicvoid 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次退出迴圈
需要特別注意的是,安卓處理的圖片大小和電腦上顯示的不一樣,所以不要被電腦上圖片的大小誤導,其次,壓縮後的位元組沒有任何問題,但是通過bitmapfactory轉換成bitmap時,圖片大小又存在一定的放大作用,也就是如果一個圖片在接近的尺寸被壓縮,反而會變更大,這個bug非常坑,所以強烈建議控制壓縮的尺度要比要求低很多,比如微信得到32k,最好要求到30k以下。