バーコードまたはQRコードを生成する場合、グラフは通常、多くの直線と正方形で構成されます。これらのグラフィックをWebページや印刷でよりスムーズに見せてギザギザのエッジを削減するには、PHPの画像機能機能を使用して、画像のアンチエイリアシングを可能にすることができます。この記事では、イメージャンティアリアス関数の使用を紹介し、バーコードまたはQRコード生成の例を組み合わせて、より明確なグラフィック出力を実現する方法を示します。
ImageAntialiasは、PHP GDライブラリの関数であり、描かれたラインのアンチアライアを有効または無効にします。アンチエイリアスが有効になると、描画された線のエッジがより滑らかになり、ジャグ効果が低下します。
関数プロトタイプは次のとおりです。
bool imageantialias ( resource $image , bool $enabled )
$画像:画像リソース
$ enabled :アンチエイリアシング、真の有効化、偽障害を有効にするかどうか
通常、バーコードまたはQRコードは、ピクセルブロックまたは線で構成されるグラフであり、拡大または削減されるとギャングされます。アンチエイリアシングを有効にすることにより、エッジはより柔らかくなり、それにより、特に印刷するときに視覚効果が改善されます。
ただし、イメージャアントアリアスは、ラインとポリゴンに明らかな影響を及ぼし、個々のピクセルブロックに限られた影響を及ぼします。したがって、QRコード生成では、他の平滑化処理技術とともに使用されることがよくあります。
以下では、PHP GD関数を使用して、シンプルなバーコードストライプ図を作成し、画像を使用したアンチエイリアスを有効にします。
<?php
// 空白の画像を作成します
$width = 200;
$height = 80;
$image = imagecreatetruecolor($width, $height);
// 色を割り当てます
$white = imagecolorallocate($image, 255, 255, 255);
$black = imagecolorallocate($image, 0, 0, 0);
// 白で満たされた背景
imagefill($image, 0, 0, $white);
// アンチエイリアシングを有効にします
imageantialias($image, true);
// バーコードを描くための黒いストライプ(簡単な例)
for ($x = 10; $x < 190; $x += 20) {
imageline($image, $x, 10, $x, 70, $black);
}
// 出力画像
header('Content-Type: image/png');
imagepng($image);
// 無料のリソース
imagedestroy($image);
?>
この例では、200x80の画像を作成し、20ピクセル間隔でいくつかの垂直の黒い線を描画します。 ImageAntialias($ image、true)を呼び出した後、ラインのエッジがよりスムーズになります。
QRコードは通常、ピクセルブロックで表され、GDライブラリの画像診断は単一のピクセル描画への影響が限られています。一般に、「滑らかな」効果は、QRコードイメージにズームインしてからターゲットサイズを縮小することで実現されます。さらに、QRコードを描画するときにImageFilledRectangleを使用してより大きなピクセルを描画し、それらをアンチエリアスラインと組み合わせて視覚的な滑らかさを強化することもできます。
次の例は、QRコード図のより大きなバージョンを作成し、それを縮小して特定の防止効果を達成する方法を示しています。
<?php
// QRコードデータが生成されたと仮定します,シンプルシミュレーションQRコードマトリックス
$matrix = [
[1,0,1,1,0,1,0,0],
[0,1,0,1,1,0,1,0],
[1,1,1,0,0,1,0,1],
[0,0,1,1,0,0,1,1],
[1,0,0,1,1,1,0,0],
[1,1,0,0,1,0,1,0],
[0,1,1,1,0,1,0,1],
[1,0,0,0,1,1,1,0],
];
$scale = 10; // 比率を拡大します
$size = count($matrix) * $scale;
$image = imagecreatetruecolor($size, $size);
$white = imagecolorallocate($image, 255, 255, 255);
$black = imagecolorallocate($image, 0, 0, 0);
imagefill($image, 0, 0, $white);
imageantialias($image, true);
for ($y = 0; $y < count($matrix); $y++) {
for ($x = 0; $x < count($matrix[$y]); $x++) {
if ($matrix[$y][$x] == 1) {
// 拡大ブロックを描きます
imagefilledrectangle(
$image,
$x * $scale,
$y * $scale,
($x + 1) * $scale - 1,
($y + 1) * $scale - 1,
$black
);
}
}
}
// 画像を削減して、アンチアリアシング効果を実現します
$finalWidth = count($matrix) * 3; // 縮む3倍
$finalHeight = $finalWidth;
$finalImage = imagecreatetruecolor($finalWidth, $finalHeight);
imagecopyresampled(
$finalImage,
$image,
0, 0, 0, 0,
$finalWidth, $finalHeight,
$size, $size
);
header('Content-Type: image/png');
imagepng($finalImage);
imagedestroy($image);
imagedestroy($finalImage);
?>
このコードは、10倍のQRコードブロック図を作成し、サイズの3倍に縮小し、 ImageCopyResampledの高品質の再サンプリングを使用して特定のアンチエイリアシング効果を実現することで作成されています。
イメージャアチアリアスは、主に画像内のラインのアンチエイリアシングを可能にして、ラインをより滑らかにするために使用されます。
バーコードの場合、イメージャアニティアリアを有効にすることで、直線のエッジが大幅に改善されました。
QRコードの場合、単にイメージャアニ症を有効にすることは効果が制限されており、通常、ズームインとアウトの方法を組み合わせて、よりスムーズなグラフィックスを取得します。
PHP GDの他の画像処理機能と組み合わせることで、バーコードとQRコードの視覚品質を効果的に改善できます。