android微信分享大图长图,裁剪微信分享缩略图片(长缩略图取中裁剪)

解决Android分享长图至微信时缩略图压缩问题,通过居中裁剪图片,确保缩略图效果。提供分享到朋友圈和微信好友的代码示例,包括竖图和横图的裁剪处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

有时分享出去的图片如果过长,就会导致缩略图的正方形图片呈现的效果是被压缩的,一般才用居中裁剪的方式,将裁剪后的图作为缩略图即可

本文后面将举微信分享到朋友圈和好友到例子,在分享出去到图片中,若为长图,则截取中间部分作为缩略图标,先放实现的代码。例子作为代码的复习笔记使用

实现图片居中裁剪代码如下:

//其中bitmap为老的Bitmap对象,将会被裁剪

Bitmap withSizeBitmap = null;//该withSizeBitmap是取过长宽的

Bitmap thumbBmp = null;//将上面的withSizeBitmap再次压缩否分享出去

if (bitmap.getWidth() < bitmap.getHeight()) {//如果是竖长图或正方形

//居中裁剪创建一个带有宽高的bitmap

withSizeBitmap = Bitmap.createBitmap(bitmap, 0, ((bitmap.getHeight() - bitmap.getWidth()) / 2), bitmap.getWidth(), bitmap.getWidth());

//压缩

thumbBmp = Bitmap.createScaledBitmap(withSizeBitmap, WX_THUMB_SIZE, WX_THUMB_SIZE, true);

}else if (bitmap.getWidth() >= bitmap.getHeight()){//如果是横长图

withSizeBitmap = Bitmap.createBitmap(bitmap, ((bitmap.getWidth() - bitmap.getHeight()) / 2), 0, bitmap.getHeight(), bitmap.getHeight());

thumbBmp = Bitmap.createScaledBitmap(withSizeBitmap, WX_THUMB_SIZE, WX_THUMB_SIZE, true);

}

分享朋友圈的方法:

/**

* 分享朋友圈

* @param url 链接

* @param title 标题

* @param content 内容简介

* @param imgPath 缩略图图片地址(本地)

* @param titleOrContent 分享出去的文字是标题还是简介

*/

public static void shareMoments(final String url, final String title, final String

content, final String imgPath, final boolean titleOrContent) {

final int IMAGE_SIZE = 32768;

new Thread(new Runnable() {

@Override

public void run() {

WXWebpageObject textObj = new WXWebpageObject();

textObj.webpageUrl = url;

WXMediaMessage msg = new WXMediaMessage();

if (titleOrContent){//标题还是描述都传过来,但是需要哪个根据此字段决定,

msg.title = title;

}else {

msg.title = content;

}

final int WX_THUMB_SIZE = 120;

try {

Bitmap bitmap = BitmapFactory.decodeFile(imgPath);

ByteArrayOutputStream output = new ByteArrayOutputStream();

bitmap.compress(Bitmap.CompressFormat.JPEG, 100, output);

int options = 100;

while (output.toByteArray().length > IMAGE_SIZE && options != 10) {

output.reset(); //清空baos

bitmap.compress(Bitmap.CompressFormat.JPEG, options, output);//这里压缩options%,把压缩后的数据存放到baos中

options -= 10;

}

//这就是上面的裁剪的方法

Bitmap withSizeBitmap = null;

Bitmap thumbBmp = null;

if (bitmap.getWidth() < bitmap.getHeight()) {

withSizeBitmap = Bitmap.createBitmap(bitmap, 0, ((bitmap.getHeight() - bitmap.getWidth()) / 2), bitmap.getWidth(), bitmap.getWidth());

thumbBmp = Bitmap.createScaledBitmap(withSizeBitmap, WX_THUMB_SIZE, WX_THUMB_SIZE, true);

}else if (bitmap.getWidth() >= bitmap.getHeight()){

//创建一个带有宽高的bitmap

withSizeBitmap = Bitmap.createBitmap(bitmap, ((bitmap.getWidth() - bitmap.getHeight()) / 2), 0, bitmap.getHeight(), bitmap.getHeight());

//压缩

thumbBmp = Bitmap.createScaledBitmap(withSizeBitmap, WX_THUMB_SIZE, WX_THUMB_SIZE, true);

}

msg.thumbData = WXUtil.bmpToByteArray(thumbBmp, true);

bitmap.recycle();

withSizeBitmap.recycle();

thumbBmp.recycle();

msg.mediaObject = textObj;

SendMessageToWX.Req req = new SendMessageToWX.Req()

// req.transaction = content;

req.message = msg;

req.scene = SendMessageToWX.Req.WXSceneTimeline;

api.sendReq(req);

} catch (Exception e) {

e.printStackTrace();

}

}

}).start();

}

分享到微信好友到方法:

/**

* 分享微信好友

* @param url 网址

* @param title 标题

* @param content 简介

* @param imgPath 图片地址(本地)

*/

public static void shareWX(final String url, final String title, final String

content, final String imgPath) {

final int IMAGE_SIZE = 32768;

new Thread(new Runnable() {

@Override

public void run() {

final WXWebpageObject textObj = new WXWebpageObject();

textObj.webpageUrl = url;

final WXMediaMessage msg = new WXMediaMessage();

msg.title = title;//标题

msg.description = content;//描述

final int WX_THUMB_SIZE = 120;

//开始把图片路径转成bitmap

try {

Bitmap bitmap = BitmapFactory.decodeFile(imgPath);

ByteArrayOutputStream output = new ByteArrayOutputStream();

bitmap.compress(Bitmap.CompressFormat.JPEG, 100, output);

int options = 100;

while (output.toByteArray().length > IMAGE_SIZE && options != 10) {//后面(options != 10)的条件判断必须加(vivo x7不加不行)

output.reset(); //清空baos

bitmap.compress(Bitmap.CompressFormat.JPEG, options, output);//这里压缩options%,把压缩后的数据存放到baos中

options -= 10;

}

Bitmap withSizeBitmap = null;

Bitmap thumbBmp = null;

if (bitmap.getWidth() < bitmap.getHeight()) {//竖图

withSizeBitmap = Bitmap.createBitmap(bitmap, 0, ((bitmap.getHeight() - bitmap.getWidth()) / 2), bitmap.getWidth(), bitmap.getWidth());

thumbBmp = Bitmap.createScale dBitmap(withSizeBitmap, WX_THUMB_SIZE, WX_THUMB_SIZE, true);

}else if (bitmap.getWidth() >= bitmap.getHeight()){//横图

withSizeBitmap = Bitmap.createBitmap(bitmap, ((bitmap.getWidth() - bitmap.getHeight()) / 2), 0, bitmap.getHeight(), bitmap.getHeight());

thumbBmp = Bitmap.createScaledBitmap(withSizeBitmap, WX_THUMB_SIZE, WX_THUMB_SIZE, true);

}

msg.thumbData = WXUtil.bmpToByteArray(thumbBmp, true);

//回收

bitmap.recycle();

withSizeBitmap.recycle();

thumbBmp.recycle();

//bitmap到此结束

msg.mediaObject = textObj;

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

req.transaction = title;

req.message = msg;

req.scene = SendMessageToWX.Req.WXSceneSession;

api.sendReq(req);

} catch (Exception e) {

e.printStackTrace();

}

}

}).start();

}

结束。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值