微信图片分享支持url,缩略图支持url

您所在的位置:网站首页 安卓怎么配置环境 微信图片分享支持url,缩略图支持url

微信图片分享支持url,缩略图支持url

2024-07-16 06:16:35| 来源: 网络整理| 查看: 265

微信图片分享支持url,缩略图支持url

在集成微信分享的过程中,如果缩略图是url形式,或者大图分享的图片是个url,就需要我们先把图片下载下来,然后依据微信的要求对图片做一些压缩操作,最后将图片的数据设置给要分享的对象即可。

我们一般需要支持的分享类型主要有文字类型(WXTextObject)、图片类型(WXImageObject)和网页类型(WXWebpageObject),具体请看分享与收藏功能-Android开发手册。

缩略图支持url

拿我们常见的网页分享举例,msg.thumbData对应的就是缩略图对象,具体代码如下:

//初始化一个WXWebpageObject,填写url WXWebpageObject webpage = new WXWebpageObject(); webpage.webpageUrl ="网页url"; //用 WXWebpageObject 对象初始化一个 WXMediaMessage 对象 WXMediaMessage msg = new WXMediaMessage(webpage); msg.title ="网页标题 "; msg.description ="网页描述"; Bitmap thumbBmp = BitmapFactory.decodeResource(getResources(), R.drawable.send_music_thumb); msg.thumbData =Util.bmpToByteArray(thumbBmp, true); //构造一个Req SendMessageToWX.Req req = new SendMessageToWX.Req(); req.transaction = buildTransaction("webpage"); req.message =msg; req.scene =mTargetScene; req.userOpenId = getOpenId(); //调用api接口,发送数据到微信 api.sendReq(req);

示意图如下:

msg.thumbData

我们看下thumbData的定义,如下图所示:

thumbData的定义

thumbData的类型是字节数组byte[],并且大小不超过32kb。

一般情况下,thumbData设置的是应用内置的icon,通过BitmapFactory.decodeResource即可获取到对应的Bitmap对象,接着对bitmap进行压缩,最后将Bitmap的对应的字节数组设置给thumbData即可。

如果thumbData的数据来源是url,则我们需要先下载图片,再进行后续的操作。经过研究,我们可以通过glide提供的api来下载图片url对应的字节数组,接着将字节数组压缩到32k以内,最后将压缩后的字节数组设置给thumbData即可。

1、下载图片url对应的字节数组 byte[] bytes = Glide.with(context) .load(url) .asBitmap() .toBytes() .into(150, 150) .get(); 2、将字节数组压缩到32kb以内 /** * 将Bitmap的字节流压缩为目标大小 * * @param src * @param targetSize 单位B * @return */ private static byte[] compressBitmapBytes2TargetSize(byte[] src, int targetSize) { // 将字节数据转换成临时bitmap对象,为压缩做准备 Bitmap bmp = BitmapFactory.decodeByteArray(src, 0, src.length); byte[] result = getBytesFromCompressBitmap(bmp, targetSize); // 回收不用的Bitmap if (!bmp.isRecycled()) { bmp.recycle(); } return result; } /** * 压缩bitmap的字节数据,quality每次减少5 * @param bitmap * @param targetSize * @return */ private static byte[] getBytesFromCompressBitmap(Bitmap bitmap, int targetSize) { ByteArrayOutputStream baos = new ByteArrayOutputStream(); // 默认quality为100,quality取值范围[0, 100] int quality = 100; bitmap.compress(Bitmap.CompressFormat.PNG, quality, baos); byte[] bytes = baos.toByteArray(); while (bytes.length > targetSize && quality >= 5) { quality -= 5; if (quality < 0) { quality = 0; } // 重置,不然会累加 baos.reset(); // 将数据写入ByteArrayOutputStream对象中 bitmap.compress(Bitmap.CompressFormat.JPEG, quality, baos); // 将流转换成字节数组 bytes = baos.toByteArray(); } // 关闭流 try { baos.close(); } catch (Exception e) { e.printStackTrace(); } return bytes; }

具体调用:

// 略缩图byte[]小于32k msg.thumbData = compressBitmapBytes2TargetSize(bytes, 32 * 1024); 3、异步处理下载过程

由于下载url的字节数据这个操作是io操作,所以我们需要放到子线程中来完成,下载完成后再在主线程中进行处理即可。完整版代码如下:

Observable.create(new ObservableOnSubscribe() { @Override public void subscribe(ObservableEmitter emitter) throws Exception { try { byte[] bytes = Glide.with(context) .load(url) .asBitmap() .toBytes() .into(150, 150) .get(); emitter.onNext(bytes); emitter.onComplete(); } catch (Exception e) { e.printStackTrace(); emitter.onError(new Throwable("下载略缩图失败")); } } }) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Observer() { @Override public void onSubscribe(Disposable d) { } @Override public void onNext(byte[] bytes) { if (bytes != null) { // 略缩图byte[]小于32k msg.thumbData = compressBitmapBytes2TargetSize(bytes, 32 * 1024); } else { // 设置默认的缩略图,这里一般使用应用logo } // 发送分享请求 } @Override public void onError(Throwable e) { // 设置默认的缩略图,这里一般使用应用logo // 发送分享请求 } @Override public void onComplete() { } });

这里使用了RxJava做的切换线程的操作。当然了,这里的压缩bitmap数据也属于io操作,也应该放在子线程中完成,这个细节有待完善。

大图分享支持url

与缩略图的处理方式不同,缩略图我们是知道最终要显示的大小的(150,来自微信官方demo),所以我们直接通过下载byte[]进行后续即可。而我们这里要分享的大图的大小和宽高等信息都是未知的,在下载完成之前我们无法通过url获取更多信息,所以我们还是需要先将图片下载下来。

由于下载byte[]的api必须指定宽高,所以我们换另一个不需要指定宽高的api,直接下载bitmap对象,具体代码如下:

Glide.with(mContext) .load(url) .asBitmap() .into(new SimpleTarget() { @Override public void onResourceReady(Bitmap resource, GlideAnimation


【本文地址】

公司简介

联系我们

今日新闻


点击排行

实验室常用的仪器、试剂和
说到实验室常用到的东西,主要就分为仪器、试剂和耗
不用再找了,全球10大实验
01、赛默飞世尔科技(热电)Thermo Fisher Scientif
三代水柜的量产巅峰T-72坦
作者:寞寒最近,西边闹腾挺大,本来小寞以为忙完这
通风柜跟实验室通风系统有
说到通风柜跟实验室通风,不少人都纠结二者到底是不
集消毒杀菌、烘干收纳为一
厨房是家里细菌较多的地方,潮湿的环境、没有完全密
实验室设备之全钢实验台如
全钢实验台是实验室家具中较为重要的家具之一,很多

推荐新闻


图片新闻

实验室药品柜的特性有哪些
实验室药品柜是实验室家具的重要组成部分之一,主要
小学科学实验中有哪些教学
计算机 计算器 一般 打孔器 打气筒 仪器车 显微镜
实验室各种仪器原理动图讲
1.紫外分光光谱UV分析原理:吸收紫外光能量,引起分
高中化学常见仪器及实验装
1、可加热仪器:2、计量仪器:(1)仪器A的名称:量
微生物操作主要设备和器具
今天盘点一下微生物操作主要设备和器具,别嫌我啰嗦
浅谈通风柜使用基本常识
 众所周知,通风柜功能中最主要的就是排气功能。在

专题文章

    CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