我是在项目中用微信SDK分享带图片的连接,如下:

发现有的连接可以正常分享有的却不行,wechat_api.sendReq(req);返回false

微信官方傻X文档是这样描述的:

然后我就表示很不理解了。

后来在微信SDK网站乱逛的时候发现了这么一条:

Q:为什么使用微信SDK分享信息给微信好友,有的消息发送成功,有的消息发送失败(打不开微信)? (New)

A:这是因为SDK协议中对缩略图的大小作了限制,大小不能超过32K。另外限制的还有title、description等参数的大小。iOS开发者请在微信开放平台网站iOS手册搜索“thumbData”, Android开发者请见微信开放平台网站Android手册的“WXMediaMessage”页面。

。。。靠,你在文档里写一下会死啊!建议每个微信的开发者都看看这个页面:http://open.weixin.qq.com/faq/?lang=zh_CN

好的,原因是我分享的缩略图超过了32k,那就压缩吧。

==============

因为我用的是png的图片,在stackoverflow上发现Bitmap的compress方法不支持PNG,只支持JPG。各种尝试之后放弃了使用Bitmap的compress方法。

最后改用直接压缩分辨率,但是这样不完美的地方在于我把超过32k的图片全部改为99*99的,会丢掉部分细节。不知道有没有人可以提供更完美的方式。

[java]  view plain copy
  1. public Bitmap createBitmapThumbnail(Bitmap bitMap) {
  2. int width = bitMap.getWidth();
  3. int height = bitMap.getHeight();
  4. // 设置想要的大小
  5. int newWidth = 99;
  6. int newHeight = 99;
  7. // 计算缩放比例
  8. float scaleWidth = ((float) newWidth) / width;
  9. float scaleHeight = ((float) newHeight) / height;
  10. // 取得想要缩放的matrix参数
  11. Matrix matrix = new Matrix();
  12. matrix.postScale(scaleWidth, scaleHeight);
  13. // 得到新的图片
  14. Bitmap newBitMap = Bitmap.createBitmap(bitMap, 0, 0, width, height,
  15. matrix, true);
  16. return newBitMap;
  17. }

=======另附上Android上图片压缩方式=======

第一:我们先看下质量压缩方法:

[java]  view plain copy
  1. private Bitmap compressImage(Bitmap image) {
  2. ByteArrayOutputStream baos = new ByteArrayOutputStream();
  3. image.compress(Bitmap.CompressFormat.JPEG, 100, baos);//质量压缩方法,这里100表示不压缩,把压缩后的数据存放到baos中
  4. int options = 100;
  5. while ( baos.toByteArray().length / 1024>100) {  //循环判断如果压缩后图片是否大于100kb,大于继续压缩
  6. baos.reset();//重置baos即清空baos
  7. image.compress(Bitmap.CompressFormat.JPEG, options, baos);//这里压缩options%,把压缩后的数据存放到baos中
  8. options -= 10;//每次都减少10
  9. }
  10. ByteArrayInputStream isBm = new ByteArrayInputStream(baos.toByteArray());//把压缩后的数据baos存放到ByteArrayInputStream中
  11. Bitmap bitmap = BitmapFactory.decodeStream(isBm, null, null);//把ByteArrayInputStream数据生成图片
  12. return bitmap;
  13. }

第二:图片按比例大小压缩方法(根据路径获取图片并压缩):

