How to generate a QR code with a logo inside it?

I am developing an application for Android devices. I want to generate a QR code with a logo inside it.

With ZXing I know how to create simple QR codes like this: Original

But I want to generate a QR code with a logo inside it. So I want to get something like this: with logo

Is there any way to do this? I have no idea how to do this. Could you help me please? Maybe there is a ready-made library or an example of how to do this.

Thanks!

+5
source share
1 answer

You can add your logo as an Image Overlay , for example

 public BufferedImage getQRCodeWithOverlay(BufferedImage qrcode) { BufferedImage scaledOverlay = scaleOverlay(qrcode); Integer deltaHeight = qrcode.getHeight() - scaledOverlay.getHeight(); Integer deltaWidth = qrcode.getWidth() - scaledOverlay.getWidth(); BufferedImage combined = new BufferedImage(qrcode.getWidth(), qrcode.getHeight(), BufferedImage.TYPE_INT_ARGB); Graphics2D g2 = (Graphics2D)combined.getGraphics(); g2.drawImage(qrcode, 0, 0, null); g2.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, overlayTransparency)); g2.drawImage(scaledOverlay, Math.round(deltaWidth/2), Math.round(deltaHeight/2), null); return combined; } private BufferedImage scaleOverlay(BufferedImage qrcode) { Integer scaledWidth = Math.round(qrcode.getWidth() * overlayToQRCodeRatio); Integer scaledHeight = Math.round(qrcode.getHeight() * overlayToQRCodeRatio); BufferedImage imageBuff = new BufferedImage(scaledWidth, scaledHeight, BufferedImage.TYPE_INT_ARGB); Graphics g = imageBuff.createGraphics(); g.drawImage(overlay.getScaledInstance(scaledWidth, scaledHeight, BufferedImage.SCALE_SMOOTH), 0, 0, new Color(0,0,0), null); g.dispose(); return imageBuff; } 

Please refer to post and github for more information.

+3
source

Source: https://habr.com/ru/post/1241894/


All Articles