Android将2张图片合成一张图片(Bitmap类型)附二维码生成

前言

应客户要求 需要把两张图片合成一张保存起来
一张背景图 一张二维码图
用于二维码扫描 区分代理和上下级关系

期望の效果

1

实现流程

背景图 客户希望是自己可以上传 这样不那么单调
我们从后台接口回去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;
    }

拿到の效果图

2

共勉

我要一步一步往上爬
在最高点乘着叶片往前飞
任风吹干流过的泪和汗
我要一步一步往上爬
等待阳光静静看着它的脸
小小的天有大大的梦想
我有属于我的天
任风吹干流过的泪和汗
总有一天我有属于我的天
snail

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

吕氏春秋i

你的鼓励将是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值