[java]  view plain copy
  1. private Bitmap getimage(String srcPath) {
  2. BitmapFactory.Options newOpts = new BitmapFactory.Options();
  3. //开始读入图片,此时把options.inJustDecodeBounds 设回true了
  4. newOpts.inJustDecodeBounds = true;
  5. Bitmap bitmap = BitmapFactory.decodeFile(srcPath,newOpts);//此时返回bm为空
  6. newOpts.inJustDecodeBounds = false;
  7. int w = newOpts.outWidth;
  8. int h = newOpts.outHeight;
  9. //现在主流手机比较多是800*480分辨率,所以高和宽我们设置为
  10. float hh = 800f;//这里设置高度为800f
  11. float ww = 480f;//这里设置宽度为480f
  12. //缩放比。由于是固定比例缩放,只用高或者宽其中一个数据进行计算即可
  13. int be = 1;//be=1表示不缩放
  14. if (w > h && w > ww) {//如果宽度大的话根据宽度固定大小缩放
  15. be = (int) (newOpts.outWidth / ww);
  16. } else if (w < h && h > hh) {//如果高度高的话根据宽度固定大小缩放
  17. be = (int) (newOpts.outHeight / hh);
  18. }
  19. if (be <= 0)
  20. be = 1;
  21. newOpts.inSampleSize = be;//设置缩放比例
  22. //重新读入图片,注意此时已经把options.inJustDecodeBounds 设回false了
  23. bitmap = BitmapFactory.decodeFile(srcPath, newOpts);
  24. return compressImage(bitmap);//压缩好比例大小后再进行质量压缩
  25. }

第三:图片按比例大小压缩方法(根据Bitmap图片压缩):

[java]  view plain copy
  1. private Bitmap comp(Bitmap image) {
  2. ByteArrayOutputStream baos = new ByteArrayOutputStream();
  3. image.compress(Bitmap.CompressFormat.JPEG, 100, baos);
  4. if( baos.toByteArray().length / 1024>1024) {//判断如果图片大于1M,进行压缩避免在生成图片(BitmapFactory.decodeStream)时溢出
  5. baos.reset();//重置baos即清空baos
  6. image.compress(Bitmap.CompressFormat.JPEG, 50, baos);//这里压缩50%,把压缩后的数据存放到baos中
  7. }
  8. ByteArrayInputStream isBm = new ByteArrayInputStream(baos.toByteArray());
  9. BitmapFactory.Options newOpts = new BitmapFactory.Options();
  10. //开始读入图片,此时把options.inJustDecodeBounds 设回true了
  11. newOpts.inJustDecodeBounds = true;
  12. Bitmap bitmap = BitmapFactory.decodeStream(isBm, null, newOpts);
  13. newOpts.inJustDecodeBounds = false;
  14. int w = newOpts.outWidth;
  15. int h = newOpts.outHeight;
  16. //现在主流手机比较多是800*480分辨率,所以高和宽我们设置为
  17. float hh = 800f;//这里设置高度为800f
  18. float ww = 480f;//这里设置宽度为480f
  19. //缩放比。由于是固定比例缩放,只用高或者宽其中一个数据进行计算即可
  20. int be = 1;//be=1表示不缩放
  21. if (w > h && w > ww) {//如果宽度大的话根据宽度固定大小缩放
  22. be = (int) (newOpts.outWidth / ww);
  23. } else if (w < h && h > hh) {//如果高度高的话根据宽度固定大小缩放
  24. be = (int) (newOpts.outHeight / hh);
  25. }
  26. if (be <= 0)
  27. be = 1;
  28. newOpts.inSampleSize = be;//设置缩放比例
  29. //重新读入图片,注意此时已经把options.inJustDecodeBounds 设回false了
  30. isBm = new ByteArrayInputStream(baos.toByteArray());
  31. bitmap = BitmapFactory.decodeStream(isBm, null, newOpts);
  32. return compressImage(bitmap);//压缩好比例大小后再进行质量压缩
  33. }

