Android 图片合成海报生成二维码,指定文字。

Android随笔记录 专栏收录该内容
18 篇文章 0 订阅

一 ,图片合成,海报增加二维码,文字,或者用户ID。先看图

这个是没有合成之前的图。
在这里插入图片描述
合成之后的图。


在这里插入图片描述

使用到的技术点
1,图片Glide
2, banner2.0
3, zxing

class MainActivity : AppCompatActivity() {
    var imgs = ArrayList<ImageBean>()

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        createImage();
        //添加到集合
        imgs.add(ImageBean(123456, bitmap_1!!))
        imgs.add(ImageBean(123456, bitmap_2!!))
        imgs.add(ImageBean(123456, bitmap_3!!))
        //初始化banner。
        initBanner()

    }


    fun initBanner() {
        //默认第一个等
        mBitmap = bitmap_1
        banners.addBannerLifecycleObserver(this)//添加生命周期观察者
            .setAdapter(ImageAdapter(imgs))
            .setIndicator(CircleIndicator(this))
//            .setBannerGalleryEffect(50,10) //画廊效果
            .setBannerGalleryMZ(50) //魅族效果
            .isAutoLoop(false)//是否允许自动播放
            .addOnPageChangeListener(object : OnPageChangeListener {
                override fun onPageScrollStateChanged(state: Int) {
                }

                override fun onPageScrolled(
                    position: Int,
                    positionOffset: Float,
                    positionOffsetPixels: Int
                ) {
                }

                //选中时,等于临时的bitmap
                override fun onPageSelected(position: Int) {
                    Toast.makeText(
                        this@MainActivity, "position:${bitmap_1.toString()
                        }", Toast.LENGTH_SHORT
                    ).show()

                    mBitmap = when (position) {
                        0 -> bitmap_1
                        1 -> bitmap_2
                        2 -> bitmap_3
                        else ->
                            bitmap_1
                    }
                }

            })
        save_btn.setOnClickListener {
            var file = ImageUtils.saveImageToFile(
                this@MainActivity,
                mBitmap!!,
                "invite_face.jpg"
            )!!
            Toast.makeText(this@MainActivity, "file:${file.path}", Toast.LENGTH_SHORT).show()


        }
    }

    private var mBitmap: Bitmap? = null
    private var bitmap_1: Bitmap? = null
    private var bitmap_2: Bitmap? = null
    private var bitmap_3: Bitmap? = null
    private var mUrl: String = "https://www.baidu.com/" //二维码对应的网址。

    /**
     * 创建图片
     */
    fun createImage() {
        //二维码相关设置
        //第一种二维码
        val logoBm = QRCodeUtil.createQRCodeBitmap(
            mUrl,
            SizeUtils.dip2px(this, 100f).toInt(),
            SizeUtils.dip2px(this, 100f).toInt()
        )
        //第一张图片 加上二维码
        val bm1 = (resources.getDrawable(R.mipmap.p1) as BitmapDrawable).bitmap
        bitmap_1 =
                //
            mergeBitmap(bm1, logoBm, SizeUtils.dip2px(this, 20f), SizeUtils.dip2px(this, 175f), 0)
        //第二张图片 加上二维码

        val bm2 = (resources.getDrawable(R.mipmap.p2) as BitmapDrawable).bitmap
        bitmap_2 =
            mergeBitmap(bm2, logoBm, SizeUtils.dip2px(this, 20f), SizeUtils.dip2px(this, 175f), 0)
        //第三张图片 加上二维码
        val bm3 = (resources.getDrawable(R.mipmap.p3) as BitmapDrawable).bitmap
        bitmap_3 =
            mergeBitmap(bm3, logoBm, SizeUtils.dip2px(this, 20f), SizeUtils.dip2px(this, 175f), 0)


    }

    //合成图片
    fun mergeBitmap(
        firstBitmap: Bitmap?,
        secondBitmap: Bitmap?,
        width: Float,
        height: Float,
        type: Int

    ): Bitmap? {
        if (firstBitmap == null || secondBitmap == null) return null
        val bitmap = Bitmap.createBitmap(
            firstBitmap.width, firstBitmap.height,
            Bitmap.Config.ARGB_8888
        )
        val canvas = Canvas(bitmap)
        canvas.drawBitmap(firstBitmap, 0f, 0f, null)
        //NULL

        when (type) {
            0, 1 -> {
                // 画笔。
                val paint = Paint()
                paint.color = Color.WHITE
                paint.style = Paint.Style.FILL
                paint.strokeWidth = 12f
                paint.textSize = SizeUtils.dip2px(this, 20f)
                val msg = "邀请码ID:123456"
                //绘制到图片上。在图片上位置
                canvas.drawText(
                    msg,
                    SizeUtils.dip2px(this, 20f),
                    SizeUtils.dip2px(this, 165f),
                    paint
                )
            }
            2 -> {
                val paint = Paint()
                paint.color = Color.WHITE
                paint.style = Paint.Style.FILL
                paint.strokeWidth = 12f
                paint.textSize = SizeUtils.dip2px(this, 20f)
                val msg = "邀请码ID:123456"
                canvas.drawText(
                    msg,
                    SizeUtils.dip2px(this, 30f),
                    SizeUtils.dip2px(this, 20f),
                    paint
                )
            }

        }


        canvas.save()
        canvas.drawBitmap(secondBitmap, width, height, null)
        canvas.restore()
        return bitmap
    }

}

源码奉上。如果帮到你了,请点个赞吧! demo地址

  • 1
    点赞
  • 1
    评论
  • 2
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值