前言
应客户要求 需要把两张图片合成一张保存起来
一张背景图 一张二维码图
用于二维码扫描 区分代理和上下级关系
期望の效果
实现流程
背景图 客户希望是自己可以上传 这样不那么单调
我们从后台接口回去imageUrl
转成Bitmap
就可以了
二维码由我们客户端生成 然后和背景图 合成一张图 长按保存到相册
先说一下 如何用Glide 转成Bitmap 这个问题之前也困了我一会时间
使用Glide版本4.6.2
,如果是版本小于4.0
版本 下面的方法对你可能不适用!
//backgroundUrl就是后台获取的url
if (backgroundUrl != null) {
//加载背景图
if (UserUtils.getAppConfig() != null) {
String apiUrl = UserUtils.getAppConfig().getApp_url();
//按照后台要求拼接图片地址
String imaUrl = apiUrl + backgroundUrl;
Glide.with(this).asBitmap().load(imaUrl).into(new SimpleTarget<Bitmap>() {
@Override
public void onResourceReady(@NonNull Bitmap resource, @Nullable Transition<? super Bitmap> transition) {
//在这里面用bitmap 这个方法返回的就是bitmap glide去处理的
// 能正常加载图片 就说明bitmap没问题
mIvSaveImage.setImageBitmap(resource);
bitmaps[0] = resource;
}
});
} else {
mIvSaveImage.setImageDrawable(getResources().getDrawable(R.drawable.yaoqing_haoyou));
}
二维码生成
二维码生成用Zxing 就可以了 简单方便 几行代码就可以解决了。
//二维码生成
implementation 'cn.bingoogolapple:bga-qrcode-zxing:1.3.7'
代码实现
QRCodeEncoder
这个类里面有很多方法 可以根据需求去适用
可以设置logo 也可以设置前景图颜色
//生成Bitmap 尺寸为100px
Bitmap bitmap = QRCodeEncoder.syncEncodeQRCode(QRUrl, 100);
图片合成
两张图都拿到了 现在就是把2个Bitmap
合成一张就可以了
/**
*
* @param background 背景图
* @param foreground 前景图
* @return
*/
public static Bitmap combineBitmap(Bitmap background, Bitmap foreground) {
if (background == null) {
return null;
}
int bgWidth = background.getWidth();
int bgHeight = background.getHeight();
int fgWidth = foreground.getWidth();
int fgHeight = foreground.getHeight();
Bitmap newmap = Bitmap.createBitmap(bgWidth, bgHeight, Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(newmap);
canvas.drawBitmap(background, 0, 0, null);
canvas.drawBitmap(foreground, 450, 580, null);//设置二维码所在的位置 这个可以写死
canvas.save();
canvas.restore();
return newmap;
}
拿到の效果图
共勉
我要一步一步往上爬
在最高点乘着叶片往前飞
任风吹干流过的泪和汗
我要一步一步往上爬
等待阳光静静看着它的脸
小小的天有大大的梦想
我有属于我的天
任风吹干流过的泪和汗
总有一天我有属于我的天