一、杂谈

微信分享图片的迷之bug,前一阵子接盘一个Hybrid App,分享要用原生的分享,搞了一阵子把微信分享搞上,测试又反馈了一个谜一样的Bug,我这边看Log打印了checkArgs fail, thumbData is invalid,google一番都说是图片不能超过32kb,在分享里面看到如下判断this.thumbData.length > '耀',一时间没有反应过来。。。可是怎么压缩好哇,我参照官方Demo和AndroidUtilCode的按质量压缩方法,找出了下面的解决方案,供大家参考。

二、将网络图片加载到内存

保存到本地在操作真心感觉麻烦

public static byte[] getHtmlByteArray(final String url) {

URL htmlUrl = null;

InputStream inStream = null;

try {

htmlUrl = new URL(url);

URLConnection connection = htmlUrl.openConnection();

HttpURLConnection httpConnection = (HttpURLConnection) connection;

int responseCode = httpConnection.getResponseCode();

if (responseCode == HttpURLConnection.HTTP_OK) {

inStream = httpConnection.getInputStream();

}

} catch (MalformedURLException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

// 将io流转为byte数组

byte[] data = inputStreamToByte(inStream);

// 转换为bitmap

Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0, data.length);

// 获取压缩后的byte数组

byte[] bytes = compressByQuality(bitmap, '耀', true);

return bytes;

}

三、将io流转为byte数组

public static byte[] inputStreamToByte(InputStream is) {

try {

ByteArrayOutputStream bytestream = new ByteArrayOutputStream();

int ch;

while ((ch = is.read()) != -1) {

bytestream.write(ch);

}

byte imgdata[] = bytestream.toByteArray();

bytestream.close();

return imgdata;

} catch (Exception e) {

e.printStackTrace();

}

return null;

}

四、按质量压缩

/**

* 按质量压缩图片

*

* @param src bitmap图片

* @param maxByteSize 最大字节数

* @param recycle

* @return

*/

public static byte[] compressByQuality(final Bitmap src, final long maxByteSize, final boolean recycle) {

ByteArrayOutputStream baos = new ByteArrayOutputStream();

src.compress(CompressFormat.JPEG, 100, baos);

byte[] bytes;

if (baos.size() <= maxByteSize) {

bytes = baos.toByteArray();

} else {

baos.reset();

src.compress(CompressFormat.JPEG, 0, baos);

if (baos.size() >= maxByteSize) {

bytes = baos.toByteArray();

} else {

// find the best quality using binary search

int st = 0;

int end = 100;

int mid = 0;

while (st < end) {

mid = (st + end) / 2;

baos.reset();

src.compress(CompressFormat.JPEG, mid, baos);

int len = baos.size();

if (len == maxByteSize) {

break;

} else if (len > maxByteSize) {

end = mid - 1;

} else {

st = mid + 1;

}

}

if (end == mid - 1) {

baos.reset();

src.compress(CompressFormat.JPEG, st, baos);

}

bytes = baos.toByteArray();

}

}

if (recycle && !src.isRecycled()) src.recycle();

return bytes;

}

五、微信分享

WXWebpageObject object = new WXWebpageObject();

object.webpageUrl = url;

WXMediaMessage wxMediaMessage = new WXMediaMessage(object);

// 标题

wxMediaMessage.title = title;

// 描述

wxMediaMessage.description = des.substring(0, 20);

// 图片

wxMediaMessage.thumbData = Util.getHtmlByteArray(image);

//构造一个Req

SendMessageToWX.Req req = new SendMessageToWX.Req();

req.transaction = String.valueOf(System.currentTimeMillis());

req.message = wxMediaMessage;

req.scene = SendMessageToWX.Req.WXSceneSession;

mIWXAPI.sendReq(req);

六、源码

WechatShareUtil类

打开App,阅读手记

