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

一 ,图片合成,海报增加二维码,文字,或者用户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地址

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要在 Android生成二维码图片并打印,你可以使用以下步骤: 1. 添加依赖项:在 build.gradle 文件中添加以下依赖项: ``` implementation 'com.google.zxing:core:3.4.0' ``` 2. 生成二维码:使用以下代码生成二维码图片 ```java String content = "your_content_here"; int width = 500; int height = 500; QRCodeWriter writer = new QRCodeWriter(); try { BitMatrix bitMatrix = writer.encode(content, BarcodeFormat.QR_CODE, width, height); int bitmapWidth = bitMatrix.getWidth(); int bitmapHeight = bitMatrix.getHeight(); Bitmap bmp = Bitmap.createBitmap(bitmapWidth, bitmapHeight, Bitmap.Config.RGB_565); for (int x = 0; x < bitmapWidth; x++) { for (int y = 0; y < bitmapHeight; y++) { bmp.setPixel(x, y, bitMatrix.get(x, y) ? Color.BLACK : Color.WHITE); } } // bmp 即为生成的二维码图片 } catch (WriterException e) { e.printStackTrace(); } ``` 3. 打印二维码:将生成的二维码图片通过打印机打印出来。你可以使用 Android 的打印机 API 来实现打印功能,或者使用第三方打印库。 示例代码: ```java // 获取打印服务 PrintManager printManager = (PrintManager) getSystemService(Context.PRINT_SERVICE); // 创建打印任务 PrintDocumentAdapter adapter = new PrintDocumentAdapter() { @Override public void onWrite(PageRange[] pages, ParcelFileDescriptor destination, CancellationSignal cancellationSignal, WriteResultCallback callback) { try { OutputStream out = new FileOutputStream(destination.getFileDescriptor()); bmp.compress(Bitmap.CompressFormat.PNG, 100, out); callback.onWriteFinished(new PageRange[]{PageRange.ALL_PAGES}); out.close(); } catch (IOException e) { e.printStackTrace(); } } @Override public void onLayout(PrintAttributes oldAttributes, PrintAttributes newAttributes, CancellationSignal cancellationSignal, LayoutResultCallback callback, Bundle extras) { callback.onLayoutFinished(new PrintDocumentInfo.Builder("print_output.pdf").setContentType(PrintDocumentInfo.CONTENT_TYPE_DOCUMENT).build(), true); } }; // 执行打印任务 String jobName = "二维码打印任务"; printManager.print(jobName, adapter, null); ``` 注意:以上代码仅供参考,实际使用中需要根据具体需求进行调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值