0

データベースから写真を返すこの PHP スクリプトがあります。現在、ループを使用して一度に 5 つの写真を返していますが、それらはすべて重なっていると思われるため、1 つしか表示されません。他の画像が見えるように、各画像を数ピクセルずらすにはどうすればよいですか?

<?php
    $mysqli=mysqli_connect('localhost','root','','draftdb');
    if (!$mysqli)
    die("Can't connect to MySQL: ".mysqli_connect_error());

    $param = isset($_GET['rarity']) ? $_GET['loopcount'] :null;

    $stmt = $mysqli->prepare("SELECT display.PICTURE_ID 
    FROM cards  
    INNER JOIN display ON cards.DISPLAY_ID = display.DISPLAY_ID 
    WHERE display.DISPLAY_ID=? AND cards.CARD_TYPE =?" );

    $cardtype='Rare';


    for ($i=0; $i<=5; $i++) 
    {
      $num[$i] = rand(16,30);
       for ($j=0; $j<$i; $j++) 
       {            
          while ($num[$j] == $num[$i])
          {              
             $num[$i] = rand(16,30);   
          }          

                   $displayid= array_shift($num);   

       }   



    $stmt->bind_param("si", $displayid, $cardtype);
    $stmt->execute();
    $stmt->bind_result($image);
    $stmt->fetch();
    header("Content-Type: image/jpeg");
    echo $image; 
    }


    ?>
4

2 に答える 2

3

PHPで画像を「表示」することはできません。タグを使用して HTML でそれを行います<img>。あなたがしていることは、生の画像データを印刷してから、ブラウザーにそれが画像であることを伝えることです。これを行って複数の画像を印刷するとどうなるかはわかりませんが、おそらくこれをどのように処理するかはブラウザ次第です。

たとえば、データベースにブロブとして保存する場合、これは1つの画像で行われることがあります。しかし、それらを表示するという目的のためではありません。

画像をマージしたい場合は、PHP の GD ライブラリでこれを行うことができます。

于 2012-07-28T22:44:23.180 に答える
2

でブラウザに送信できる画像は 1 つだけですContent-Type: image/jpeg。複数の写真を送信するには、2 つの方法が考えられます。

1. GDを使用して、他のすべての画像を含む新しい画像を作成し、送信します。

2.画像​​の代わりに HTML ページを送信します。

<?php 
//some code which gets the images and puts them in an array - $images
?>
<!DOCTYPE HTML>
<html>
<body>
<?php foreach($images as $image):?>
    <img src="data:image/jpeg;base64,<?php echo base64_encode($image);?>"/><br/>
<?php endforeach;?>
</body>
</html>

編集: ブラウザーは、非常に大きな HTML ドキュメントを高速に解析するのが難しいようです。そのため、大きな画像や大量の画像がある場合は、個別の HTTP リクエスト ( src="image.php?image=xxxx") で読み込む方がよい場合があります。

于 2012-07-28T22:52:31.320 に答える