簡単Elixirシリーズ
~ Elixir Advent Calendar の記事の合わせ技をやってみた ~
この記事は「Elixir Advent Calendar 2022」20日目の記事です
東京にいるけどfukuokaexのYOSUKEです。
簡単 Elixirシリーズでは小ネタをサクッと書いていこう。というコンセプトで作っていきます。
今回は、@mnishiguchi さんのElixirでQRコードを表示して楽しむを見て、QRコードを画像生成しようと、ErlangにあるEGD(Earling Graphical Droid)という画像ライブラリを利用して生成しようと思ったら、
@t-yamanashi さんのElixirでテスト用の画像を量産しようという記事が飛び込んできて、あれ?こっちのモジュール使った方が楽にできそうだぞ?
ということで、やってみた。という小ネタ(そう、この記事はサクッとがコンセプトW)
早速、プロジェクトファイルを作成する。
$ mix new qr_coder
まずは、QRコード生成のライブラリについて@mnishiguchiさんの記事で紹介されていた「iodevs/qr_code」がソースを見るに、SVGの書き出しまで出来そうだったので採用。
続いて、@t-yamanashi さんが紹介してくれていたmogrify
を利用します。
defp deps do
[
{:qr_code, "~> 2.3.1"},
{:mogrify, "~> 0.9.2"}
]
end
で、Mogrifyの説明を見ると、 An Elixir wrapper for ImageMagick command line.
と書かれていたので、ImageMagickをインストールして、それを利用する薄いラッパーなのね。ということでインストール。
brew install imagemagick
まずは、QRコードのsvg
を生成する関数を作成する
defmodule QrCoder do
def svg(str) do
QRCode.create(str)
|> Result.and_then(&QRCode.Svg.save_as(&1,"#{str}.svg"))
end
end
続いて、生成したsvgをpngに変換する関数を作成する。
今回はまず試したいので、サクッとファイル名を固定にして書き出すようにしてみた。
defmodule QrCoder do
# 省略 #
def png(path) do
Mogrify.open(path)
|> format("png")
|> save(path: "QR_code.png")
end
end
早速、会社のURLを入れたQRコードを生成してみる。
iex()> QrCoder.svg("thewaggle-training.com")
{:ok, "thewaggle-training.com.svg"}
続いて、PNGに変換してみる。
iex()> QrCoder.png("thewaggle-training.com.svg")
%Mogrify.Image{
animated: false,
buffer: nil,
dirty: %{},
ext: ".png",
format: "png",
frame_count: 1,
height: nil,
operations: [],
path: "QR_code.png",
width: nil
}
お、できた。
いや、Elixir の Advent Calendar で学んだことを組み合わせてみるとまた面白い発見ありますね。
皆さんも是非、チャレンジしてみてください。