解决微信开放平台分享图片失败问题相关推荐

  1. 微信开放平台分享功能的app签名怎么获取

    微信开放平台需要的签名如果直接使用eclipse打包生成的MD5签名是不行的. 需要把这个eclipse打包生成MD5签名做一些处理: (1)冒号:去掉 (2)大写字母换成小写字母 (做以上处理的时候 ...

  2. android微信解析失败,微信开放平台sdk解析失败

    时间:2017年7月20日 14:00左右,重新编译了一下Android Studio,报出了一个匪夷所思的错误: 早上还好好的,为啥下午就莫名其妙报出这个错误呢.看错误内容,应该是AS找不到指定的依 ...

  3. uniApp APP端 支付/分享 微信开放平台的Android 包名签名的坑

    在开放平台配置好包名和签名后是会"立即生效" 网上看2种解决方法能立即生效 1.微信重新登录 2.卸载微信重新安装 原因:当你在你的APP上使用微信登录/分享/支付等,微信客户端会 ...

  4. Android之微信开放平台实现分享(分享好友和朋友圈)

    开发中分享操作往往经常遇到,而且还是一些比较大型一定的平台,如微信,QQ,微博等.写这篇博客主要是把微信的的分享和相关操作表达一下,分享可以包含:文字,视频,音乐,图片等分享. 分享可以有 分享给好友 ...

  5. (第三方平台)开发相关,解除80端口占用,微信公众号分享jssdk实现,微信开放平台登录接口接入,2022微信分享接入本地调试,微信分享定制

    一.开发相关 1.平台地址 微信开放平台 QQ互联平台SDK 2.文章收集 来自CSDN兄台的QQ登录使用的教程 微信网站应用开发的详细流程和引导 VueJs单页应用实现微信网页授权及微信分享功能 [ ...

  6. 微信开放平台 网站应用 第三方微信登录 回调地址导致的错误如何解决

    微信开放平台:https://open.weixin.qq.com 使用 单独为公司注册的QQ,并使用对应的QQ邮箱注册微信开放平台,并激活. 然后 提交企业信息审核,审核通过后,就可以创建 网站应用 ...

  7. 解决微信二次分享失败--后面被加上from=singlemessageisappinstalled=0的解决方案

    解决微信二次分享失败--后面被加上from=singlemessage&isappinstalled=0的解决方案 参考文章: (1)解决微信二次分享失败--后面被加上from=singlem ...

  8. 公众号菜单 点击推送图片素材_微信公众平台常用图片素材分享(点击关注、阅读原文、分享朋友圈)...

    最近在学习做微信公众平台,收集了一些微信公众平台常用图片素材(无水印通用图片素材),特此分享给大家.长期更新-- 1.求关注图片素材,这个是放在文章最前面,用来求关注,引诱用户点击关注用的 点击上方蓝 ...

  9. 详解 - 解决微信小程序分享功能图片比例问题 - 全局分享

    前言: 我在我的博客小程序使用微信小程序分享功能 图片不符合5:4问题 ,对其原理 扫描下面二维码,可以体验哦 准备 在需要自定义分享的页面 设置canvas 组件 目录 准备 详解思路 定义总函数 ...

最新文章

  1. 区分HPUX是Itanium还是PA-RISC
  2. linux删除指定创建时间文件(文件夹)脚本
  3. 【CSTC白皮书】分布式数据库发展路径研究(附下载)
  4. 千万级在线推送系统架构解析
  5. SpringBoot(一)_快速实战搭建项目
  6. hover如何改变子元素或其他同级元素?(用不了怎么回事?)
  7. Elasticsearch 安装配置 外网访问 及 后台启动
  8. java多态的理解(运行时多态)_Java多态的理解
  9. blog项目中遇到的问题及解决
  10. 训练神经网络时如何确定batch的大小?
  11. 计算机应用作业2,计算机应用2作业
  12. mfc之CPtrArray数组
  13. Myeclipse性能优化
  14. Axure RP 9.0 软件安装教程
  15. 纯js 写一个秒表 (精确到毫秒)
  16. 联想计算机如何设置bios密码,Lenovo 消费笔记本如何设置BIOS密码
  17. Cernet_IPv6机考
  18. win7网上邻居_win7网上邻居寻找教程
  19. 以个性化为需求如何选择ITSM系统?
  20. 清华现超级“学霸” 15门课程100分4门99分(图)

热门文章

  1. 认知偏差与信息不对称
  2. 2021-12-30大数据学习日志——Hadoop离线阶段——HDFS
  3. 《视觉SLAM十四讲 第二版》笔记及课后习题(第十二讲)
  4. 二次函数图像怎么画?
  5. 域用户帐户、组的管理
  6. Cocos2dx 小技巧(九)现成的粒子特效
  7. 帆软报表找不到数据连接
  8. 手机误删的照片怎么恢复
  9. 【脚本】7-Zip 批量压缩文件
  10. 【python总结】python学习框架梳理