android微信分享图片压缩,Android微信分享图片按质量压缩的解决方案相关推荐

  1. 前端图片压缩上传(纯js的质量压缩,非长宽压缩)

    前端图片压缩上传(纯js的质量压缩,非长宽压缩) 此demo为大于1M对图片进行压缩上传 若小于1M则原图上传,可以根据自己实际需求更改. demo源码如下: <!DOCTYPE html> ...

  2. bitmap.compress(图片压缩的两种方式)(1,质量压缩;2,采样率压缩)

    代码如下 ByteArrayOutputStream baos = new ByteArrayOutputStream(); image.compress(Bitmap.CompressFormat. ...

  3. Android微信分享图片按质量压缩的解决方案,androidndk开发教程

    三.将io流转为byte数组 public static byte[] inputStreamToByte(InputStream is) { try { ByteArrayOutputStream ...

  4. android 微信分享gif图,android后台动态创建图片并实现微信分享

    今天就记录一下. 先说明一下,之前没有做过类似的东西,百度了一两天才知道,说来很惭愧.有点笨,只能这样说. 在我的脑里只明白,如果要动态创建图片: 一.就是new 嘛 二.就是LayoutInflat ...

  5. android 分享小程序到微信,Android 分享微信小程序之图片优化

    小菜上周接入了微信分享小程序的入口,基本功能实现都没问题,有需要的朋友可以了解一下 Android 分享微信小程序失败二三事,虽然功能都正常,但整体测试发现图片展示效果不佳.于是小菜整理了一个简单的小 ...

  6. Android 原生分享图片文字到微信

    分享纯文字 Activity代码使用 shareWechatFriend(MainActivity.this, "这里是分享的内容"); 方法shareWechatFriend(C ...

  7. android中关于图片分享到QQ或者微信,朋友圈及其他(免SDK)

    最近又做了一个关于图片分享到朋友圈的一个小功能,起先想到的是要添加比如QQ 或者微信以及其他工具的API,但是很麻烦,还要申请一些乱七八糟的东西并且得通过,才能用. 于是就在网上找一些关于图片分享的资 ...

  8. android微信分享icon不能显示,微信分享 icon图片不显示问题

    微信分享中,会有一个小图标显示出来,该怎么做,注意哪些问题 这个图片能显示的条件: 宽高大于300px 页面从上到下的第一张图片 除了上面两点,经过测试,还有以下要注意的 img标签上不能出现 dis ...

  9. android微信分享工具,记录Android微信分享功能的吐槽与思考

    在App内潜入分享到微信好友或朋友圈的功能想必大家已经屡见不鲜了,比如Android分享一个网页信息(URL)到微信客户端的代码: /** * 微信分享:分享网页 * @param context * ...

最新文章

  1. Mask R-CNN 源代码终上线,Facebook 开源目标检测平台—Detectron
  2. python连接阿里云odps
  3. 横河川仪压力变送器故障代码_YOKOGAWA/重庆横河川仪EJA变送器三大优秀性能!
  4. 大数据WEB阶段Spring框架(一)IOC控制反转、DI注入依赖
  5. Android程序设计基础-设计布局之伪今日头条主界面
  6. mysql 传输表空间_Oracle传输表空间总结
  7. [翻译]超炫列表动画的实现
  8. PHP安装kafka扩展
  9. 实习技术员的基本功(十)
  10. PenTool:一个基于Qt的仿真软件Demo
  11. opencv python 人脸识别 相似度_如何使用OpenCV3直方图方法进行人脸相似度对比
  12. 【原理+代码】Python实现Topsis分析法(优劣解距离法)
  13. 吉他入门:吉他音阶训练入门教程(二)
  14. wamp下载和使用PHPDocumentor
  15. 两个各四只青蛙过河java_Java实现 LeetCode 403 青蛙过河
  16. python爬虫实现股票数据存储_Python爬虫抓取东方财富网股票数据并实现MySQL数据库存储!...
  17. 海外并购不失为好时机
  18. fitbit charge hr 安装体验
  19. flv,mkv和mp4 等
  20. 优学院电子商务理论与实务试题及答案

热门文章

  1. 利用tsne可视化结果,点击出现对应的句子
  2. 【Linux常用网络工具系列】dig
  3. 汇编码转机器码万能转换工具(Intel 32/64、ARM 大小端、Thumb大小端、ARM V8大小端、Thumb V8大小端、AArch64)
  4. HTML页面防火墙,宝塔防火墙页面修改美化
  5. 电阻测试仪都有哪些种类呢?
  6. 在 PyCharm 2017.2.3 中设置 Anaconda 5.0.0 中配置的多Python环境
  7. 自定义 View 之联想手机 ZUI 系统加载动画
  8. 工作两年,靠BIG佬的Java面试宝典,跳槽到京东,月薪直涨10K
  9. 12月最新的31道字节跳动内部Java面试题都会的话,你也可以去面试!
  10. 利用PS 的色阶工具去除文本有色和黑白水印