如何使用java将图像转换为qr代码

如果我们搜索image to qr code,有许多网站将图像转换为在线二维码。

如果我们搜索image to qr code,有许多网站将图像转换为在线二维码。

但是如何在 java 中做到这一点?
我正在使用以下代码将文本转换为 qr 代码:-

import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import com.google.zxing.BarcodeFormat;
import com.google.zxing.EncodeHintType;
import com.google.zxing.MultiFormatWriter;
import com.google.zxing.NotFoundException;
import com.google.zxing.WriterException;
import com.google.zxing.client.j2se.MatrixToImageWriter;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;
public class MyQr {
    public static void createQR(String data, String path,
                                String charset, Map hashMap,
                                int height, int width)
        throws WriterException, IOException
    {
        BitMatrix matrix = new MultiFormatWriter().encode(
            new String(data.getBytes(charset), charset),
            BarcodeFormat.QR_CODE, width, height);
        MatrixToImageWriter.writeToFile(
            matrix,
            path.substring(path.lastIndexOf('.') + 1),
            new File(path));
    }
    public static void main(String[] args)
        throws WriterException, IOException,
            NotFoundException
    {
        String data = "TEXT IN QR CODE";
        String path = "image.png";
        String charset = "UTF-8";
        Map<EncodeHintType, ErrorCorrectionLevel> hashMap
            = new HashMap<EncodeHintType,
                        ErrorCorrectionLevel>();
        hashMap.put(EncodeHintType.ERROR_CORRECTION,
                    ErrorCorrectionLevel.L);
        createQR(data, path, charset, hashMap, 200, 200);
    }
}

但是如何在 qr 代码中编码图像?

1

我假设你的意思是你想添加一个图像(例如标志)到 QR 码。

这通常是通过在 QR 码的顶部覆盖一个小图像来完成的,通常在中心。当一小部分被遮挡时,QR 码仍然是可读的,特别是在中心。

您可以使用MatrixToImageWriter.toBufferedImage(matrix)获取包含 QR Code 图像的 BufferedImage,然后使用 Java 图像方法覆盖图像。例如,请参阅overlay images in java

0

图像太大,无法嵌入 QR 码(小图标除外)。因此,相反,将图像放在可公开访问的服务器上,并将图像的 URL 嵌入 QR 码中。

因此,您需要访问可以实现这一点的服务器。

否则,它是直接的:

import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import java.nio.file.Path;
import java.util.HashMap;
import java.util.Map;
import com.google.zxing.BarcodeFormat;
import com.google.zxing.EncodeHintType;
import com.google.zxing.MultiFormatWriter;
import com.google.zxing.WriterException;
import com.google.zxing.client.j2se.MatrixToImageWriter;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;
public class MyQr {
    /**
     * Uploads the image to a server and returns to image URL.
     * @param imagePath path to the image
     * @return image URL
     */
    public static URL uploadImage(String imagePath)
    {
        // implement a solution to put an image on a public server
        try {
            return new URL("https://yourserver/some_path/image.jpg");
        } catch (MalformedURLException e) {
            throw new RuntimeException(e);
        }
    }
    public static void createQR(String payloadImagePath, String qrCodeImagePath,
                                Map<EncodeHintType, ?> hints, int height, int width)
            throws WriterException, IOException
    {
        URL imageURL = uploadImage(payloadImagePath);
        BitMatrix matrix = new MultiFormatWriter().encode(
                imageURL.toString(), BarcodeFormat.QR_CODE, width, height, hints);
        String imageFormat = qrCodeImagePath.substring(qrCodeImagePath.lastIndexOf('.') + 1);
        MatrixToImageWriter.writeToPath(matrix, imageFormat, Path.of(qrCodeImagePath));
    }
    public static void main(String[] args)
            throws WriterException, IOException
    {
        String payloadImagePath = "embed_this.jpg";
        String qrCodeImagePath = "qrcode.png";
        Map<EncodeHintType, ErrorCorrectionLevel> hints = new HashMap<>();
        hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.L);
        createQR(payloadImagePath, qrCodeImagePath, hints, 200, 200);
    }
}

BTW:下面的代码 (来自您的代码示例) 是无意义的。充其量,它创建了一个字符串的副本,这是不必要的。在最坏的情况下,它会charset不支持的所有字符。我不认为你打算任何一个。

new String(data.getBytes(charset), charset)

本站系公益性非盈利分享网址,本文来自用户投稿,不代表码文网立场,如若转载,请注明出处

(959)
如何在jmeter中为java采样器请求生成多个登录用户
上一篇
使用ggplot2在R中的 Barplot中的垂直平均线
下一篇

相关推荐

  • java游戏下载器:下载最新的Java游戏,体验不一样的乐趣!

    Java游戏下载器是一种用于从网络上下载Java游戏的客户端程序。它可以帮助用户快速、安全地下载Java游戏,并将它们保存到本地磁盘上。…

    2023-01-13 07:05:24
    0 10 21
  • java质数判断:如何使用Java判断质数

    质数(prime number)又称素数,指在大于1的自然数中,除了1和它本身以外不再有其他因数。Java代码如下:…

    2023-01-27 13:26:28
    0 95 39
  • java游戏盒子:玩转Java游戏盒子,体验不一样的乐趣!

    Java游戏盒子是一种特殊的Java应用程序,它可以把多个Java小游戏集中在一起,方便玩家管理和运行这些游戏。代码如下:…

    2023-01-28 09:18:41
    0 27 42
  • java递归详解一种解决问题的有效方法

    Java递归是一种编程技术,它允许一个函数调用自身。它使用一个或多个参数,以便在每次调用时将其状态更改,以便最终到达基本情况,从而终止递归。…

    2023-01-26 11:53:11
    0 86 33
  • java监控:如何使用Java监控提升应用性能

    Java监控是一种方法,用于监视Java应用程序的性能和可用性。它可以帮助开发人员了解Java应用程序的运行情况,并在发生问题时及时采取行动。Java监控可以通过多种方式来实现,例如使用Java虚拟机(JVM)内置的监控工具,使用第三方监控工具,或者使用自定义代码来实现。…

    2023-01-07 14:45:39
    0 50 20
  • java开发游戏培训从入门到精通

    示例示例Java开发游戏培训是一种使用Java语言开发游戏的培训课程,旨在帮助学习者掌握如何使用Java语言开发游戏。该培训课程将介绍Java语言的基本概念,包括变量、数据类型、流程控制、函数、类、对象、继承、接口、异常处理等。学习者还将学习如何使用Java语言开发游戏,包括游戏设计、游戏开发、游戏测试和游戏发布等。…

    2023-01-02 03:08:06
    0 48 62
  • java在线中文视频从入门到精通

    Java在线中文视频是指使用Java语言开发的在线视频,它可以在互联网上播放和浏览,而无需下载。它可以使用HTML5、Flash Player或其他技术来实现。…

    2023-01-20 12:32:35
    0 85 25
  • java数据库是什么:如何使用Java来构建强大的数据库系统

    Java数据库是一种使用Java编写的数据库,它可以在Java虚拟机上运行,并且可以使用Java API来访问和操作数据库。它允许开发人员使用Java语言来创建和管理数据库,而无需学习SQL。…

    2023-01-20 02:42:24
    0 20 41

发表评论

登录 后才能评论

评论列表(31条)