2017-07-06 14 views
3

このコードを使用して、以下のカスタムテキストのqrコードを作成します。私はいくつかの方法を試みたが、私はいつも失敗した。私は助けが必要です。以下のテキストでQRを作成できません

// Set the content-type 
header('Content-Type: image/png'); 
header("Content-Disposition: filename='sample.png'"); 
$main = imagecreatetruecolor(150, 180); 
$qr = imagecreatefrompng("https://api.qrserver.com/v1/create-qr-code/?size=150x150&format=png&margin=5&data=sample"); 
// Create the image 
$im = imagecreatetruecolor(150, 30); 
// Create some colors 
$black = imagecolorallocate($im, 255, 255, 255); 
imagefilledrectangle($im, 0, 0, 399, 29, $black); 
// Font path 
$font = 'arial.ttf'; 
// Add the text 
imagettftext($im, 20, 0, 5, 25, $black, $font, 'sample'); 
imagecopymerge_alpha($main, $qr, 0, 0, 0, 0, 150, 150, 100); 
imagecopymerge_alpha($main, $im, 0, 150, 0, 0, 150, 30, 100); 
imagepng($main); 
imagedestroy($main); 

また、空白のページが表示されます。

+0

'' imagecreatefrompng''は、 "fopenラッパーが有効になっている場合、URLはこの関数でファイル名として使用できます。 "$ qr_img_as_string = file_get_contents ..." 'を使用し、' 'imagecreatefromstring''を使用することもできます。 – alistaircol

+0

' 'var_dump( (bool)ini_get( 'allow_url_fopen')); '' – alistaircol

答えて

2

エラーが発生しましたが、Content-Type: image/pngをデバッグ用に設定しているため、その行をコメントアウトするかサーバーログを確認するだけで、ブラウザで表示することはできません。

最初に思い出されるのは、this answerです。フォントの相対パスを使用しています。これは、画面への出力がイメージを壊すことになり、あなたが必要とするフォントを持っていないことは言うまでもありませんという警告を出すには十分です。私はfix this lineでしょう。私にとって

$font = realpath(__DIR__.'/arial.ttf'); 

、致命的なエラーだった:未定義の関数imagecopymerge_alphaへ

コール()

あなたがそのコードを得たところ、私はわからないんだけど、私はそうthis questionを見つけました私はそれが関連していると思った。

function imagecopymerge_alpha($dst_im, $src_im, $dst_x, $dst_y, $src_x, $src_y, $src_w, $src_h, $pct){ 
    // creating a cut resource 
    $cut = imagecreatetruecolor($src_w, $src_h); 

    // copying relevant section from background to the cut resource 
    imagecopy($cut, $dst_im, 0, 0, $dst_x, $dst_y, $src_w, $src_h); 

    // copying relevant section from watermark to the cut resource 
    imagecopy($cut, $src_im, 0, 0, $src_x, $src_y, $src_w, $src_h); 

    // insert cut resource to destination image 
    imagecopymerge($dst_im, $cut, $dst_x, $dst_y, 0, 0, $src_w, $src_h, $pct); 
} 

そしてIは、カラー白と黒の背景とテキストの色の両方として設定された標識された気づい - そうかかわらず、それがあった色で、それが見えません。だから私はchanged these linesです。 (-手段は、行を削除し、+が追加された行を意味します。)

// Create the image 
$im = imagecreatetruecolor(150, 30); 
// Create some colors 
-$black = imagecolorallocate($im, 255, 255, 255); 
+$white = imagecolorallocate($im, 255, 255, 255); 
+$black = imagecolorallocate($im, 0, 0, 0); 
imagefilledrectangle($im, 0, 0, 399, 29, $black); 
// Font path 
$font = realpath(__DIR__.'/arial.ttf'); 
// Add the text 
-imagettftext($im, 20, 0, 5, 25, $black, $font, 'sample'); 
+imagettftext($im, 20, 0, 5, 25, $white, $font, 'sample'); 
imagecopymerge_alpha($main, $qr, 0, 0, 0, 0, 150, 150, 100); 
imagecopymerge_alpha($main, $im, 0, 150, 0, 0, 150, 30, 100); 
imagepng($main); 

そして最後に、代わりに単語sampleをハードコーディングするの、楽しみのためだけに私は、クエリ文字列にすることを設定します。

+$text = $_GET['qr'] ?? 'sample'; 
+ 
// Set the content-type 
header('Content-Type: image/png'); 
header("Content-Disposition: filename='sample.png'"); 
$main = imagecreatetruecolor(150, 180); 
-$qr = imagecreatefrompng("https://api.qrserver.com/v1/create-qr-code/?size=150x150&format=png&margin=5&data=sample"); 
+$qr = imagecreatefrompng("https://api.qrserver.com/v1/create-qr-code/?size=150x150&format=png&margin=5&data=$text"); 
// Create the image 
$im = imagecreatetruecolor(150, 30); 
// Create some colors 
@@ -14,7 +16,7 @@ imagefilledrectangle($im, 0, 0, 399, 29, $black); 
// Font path 
$font = realpath(__DIR__.'/arial.ttf'); 
// Add the text 
-imagettftext($im, 20, 0, 5, 25, $white, $font, 'sample'); 
+imagettftext($im, 20, 0, 5, 25, $white, $font, $text); 

GET/

sample qr

GET /?QR =ハロー

hello qr

<?php 

$text = $_GET['qr'] ?? 'sample'; 

// Set the content-type 
header('Content-Type: image/png'); 
header("Content-Disposition: filename='sample.png'"); 
$main = imagecreatetruecolor(150, 180); 
$qr = imagecreatefrompng("https://api.qrserver.com/v1/create-qr-code/?size=150x150&format=png&margin=5&data=$text"); 
// Create the image 
$im = imagecreatetruecolor(150, 30); 
// Create some colors 
$white = imagecolorallocate($im, 255, 255, 255); 
$black = imagecolorallocate($im, 0, 0, 0); 
imagefilledrectangle($im, 0, 0, 399, 29, $black); 
// Font path 
$font = realpath(__DIR__.'/arial.ttf'); 
// Add the text 
imagettftext($im, 20, 0, 5, 25, $white, $font, $text); 
imagecopymerge_alpha($main, $qr, 0, 0, 0, 0, 150, 150, 100); 
imagecopymerge_alpha($main, $im, 0, 150, 0, 0, 150, 30, 100); 
imagepng($main); 
imagedestroy($main); 

function imagecopymerge_alpha($dst_im, $src_im, $dst_x, $dst_y, $src_x, $src_y, $src_w, $src_h, $pct){ 
    // creating a cut resource 
    $cut = imagecreatetruecolor($src_w, $src_h); 

    // copying relevant section from background to the cut resource 
    imagecopy($cut, $dst_im, 0, 0, $dst_x, $dst_y, $src_w, $src_h); 

    // copying relevant section from watermark to the cut resource 
    imagecopy($cut, $src_im, 0, 0, $src_x, $src_y, $src_w, $src_h); 

    // insert cut resource to destination image 
    imagecopymerge($dst_im, $cut, $dst_x, $dst_y, 0, 0, $src_w, $src_h, $pct); 
} 
+1

素晴らしい答え。本当にありがとう! – nskmr

関連する問題