1

サーバー上で写真を保存せずにその場でサイズを変更する機能を一日中検索しました.コードは機能し、フルサイズの画像が表示されます。これは機能です:

function resize_image($file, $width, $height) {
    if (file_exists($file)){
        $image = imagecreatefromjpeg($file);
        list($orig_width, $orig_height) = getimagesize($file);
        $ratio = $orig_width / $orig_height;
        if ($ratio < 1) {
            $width = $height * $ratio;
        } else {
            $height = $width / $ratio;
        }
        $new_image = imagecreatetruecolor($width, $height);
        imagecopyresized($new_image, $image,
        0, 0, 0, 0,
        $width, $height,
        $orig_width, $orig_height);
        // header('Content-type: image/jpeg');
        imagejpeg($new_image, NULL, 80);
    }
}

今日検索した内容から(Content-type: image/jpeg')、ブラウザーが出力を画像として認識するようにヘッダーを配置する必要がありますが、そうするとスクリプトが停止します。

これを使用しているページは次のとおりです。

<? include('resize.php');
 $chapter='test';
 $query=$db->prepare("SELECT * FROM `test_db` WHERE `test_db`.`Chapter` LIKE :? ORDER BY `id` ASC LIMIT 0, 6");
    $query->bindValue(1, $chapter, PDO::PARAM_STR);
    $query->execute();
    $rows= $query->fetchAll(PDO::FETCH_ASSOC);  
foreach ($rows as $row){       
    echo "<li><h2>".$row['Name']."</h2></li>" ;
    resize_image("_images/".$row['img_number'].".jpg", 300, 190);
  };  
?>
4

3 に答える 3

0

PHP に終了タグを入れないでください。結果を変更する終了タグの後に空白を出力します。

于 2013-07-22T14:15:11.070 に答える
0

ヘッダーがスクリプトを停止するのはいつからですか?

そして、はい、サイズ変更されたファイルが保存される理由は、(1) おそらく再びそれらが必要になるためです。(2) コンテンツ タイプにより、テキストではなく画像になります。これらの「インライン」のサイズを変更したい場合は、2 つのコンテンツ タイプが必要になりますが、それはうまく機能しないと思います...

あなたができることは、ファイルのサイズを変更して保存し、それを提供して削除することです。一時的な画像ファイルのように。私によると、より直接的な方法は存在しません。しかし、私が間違っている場合は、コメントで指摘してください。私は新しいことを学ぶのが好きです;)

編集:スクリプトが画像のサイズ変更のみを処理する場合を除いて、わかりました。ちょうど今それについて考えています。ごめん :)

于 2013-07-22T14:16:31.703 に答える