微信分享对内容,标题长度和图片都做了限制,尤其是图片,不能大于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;
-
- 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();
- bmp.compress(Bitmap.CompressFormat.JPEG, options, output);
- 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以下。