0

みなさん、良い一日を。簡単に言えば、私は都市のライバルのようなオンライン カード ゲームを作ろうとしています。そのために、私は主に PHP と SQL を使用しています。現在、データベースに基づいてカードの png ファイルを生成しようとしています。

画像にテキストを追加するために、画像をアルファチャンネルとマージすることはすでにできましたが、私の本当の問題は、この画像を他のHTMLドキュメントの基本レイアウトと一緒に出力できないようです。ここに私のテストコードがあります:

<?php 
include 'phpGDtools.php';
$image1path = 'monstercard.png';
$image2path = 'monsterimage.png';
$xdim = 220;
$ydim = 301;
//$image = mergeTwoPNGAndReturn($image1path, $image2path, $xdim, $ydim);
mergeTwoPNGAndOutputInBrowser($image1path, $image2path, $xdim, $ydim);
echo('Hello !');
?>

悪いフォーマットで申し訳ありませんが、私はそれを改善することができませんでした:/ phpGDTools.php の私の関数は次のとおりです。

function mergeTwoPNGAndOutputInBrowser($image1path, $image2path, $xdim, $ydim)
{
//TEST FUNCTION
//Both paths to the images, x and y dimensions of the image you're about to fuse.
$final_img = imagecreate($xdim, $ydim);

//Step 1 : Create the objects from the PNGs
$image_1 = imagecreatefrompng($image1path);
$image_2 = imagecreatefrompng($image2path);

//Step 1.2 : Allow transparency of bases.
imagealphablending($image_1, true);
imagesavealpha($image_1, true);
imagealphablending($image_2, true);
imagesavealpha($image_2, true);

//Step 2 : Merge the images into one.
imagecopy($image_1, $image_2, 0, 0, 0, 0, $xdim, $ydim);
imagecopy($final_img, $image_1, 0, 0, 0, 0, $xdim, $ydim);

//Step 3 : Allow transparency of final image.
imagealphablending($final_img, true);
imagesavealpha($final_img, true);

//Step 4 : Output image to browser.
header('Content-Type: image/png;');
imagepng($image_1);
}

これにより、意図したとおりの画像が非常にうまく出力されますが、「Hello !」というテキストが出力されます。どこにも見つかりません。また、"$final_image" の部分はテスト用ですので無視してください。あなたは私がこの行にコメントしたことに気づいたかもしれません:

//$image = mergeTwoPNGAndReturn($image1path, $image2path, $xdim, $ydim);

これは私が使用したい機能です。うまくいけば、私の目標は、このphpファイルをhtmlページに含めて、2つのタグの間に画像オブジェクトを印刷できるようにすることです。技術的には、ファイルとして保存してからファイルを出力することもできますが、プロジェクトを考えると非常に非効率的です。

助けてくれてありがとう。

〜ジュール・クルトワ

4

3 に答える 3

0

同じphpスクリプトから画像データとhtmlデータを出力しようとしているようです。関数を呼び出します

mergeTwoPNGAndOutputInBrowser();

画像ヘッダーをブラウザに出力します。そして、あなた

echo('Hello !');

「hello」は画像データではなくテキストデータなので、画像には表示されません。このようなことができます。

<?php 
include 'phpGDtools.php';
$image1path = 'monstercard.png';
$image2path = 'monsterimage.png';
$xdim = 220;
$ydim = 301;
if(isset($_GET['display_image'])){
  //Output image data
  mergeTwoPNGAndOutputInBrowser($image1path, $image2path, $xdim, $ydim);
}
else{
  //Output page data
  echo 'Hello !';
  echo "<img src=\"?display_image\">";
}
?>
于 2013-09-14T12:35:27.957 に答える
0

コンテンツ タイプを画像に設定しているため、送り返すものはすべて画像として解釈されます。HTML をエコーし​​ている場合、画像データに追加しているため、ブラウザーは画像を読み取れません。

HTML ページを作成してから、HTML ファイル内の画像を参照する必要があります。 または タグを使用して、画像の URL への src を指定するか、画像を base64 してインラインで使用することができます。

あなたは置き換えることができます

imagepng($image_1);

ob_start(); 

imagejpeg($image_1);
$image_data = ob_get_contents (); 

ob_end_clean (); 

$image_data_base64 = base64_encode($image_data);

echo '<img src="data:image/png;base64,' . $image_data_base64 . '" />';

その場で画像を処理することは避けて、それらを保存しようとする必要がありますが、これにより、質問で求めたことが達成されるはずです。

于 2013-09-14T12:35:30.940 に答える
0

ヘッダーを設定したため、テキストが表示されません

   header('Content-Type: image/png;');

imagestring()同じ PHP GD ライブラリのを使用してみませんか。画像にテキストを書き込めます。

ここにクールな例があります。この同じコードをmergeTwoPNGAndOutputInBrowser()関数に埋め込むことができます。

<?php
// Create a 100*30 image
$im = imagecreate(100, 30);

// White background and blue text
$bg = imagecolorallocate($im, 255, 255, 255);
$textcolor = imagecolorallocate($im, 0, 0, 255);

// Write the string at the top left
imagestring($im, 5, 0, 0, 'Hello world!', $textcolor);

// Output the image
header('Content-type: image/png');

imagepng($im);
imagedestroy($im);
?>

ソース

于 2013-09-14T12:45:20.210 に答える