📸
[php]BaconQrCodeで生成したQRコードの色を変える
はじめに
BaconQrCodeライブラリを使ってQRコードを生成しています。
QRコードの色を変えたいという要望があり実現方法を試してみたので、備忘録として投稿します。
現状
二要素認証用のQRコード画像を生成しています。
public function createQrImage(string $key, string $accountName): string
{
// QRに埋め込むURL生成
$g2fa = new Google2FA();
$qrUrl = $g2fa->getQRCodeUrl(
config('app.name'),
$accountName,
$key
);
// QR画像生成
$renderer = new ImageRenderer(
new RendererStyle(256, 12),
new ImagickImageBackEnd()
);
$writer = new Writer($renderer);
return base64_encode($writer->writeString($qrUrl));
}
こんな感じで生成されます。
変更
確認したところ、RendererStyleのfillで、背景白・印字色黒の設定を行っているようでした。
BaconQrCode\Renderer\RendererStyle\RendererStyle.php
public function __construct(
int $size,
int $margin = 4,
?ModuleInterface $module = null,
?EyeInterface $eye = null,
?Fill $fill = null
) {
$this->margin = $margin;
$this->size = $size;
$this->module = $module ?: SquareModule::instance();
$this->eye = $eye ?: new ModuleEye($this->module);
$this->fill = $fill ?: Fill::default();
}
BaconQrCode\Renderer\RendererStyle\Fill.php
public static function default() : self
{
return self::$default ?: self::$default = self::uniformColor(new Gray(100), new Gray(0));
}
上記からuniformColorを設定することで色を変えれそうということがわかったので、試してみます。(赤に変更)
// QR画像生成
$renderer = new ImageRenderer(
+ new RendererStyle(256, 12, null, null, Fill::uniformColor(new Gray(100), new Rgb(255, 0, 0))),
- new RendererStyle(256, 12),
new ImagickImageBackEnd()
);
無事赤のQRコードになりました。
おわりに
QRコードは白地に黒が推奨されているため、あまり需要もなさそうですが参考になれば幸いです。
おわり
Discussion