微信分享注意的BUG

来源:互联网 发布:mac系统怎么安装ps 编辑:程序博客网 时间:2024/04/30 14:52

微信分享对内容,标题长度和图片都做了限制,尤其是图片,不能大于32k,对于6.0.1的系统可能比这个范围还要小,所以使用的图片要注意大小,并且放在不同尺寸的文件下(如果不做处理小图片也可能不符合规定),为了保险起见,最后再用代码压缩一下,下面是方法,转自大神。


解决方案:使用Bitmap自带的compress方法解决了这个问题

源码如下:

[java] view plain copy
  1. <span style="font-size:14px;">package com.example.test;  
  2.   
  3. import java.io.ByteArrayOutputStream;  
  4. import java.net.HttpURLConnection;  
  5. import java.net.URL;  
  6.   
  7. import android.os.Bundle;  
  8. import android.os.Handler;  
  9. import android.os.Message;  
  10. import android.widget.Toast;  
  11. import android.app.Activity;  
  12. import android.graphics.Bitmap;  
  13. import android.graphics.BitmapFactory;  
  14.   
  15. public class MainActivity extends Activity {  
  16.     @Override  
  17.     protected void onCreate(Bundle savedInstanceState) {  
  18.         super.onCreate(savedInstanceState);  
  19.         setContentView(R.layout.activity_main);  
  20.           
  21.         new LoadPicThread("http://7xjp2s.dl2.z0.glb.qiniucdn.com/2015/07/01/2248c3025a9989f062ce8b8c52a72481_m.jpg",new Handler(){  
  22.             @Override  
  23.             public void handleMessage(Message msg) {  
  24.                 byte[] bytes=(byte[]) msg.obj;  
  25.                 if(bytes.length>IMAGE_SIZE){  
  26.                     Toast.makeText(MainActivity.this"图片尺寸太大"0).show();  
  27.                     return;  
  28.                 }  
  29.                 System.out.println("视频截屏图片长度:"+bytes.length);  
  30.             }  
  31.         }).start();  
  32.     }  
  33.       
  34.       
  35.     public static final int IMAGE_SIZE=32768;//微信分享图片大小限制  
  36.     private class LoadPicThread extends Thread{  
  37.         private String url;  
  38.         private Handler handler;  
  39.         public LoadPicThread(String url,Handler handler){  
  40.             this.url=url;  
  41.             this.handler=handler;  
  42.         }  
  43.           
  44.         @Override  
  45.         public void run(){  
  46.             try {  
  47.                 URL picurl = new URL(url);   
  48.                 HttpURLConnection conn = (HttpURLConnection)picurl.openConnection(); // 获得连接   
  49.                 conn.setConnectTimeout(6000);//设置超时   
  50.                 conn.setDoInput(true);   
  51.                 conn.setUseCaches(false);//不缓存   
  52.                 conn.connect();  
  53.                 Bitmap bmp=BitmapFactory.decodeStream(conn.getInputStream());  
  54.                   
  55.                 ByteArrayOutputStream output = new ByteArrayOutputStream();  
  56.                   
  57.                 bmp.compress(Bitmap.CompressFormat.JPEG, 100, output);  
  58.                 int options = 100;  
  59.                 while (output.toByteArray().length > IMAGE_SIZE && options != 10) {   
  60.                     output.reset(); //清空baos  
  61.                     bmp.compress(Bitmap.CompressFormat.JPEG, options, output);//这里压缩options%,把压缩后的数据存放到baos中    
  62.                     options -= 10;  
  63.                 }  
  64.                   
  65.                 bmp.recycle();  
  66.                 byte[] result = output.toByteArray();  
  67.                 output.close();  
  68.                   
  69.                 Message message=handler.obtainMessage();  
  70.                 message.obj=result;  
  71.                 message.sendToTarget();  
  72.             } catch (Exception e) {  
  73.                 e.printStackTrace();  
  74.             }  
  75.         }  
  76.     }  
  77.   
  78. }</span><span style="font-size: 18px;">  
  79. </span>  


主要开启一个线程读取服务器图片.用while循环压缩图片。。。图片小于32k或者已经压缩了9次退出循环

需要特别注意的是,安卓处理的图片大小和电脑上显示的不一样,所以不要被电脑上图片的大小误导,其次,压缩后的字节没有任何问题,但是通过bitmapfactory转换成bitmap时,图片大小又存在一定的放大作用,也就是如果一个图片在接近的尺寸被压缩,反而会变更大,这个bug非常坑,所以强烈建议控制压缩的尺度要比要求低很多,比如微信得到32k,最好要求到30k以下。

0 0