微信分享朋友圈,图片超过12k的解决方案;
private void shareImageToBitmap(String url, String title, String content, String photoUrl) {
Log.e("TAG", "shareImageToBitmap photoUrl: " + photoUrl);
cachedThreadPool.execute(new Runnable() {
@Override
public void run() {
byte[] bytes=ImageUtils.getImageBytes(photoUrl);
bitmap_wchat = BitmapFactory.decodeByteArray(bytes, 0, bytes.length);
Message msg = new Message();
Bundle bundle = new Bundle();
bundle.putString("url", url);
bundle.putString("title", title);
bundle.putString("content", content);
msg.what = WCHAT_SHARE_FRIEND;
msg.setData(bundle);
handler.sendMessage(msg);
}
});
}
public class ImageUtils {
public static final int IMAGE_SIZE=32768;//微信分享图片大小限制32k限制
public static byte[] getImageBytes(String path) {
try {
URL url = new URL(path);
HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
httpURLConnection.setRequestMethod("GET");
httpURLConnection.setReadTimeout(6 * 1000);
InputStream inputStream = null;
Bitmap bmp=null;
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int len = -1;
if (httpURLConnection.getResponseCode() == HttpURLConnection.HTTP_OK) {
inputStream = httpURLConnection.getInputStream();
bmp=BitmapFactory.decodeStream(httpURLConnection.getInputStream());
while ((len = inputStream.read(buffer)) != -1) {
outputStream.write(buffer, 0, len);
}
}
bmp.compress(Bitmap.CompressFormat.JPEG, 100, outputStream);
int options = 100;
Log.e("TAG", "getImageBytes length: "+outputStream.toByteArray().length );
while (outputStream.toByteArray().length > IMAGE_SIZE && options != 10) {
outputStream.reset(); //清空baos
bmp.compress(Bitmap.CompressFormat.JPEG, options, outputStream);//这里压缩options%,把压缩后的数据存放到baos中
options -= 10;
}
bmp.recycle();//回收bmp
outputStream.close();
inputStream.close();
if (options==100){
Log.e("TAG", "getImageBytes未压缩: " );
Log.e("TAG", "getImageBytes length: "+outputStream.toByteArray().length );
return outputStream.toByteArray();
}else {
Log.e("TAG", "getImageBytes 压缩: " );
Log.e("TAG", "getImageBytes length: "+outputStream.toByteArray().length );
return outputStream.toByteArray();
}
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}