0 まえがき
最近、リンクをQRコードに変換したいというご要望をいただきましたが、QRコードをユーザーに提供することで、ユーザーはスキャン後、自動的に指定したH5ページにアクセスすることができ、業務フローを実現することができ、実際に他の多くのシーンでも活用されている機能です。 , 資産管理システムでは、資産のQRコードをスキャンすることで棚卸、自動保管、自動保管などの機能を実現します。
今日は、このような需要シナリオを例を挙げて説明します。
1. 需要分析
まず、このタイプのシナリオについて、最初に要件を単純化しましょう。実際には、顧客は在庫の機能リンクなど、特定のリンクにアクセスする必要がありますが、特定のエンティティにバインドされている必要もあります。たとえば、これが特定の資産に対応していることを知る必要がありますが、実際にはパラメータを追加するだけです (例: " http://host/assets/check?no=123456
123456" が資産番号であるため、それに対応します)。
特定のアイテムにバインドされず、アカウントやユーザーなどの仮想情報にバインドされるシナリオもあります。たとえば、特定のタイプのアプリ プロモーション シナリオでは、ユーザーが独自のプロモーション用 QR コードを生成し、その QR コードをスキャンして新規登録できます。製品. ユーザーの場合、報酬はユーザーのアカウントに入金されます。この種のシナリオではユーザーとバインドする必要がありますが、リンクへの変換は理解しやすいです。たとえば、http://host/user/invite?userId=123456
ここでの userId は QR コードを共有したユーザーの ID であるため、新規ユーザーである限り、このリンクにアクセスすると、誰がそれを宣伝したかを記録できます。
上記のように、当社の要件は明確に定義されています。つまり、ユーザーは指定されたリンクにアクセスする必要があり、リンクには特定のパラメータが含まれる場合があり、このリンクの表示形式はリンクに直接表示されるのではなく、次の形式で表示されます。 QRコードショー。
そして、私たちの最大の魅力は、指定されたリンクの QR コードへの変換です。それでは、達成する方法を見てみましょう
2. QRコードの本質
二次元コード (QR コード) は、データを含む情報を黒と白のピクセルで構成されるマトリクス パターンにモジュール方式でエンコードできる 2 次元グラフィック コーディング技術です。これらのパターンは、携帯電話のカメラなどのスキャン デバイスでキャプチャおよびデコードして、データを復元できます。
数字、文本、链接、图像
本質的に、2次元コードは、データなどのさまざまな種類のデータを表現できる特定の符号化方法です。
QRコードの動作原理は、コンピュータビジョンと画像処理技術に基づいています。スキャン デバイスが QR コードを読み取るとき、まず光源を通して QR コードを照らし、次に感光体を使用して反射光を記録します。これらの元の画像データはデジタル信号に変換され、画像前処理、エッジ検出、画像解析のステップを経てデコードされ、元のデータが復元されます。
3. zxingツールの実装
Javaでは、Googleのオープンソースzxing
ツールキットを使用してQRコードを生成できます。
zxing ソースアドレス: https://github.com/zxing/zxing
1.jarパッケージをインポートする
<dependency>
<groupId>com.google.zxing</groupId>
<artifactId>core</artifactId>
<version>3.3.0</version>
</dependency>
2. ツールクラスを作成する
public class QRcodeUtil {
private static final String CHARSET = "utf-8";
private static final String FORMAT_NAME = "JPG";
// 二维码尺寸
private static final int QRCODE_SIZE = 300;
/**
* 生成二维码图片
* @param url 扫描二维码跳转地址
* @return
* @throws Exception
*/
public static BufferedImage createImage(String url) throws Exception {
Hashtable hints = new Hashtable();
hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H);
hints.put(EncodeHintType.CHARACTER_SET, CHARSET);
hints.put(EncodeHintType.MARGIN, 1);
BitMatrix bitMatrix = new MultiFormatWriter().encode(url, BarcodeFormat.QR_CODE, QRCODE_SIZE, QRCODE_SIZE,
hints);
int width = bitMatrix.getWidth();
int height = bitMatrix.getHeight();
BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
for (int x = 0; x < width; x++) {
for (int y = 0; y < height; y++) {
image.setRGB(x, y, bitMatrix.get(x, y) ? 0xFF000000 : 0xFFFFFFFF);
}
}
return image;
}
/**
* 输出二维码
* @param url 扫描二维码跳转地址
* @param response
* @throws Exception
*/
public static void encode(String url, HttpServletResponse response)
throws Exception {
BufferedImage image = createImage(url);
ImageIO.write(image, FORMAT_NAME, response.getOutputStream());
}
}
3. 変換を実装するインターフェースを作成する
@GetMapping("code")
public void qrcode(String url, HttpServletResponse response) throws Exception {
QRcodeUtil.encode(url, response);
}
4. テストして、QR コードを生成するインターフェイスにアクセスします: http://localhost:8092/orders/code?url=http://www.baidu.com
ここでのテストで生成されたリンクは Baidu からのもので、ニーズに応じて独自のものに調整できます。生成されたリンクは、これがテキストではなくリンクであることを伝えるhttp://
か、それを示す必要があることに注意してください。https://
生成されたQRコードは以下の通り
携帯電話でコードをスキャンし、通常どおり Baidu にジャンプし、テストに合格します。
要約する
これでQRコードの生成機能は終了しましたが、これにより様々な便利なインタラクティブ機能やさらなる拡張を実現することができますので、ぜひお試しください。