1

時刻表示中に画像のサムネイルを表示したいのですが、画像を保存したくありません。

私はいくつかのスクリプトを試しnotorious ;)ましたが、うまくいきません:(。見て、何か考えがあるか教えてください

<?php
    function print_thumb($src, $desired_width = 100){
        /* read the source image */
        $source_image = imagecreatefromjpeg($src);
        $width = imagesx($source_image);
        $height = imagesy($source_image);

        /* find the "desired height" of this thumbnail, relative to the desired width  */
        $desired_height = floor($height * ($desired_width / $width));

        /* create a new, "virtual" image */
        $virtual_image = imagecreatetruecolor($desired_width, $desired_height);

        /* copy source image at a resized size */
        imagecopyresampled($virtual_image, $source_image, 0, 0, 0, 0, $desired_width, $desired_height, $width, $height);


        // Set the content type header - in this case image/jpeg
        header('Content-Type: image/jpeg');

        // Output the image
        imagejpeg($virtual_image);

    }
?>

<img src="<?php print_thumb("s1.jpg"); ?>" />

このファイルをthumbs.php(単一のファイル)として保存し、localhost経由でアクセスすると、次のように表示されます

<img src="http://localhost/test/thumbs.php">

両方を別々のファイルに書くとうまくいきます。

のようfile.html

<img src="thumb.php?img=s1.jpg" />

親指.php

<?php
    function print_thumb($src, $desired_width = 100){
        /* read the source image */
        $source_image = imagecreatefromjpeg($src);
        $width = imagesx($source_image);
        $height = imagesy($source_image);

        /* find the "desired height" of this thumbnail, relative to the desired width  */
        $desired_height = floor($height * ($desired_width / $width));

        /* create a new, "virtual" image */
        $virtual_image = imagecreatetruecolor($desired_width, $desired_height);

        /* copy source image at a resized size */
        imagecopyresampled($virtual_image, $source_image, 0, 0, 0, 0, $desired_width, $desired_height, $width, $height);


        // Set the content type header - in this case image/jpeg
        header('Content-Type: image/jpeg');

        // Output the image
        imagejpeg($virtual_image);

    }

    print_thumb($_REQUEST['img']);
?>
4

4 に答える 4

1

2 つの別個のスクリプトが必要です。

1 つは画像を出力しimage/jpg、もう 1 つは HTML を出力します。src画像を属性に直接レンダリングしようとしているようです。

HTML ページ:

<html>
    <body>
        <img src="http://localhost/test/thumbs.php?img=s1.jpg">
    </body>
</html>

PHP ページ:

<?php
    function print_thumb($src, $desired_width = 100){
        // your function as is
    }

    // you should probably sanitize this input
    print_thumb($_REQUEST['img']);
?>
于 2013-01-04T10:53:49.370 に答える
0

表示されているコードのように、がthumbs.phpの一部である場合<img src="<?php print_thumb("s1.jpg"); ?>" />は、それを削除する必要があります。また?>、thumbs.phpから削除することをお勧めします

于 2013-01-04T10:51:32.947 に答える
0

「thumb.php」内

<?php

  function print_thumb($src, $desired_width = 100){

    if( !file_exists($src) )
      return false;

    /* read the source image */
    $source_image = imagecreatefromjpeg($src);
    $width = imagesx($source_image);
    $height = imagesy($source_image);

    /* find the "desired height" of this thumbnail, relative to the desired width  */
    $desired_height = floor($height * ($desired_width / $width));

    /* create a new, "virtual" image */
    $virtual_image = imagecreatetruecolor($desired_width, $desired_height);

    /* copy source image at a resized size */
    imagecopyresampled($virtual_image, $source_image, 0, 0, 0, 0, $desired_width, $desired_height, $width, $height);


    // Set the content type header - in this case image/jpeg
    header('Content-Type: image/jpeg');

    // Output the image
    imagejpeg($virtual_image);

    return true;

  }

  if( isset( $_GET['file'] ) && !empty( $_GET['file'] ) ){

    if( !print_thumb( $_GET['file'] ) ){

      echo 'Failed to create thumb for "'.$_GET['file'].'"';

    }else{

      // The Thumb would have been returned

    }

  }else{

    echo 'No File specified';

  }
?>

サムネイルを表示している任意のページ内

<img src="thumb.php?file=s1.jpg" />

既存のコードの問題は、間違ったコードを間違ったファイルに入れていることです。thumb.phpファイルは、送信されたパラメーター (サムネイルに変換するためのファイル) を調べて、画像を返すこと以外は何もしません。

したがって<img....、そのファイルの最後にマークアップを配置すると、問題が発生します。

代わりに、画像を表示させようとしている場所を確認する必要があります。そして、その画像ファイル名をマークアップに渡す必要があるため、thumbs.phpファイルは、サムネイル化して返すものを認識します。

別の回答者が指摘したように、自分で書くよりもはるかに簡単にこれを行うライブラリがあります.

于 2013-01-04T11:09:19.603 に答える
0

"TimThumb" ( ここをクリック ) を使用してみてくださいこれにより、このようなことが非常に簡単になります。

于 2013-01-04T10:49:54.540 に答える