解决微信开放平台分享图片失败问题
我是在项目中用微信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的,会丢掉部分细节。不知道有没有人可以提供更完美的方式。
- public Bitmap createBitmapThumbnail(Bitmap bitMap) {
- int width = bitMap.getWidth();
- int height = bitMap.getHeight();
- // 设置想要的大小
- int newWidth = 99;
- int newHeight = 99;
- // 计算缩放比例
- float scaleWidth = ((float) newWidth) / width;
- float scaleHeight = ((float) newHeight) / height;
- // 取得想要缩放的matrix参数
- Matrix matrix = new Matrix();
- matrix.postScale(scaleWidth, scaleHeight);
- // 得到新的图片
- Bitmap newBitMap = Bitmap.createBitmap(bitMap, 0, 0, width, height,
- matrix, true);
- return newBitMap;
- }
=======另附上Android上图片压缩方式=======
第一:我们先看下质量压缩方法:
- private Bitmap compressImage(Bitmap image) {
- ByteArrayOutputStream baos = new ByteArrayOutputStream();
- image.compress(Bitmap.CompressFormat.JPEG, 100, baos);//质量压缩方法,这里100表示不压缩,把压缩后的数据存放到baos中
- int options = 100;
- while ( baos.toByteArray().length / 1024>100) { //循环判断如果压缩后图片是否大于100kb,大于继续压缩
- baos.reset();//重置baos即清空baos
- image.compress(Bitmap.CompressFormat.JPEG, options, baos);//这里压缩options%,把压缩后的数据存放到baos中
- options -= 10;//每次都减少10
- }
- ByteArrayInputStream isBm = new ByteArrayInputStream(baos.toByteArray());//把压缩后的数据baos存放到ByteArrayInputStream中
- Bitmap bitmap = BitmapFactory.decodeStream(isBm, null, null);//把ByteArrayInputStream数据生成图片
- return bitmap;
- }
第二:图片按比例大小压缩方法(根据路径获取图片并压缩):
- private Bitmap getimage(String srcPath) {
- BitmapFactory.Options newOpts = new BitmapFactory.Options();
- //开始读入图片,此时把options.inJustDecodeBounds 设回true了
- newOpts.inJustDecodeBounds = true;
- Bitmap bitmap = BitmapFactory.decodeFile(srcPath,newOpts);//此时返回bm为空
- newOpts.inJustDecodeBounds = false;
- int w = newOpts.outWidth;
- int h = newOpts.outHeight;
- //现在主流手机比较多是800*480分辨率,所以高和宽我们设置为
- float hh = 800f;//这里设置高度为800f
- float ww = 480f;//这里设置宽度为480f
- //缩放比。由于是固定比例缩放,只用高或者宽其中一个数据进行计算即可
- int be = 1;//be=1表示不缩放
- if (w > h && w > ww) {//如果宽度大的话根据宽度固定大小缩放
- be = (int) (newOpts.outWidth / ww);
- } else if (w < h && h > hh) {//如果高度高的话根据宽度固定大小缩放
- be = (int) (newOpts.outHeight / hh);
- }
- if (be <= 0)
- be = 1;
- newOpts.inSampleSize = be;//设置缩放比例
- //重新读入图片,注意此时已经把options.inJustDecodeBounds 设回false了
- bitmap = BitmapFactory.decodeFile(srcPath, newOpts);
- return compressImage(bitmap);//压缩好比例大小后再进行质量压缩
- }
第三:图片按比例大小压缩方法(根据Bitmap图片压缩):
- private Bitmap comp(Bitmap image) {
- ByteArrayOutputStream baos = new ByteArrayOutputStream();
- image.compress(Bitmap.CompressFormat.JPEG, 100, baos);
- if( baos.toByteArray().length / 1024>1024) {//判断如果图片大于1M,进行压缩避免在生成图片(BitmapFactory.decodeStream)时溢出
- baos.reset();//重置baos即清空baos
- image.compress(Bitmap.CompressFormat.JPEG, 50, baos);//这里压缩50%,把压缩后的数据存放到baos中
- }
- ByteArrayInputStream isBm = new ByteArrayInputStream(baos.toByteArray());
- BitmapFactory.Options newOpts = new BitmapFactory.Options();
- //开始读入图片,此时把options.inJustDecodeBounds 设回true了
- newOpts.inJustDecodeBounds = true;
- Bitmap bitmap = BitmapFactory.decodeStream(isBm, null, newOpts);
- newOpts.inJustDecodeBounds = false;
- int w = newOpts.outWidth;
- int h = newOpts.outHeight;
- //现在主流手机比较多是800*480分辨率,所以高和宽我们设置为
- float hh = 800f;//这里设置高度为800f
- float ww = 480f;//这里设置宽度为480f
- //缩放比。由于是固定比例缩放,只用高或者宽其中一个数据进行计算即可
- int be = 1;//be=1表示不缩放
- if (w > h && w > ww) {//如果宽度大的话根据宽度固定大小缩放
- be = (int) (newOpts.outWidth / ww);
- } else if (w < h && h > hh) {//如果高度高的话根据宽度固定大小缩放
- be = (int) (newOpts.outHeight / hh);
- }
- if (be <= 0)
- be = 1;
- newOpts.inSampleSize = be;//设置缩放比例
- //重新读入图片,注意此时已经把options.inJustDecodeBounds 设回false了
- isBm = new ByteArrayInputStream(baos.toByteArray());
- bitmap = BitmapFactory.decodeStream(isBm, null, newOpts);
- return compressImage(bitmap);//压缩好比例大小后再进行质量压缩
- }
解决微信开放平台分享图片失败问题相关推荐
- 微信开放平台分享功能的app签名怎么获取
微信开放平台需要的签名如果直接使用eclipse打包生成的MD5签名是不行的. 需要把这个eclipse打包生成MD5签名做一些处理: (1)冒号:去掉 (2)大写字母换成小写字母 (做以上处理的时候 ...
- android微信解析失败,微信开放平台sdk解析失败
时间:2017年7月20日 14:00左右,重新编译了一下Android Studio,报出了一个匪夷所思的错误: 早上还好好的,为啥下午就莫名其妙报出这个错误呢.看错误内容,应该是AS找不到指定的依 ...
- uniApp APP端 支付/分享 微信开放平台的Android 包名签名的坑
在开放平台配置好包名和签名后是会"立即生效" 网上看2种解决方法能立即生效 1.微信重新登录 2.卸载微信重新安装 原因:当你在你的APP上使用微信登录/分享/支付等,微信客户端会 ...
- Android之微信开放平台实现分享(分享好友和朋友圈)
开发中分享操作往往经常遇到,而且还是一些比较大型一定的平台,如微信,QQ,微博等.写这篇博客主要是把微信的的分享和相关操作表达一下,分享可以包含:文字,视频,音乐,图片等分享. 分享可以有 分享给好友 ...
- (第三方平台)开发相关,解除80端口占用,微信公众号分享jssdk实现,微信开放平台登录接口接入,2022微信分享接入本地调试,微信分享定制
一.开发相关 1.平台地址 微信开放平台 QQ互联平台SDK 2.文章收集 来自CSDN兄台的QQ登录使用的教程 微信网站应用开发的详细流程和引导 VueJs单页应用实现微信网页授权及微信分享功能 [ ...
- 微信开放平台 网站应用 第三方微信登录 回调地址导致的错误如何解决
微信开放平台:https://open.weixin.qq.com 使用 单独为公司注册的QQ,并使用对应的QQ邮箱注册微信开放平台,并激活. 然后 提交企业信息审核,审核通过后,就可以创建 网站应用 ...
- 解决微信二次分享失败--后面被加上from=singlemessageisappinstalled=0的解决方案
解决微信二次分享失败--后面被加上from=singlemessage&isappinstalled=0的解决方案 参考文章: (1)解决微信二次分享失败--后面被加上from=singlem ...
- 公众号菜单 点击推送图片素材_微信公众平台常用图片素材分享(点击关注、阅读原文、分享朋友圈)...
最近在学习做微信公众平台,收集了一些微信公众平台常用图片素材(无水印通用图片素材),特此分享给大家.长期更新-- 1.求关注图片素材,这个是放在文章最前面,用来求关注,引诱用户点击关注用的 点击上方蓝 ...
- 详解 - 解决微信小程序分享功能图片比例问题 - 全局分享
前言: 我在我的博客小程序使用微信小程序分享功能 图片不符合5:4问题 ,对其原理 扫描下面二维码,可以体验哦 准备 在需要自定义分享的页面 设置canvas 组件 目录 准备 详解思路 定义总函数 ...
最新文章
- 笔记 JVM调优流程
- 巨头纷纷看上的中国Robobus又获1亿美元投资
- 计算机组成原理实验报告西华大学,计算机组成原理实验报告算术逻辑运算单元实验...
- freopen()的重定向打开或者关闭
- 【Pytorch】interpolate==>上下采样函数
- php用户名登录名_PHP验证登录用户名和密码
- URI、URL和URN的关系
- 【java】java 一个线程占用多少内存
- C Tricks(八)—— 硬币和骰子的模拟
- 跟我学Android之二 第一个程序
- 测试es from size error,from + size must be less than or equal to: [10000]异常问题
- 宝峰c1对讲机写频软件_宝峰对讲机写频软件(BF-480 编程软件)
- petalinux设计——使用petalinux定制linux系统
- movs 数据传送指令_1.数据传送指令中,错误的操作是()。 A.MOVSS[BX+DI],1000H B.......
- Spring Boot项目WebService接口发布、调用、以及常见错误详解
- 巴比特MatPool运营NEO节点,2019年必定是 Staking 经济元年
- mac mini u盘安装系统_用u盘安装win7系统安装步骤
- 捷径智慧物业系统助力“书香小区”建设
- 二叉树的遍历(递归算法与非递归算法)
- EasyUi 快速入门
热门文章
- VS2008 编译错误,生成后事件问题 Error 1 error PRJ0019: A tool returned an error code from “Performing Post-Build
- [笔记][总结] MIT线性代数 Gilbert Strang 矩阵分解
- 在普通应用中 计算机和电视能够很容易,计算机技术在广播电视工程中的应用要点及发展趋势...
- 在阿里云上装黑苹果(1):黑苹果基础
- 分享 - 微信域名检测API接口
- 如何高效地学习开源项目-以ShardingSphere学习为例
- 讯客分类信息php,讯客分类信息互动版 v1.3
- C语言智能窗帘编码,基于STC89C52单片机智能窗帘控制系统.doc
- 手机云便签App敬业签怎么使用同步功能修复异常数据?
- IDC报告称,到2021年,全球可穿戴设备市场规模将翻番