3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Springフレームワークで動的QRコードを作る方法

Posted at

こんにちは。今日はプログラミングの世界に足を踏み入れた皆さんに、Springフレームワークを使って動的なQRコードを生成する方法をご紹介します。新たなスキルを学び、プログラミングの知識を増やしたいというあなたのニーズにお応えします。

Maven設定の追加

まず始めに、QRコードを生成するために必要なライブラリ、GoogleのZXingをプロジェクトに追加します。pom.xmlファイルに以下の依存関係を追加します。

pom.xml
<dependency>
    <groupId>com.google.zxing</groupId>
    <artifactId>core</artifactId>
    <version>3.5.1</version>
</dependency>
<dependency>
    <groupId>com.google.zxing</groupId>
    <artifactId>javase</artifactId>
    <version>3.5.1</version>
</dependency>

QRコード生成サービスの作成

次にQRコードを生成するためのサービスクラスを作成します。

QRCodeService
@Service
class QRCodeService {

    @Throws(WriterException::class, IOException::class)
    fun getQRCodeImage(source: String, encoding: String, size: Int): ByteArray {
        // QRコード生成のための設定
        val hints = ConcurrentHashMap<EncodeHintType, Any>()
        hints[EncodeHintType.ERROR_CORRECTION] = ErrorCorrectionLevel.M
        hints[EncodeHintType.CHARACTER_SET] = encoding
        hints[EncodeHintType.MARGIN] = 0

        // QRコード生成
        val writer = QRCodeWriter()
        val bitMatrix: BitMatrix = writer.encode(source, BarcodeFormat.QR_CODE, size, size, hints)
        val image: BufferedImage = MatrixToImageWriter.toBufferedImage(bitMatrix)

        // 画像をbyte配列に変換
        val baos = ByteArrayOutputStream()
        ImageIO.write(image, "png", baos)
        return baos.toByteArray()
    }
}

このサービスクラスを用いて、SpringのコントローラからQRコード生成リクエストを受け付けます。生成されたQRコードはHTTPレスポンスとして返されます。

QRCodeController
@Controller
open class QRCodeController(
    // 依存性注入
    var qrCodeService: QRCodeService
) {

    @RequestMapping(value = ["/generateQRCode"], method = [RequestMethod.GET])
    fun generateQRCode(@RequestParam(value = "url", required = true) url: String, res: HttpServletResponse) {
        // QRコード生成
        val encoding = StandardCharsets.UTF_8.displayName()
        val size = 512
        val qrCode = qrCodeService.getQRCodeImage(url, encoding, size)

        // QRコードをレスポンスに書き出し
        res.setContentType(MediaType.IMAGE_PNG_VALUE);
        IOUtils.copy(ByteArrayInputStream(qrCode), res.getOutputStream())
    }
}

これにより、ユーザーは/generateQRCode?url=任意のURLという形でアクセスし、指定したURLのQRコードが生成されます。

QRコード生成の応用

この動的なQRコード生成は、ウェブサイトの記事を共有するためのQRコードをページロード時に生成する等、様々な場面で利用できます。URL以外の情報もQRコードに埋め込むことが可能なため、ユーザー情報等を暗号化してQRコードにし、セキュアな情報共有も可能です。

以上がSpringフレームワークを使った動的QRコード生成の方法になります。Maven設定からサービスクラス作成、コントローラの設定まで手順を踏んで解説しました。SpringフレームワークとZXingライブラリを活用して、自分だけのQRコード生成サービスを作ってみてはいかがでしょうか。プログラミングの世界は広大で、常に新たな知識を吸収し続けることで成長していけます。今回学んだ知識があなたの一助となれば幸いです。

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?