0

出力画像を変数として保存したいので、ループを実行できます。どうすればこれができるのだろうか?imagejpegでこれを行う方法がわかりませんか?コードを最終的に echo $image で画像を表示できる場所にしたいのと同じように。

 $imagequery = mysql_query("SELECT source FROM photos ORDER BY id DESC LIMIT 16");

for($iii=0; $iii<16; $iii++) {

$imagetrial = mysql_result($imagequery,$iii,'source'); $imageSrc = imagecreatefromstring($imagetrial);

 $width = "300";

 if (is_numeric($width) && isset($imageSrc)){
 header('Content-type: image/jpeg');
 makeThumb($imageSrc, $width);
  }

function makeThumb($src,$newWidth) {

$srcImage = imagecreatefromjpeg($src);
$width = imagesx($srcImage);
 $height = imagesy($srcImage);

 $newHeight = floor($height*($newWidth/$width));

  $newImage = imagecreatetruecolor($newWidth,$newHeight);

  imagecopyresized($newImage,$srcImage,0,0,0,0,$newWidth,$newHeight,$width,$height);

   imagejpeg($newImage);
 }

}

4

2 に答える 2

0

関数を見てみようimagecreatefromstring

http://php.net/manual/en/function.imagecreatefromstring.php

$image = imagecreatefromstring($imageSrc);

if ($image !== FALSE) {
  // the variable is now a valid image resource
}

クエリに関しては、複数の行が返されます。行を 1 つずつフェッチする必要があります。

$result = mysql_query("SELECT source FROM photos ORDER BY id DESC LIMIT 16");

while ($row = mysql_fetch_assoc($result)) {
  $image = imagecreatefromstring($row['source']);

  if ($image !== FALSE) {
    // the variable is now a valid image resource
  }
}

ただし、リソースを大量に消費します。より良い解決策は、画像をディスクに保存し、データベースに画像へのパスを用意することです。

また、手続き型の mysql 関数は非推奨であることにも注意してください。mysqli に移動する必要があります。

http://fr2.php.net/manual/en/book.mysqli.php

編集:あなたの質問は、あなたが望むものを指定していませんでした。このコード (テストされていません) は、ギャラリーのような方法でサイズごとにサムネイルを描画します。簡略化する方法もありますが、分かりやすいように書いてみました。

$num_columns = 4; // the number of thumbnails per row
$thumb_width = 400;
$thumb_height = 300;

$result = mysql_query("SELECT source FROM photos ORDER BY id DESC LIMIT 16");

// the actual number of results
$num_photos = mysql_num_rows($result);
$num_rows = ceil($num_photos / $num_columns);

$gallery_width = $num_columns * $thumb_width;
$gallery_height = $num_rows * $thumb_height;

// create a large empty image that will fit all thumbnails
$gallery = imagecreatetruecolor($gallery_width, $gallery_height);

$x = 0;
$y = 0;

// fetch the images one by one
while ($row = mysql_fetch_assoc($result)) {
  $image = imagecreatefromstring($row['source']);

  // the variable is now a valid image resource
  if ($image !== FALSE) {
    // grab the size of the image
    $image_width = imagesx($image);
    $image_height = imagesy($image);

    // draw and resize the image to the next position in the gallery
    imagecopyresized($gallery, $image, $x, $y, 0, 0, $thumb_width, $thumb_height, $image_width, $image_height);

    // move the next drawing position to the right
    $x += $thumb_width;

    // if it has reached the far-right then move down a row and reset the x position
    if ($x >= $gallery_width) {     
        $y += $thumb_height;
        $x = 0;
    }

    // destroy the resource to free the memory
    imagedestroy($image);
  }
}
mysql_free_result($result);

// send the gallery image to the browser in JPEG
header('Content-Type: image/jpeg');
imagejpeg($gallery);

編集:コードで修正されたタイプミス

于 2012-12-28T05:49:45.793 に答える
0

画像のコンテンツを変数に保存するには、サムネイル画像を特定のパスに保存してから、file_get_content()関数 を使用して画像のコンテンツを取得する必要があります。

宛先パスを引数としてimagejpeg関数 に渡すことで、最終的なサム イメージを保存できます。

問題の解決策として、下記のサンプル コード スニペットを参照してください。

           $width = "300";
        $thumb_image_file=$_SERVER['DOCUMENT_ROOT'].'/thumbs/abc.jpg';
        if (is_numeric($width) && isset($imageSrc)){
        header('Content-type: image/jpeg');
        makeThumb($imageSrc, $width);
        $img_content=file_get_contents($thumb_image_file);
       echo $img_content;
   }

     function makeThumb($src,$newWidth,$thumb_image_file) {


               $srcImage = imagecreatefromjpeg($src);
             $width = imagesx($srcImage);
            $height = imagesy($srcImage);

        $newHeight = floor($height*($newWidth/$width));

        $newImage = imagecreatetruecolor($newWidth,$newHeight);

              imagecopyresized($newImage,$srcImage,0,0,0,0,$newWidth,$newHeight,$width,$height);


                 imagejpeg($newImage,$thumb_image_file);
   }
于 2012-12-28T06:37:47.903 に答える