0

ソースが存在しない場合、image=90273497823 に対して不正なリクエストが行われます。代わりに、正しいサイズのプレースホルダー画像を返す必要があります。

例は次のとおりです。

<img src="resources/image.php?id=95648633&amp;x=160&amp;y=120&amp;color=1"  alt="kitty"/>

Web ページがサーバーから画像を直接取得できるようにする代わりに、スクリプト image.php を呼び出してこの要求を処理し、必要に応じて例外を処理します。スクリプトは存在するすべての画像に対して機能しますが、存在しない画像の場合、スクリプトは私が持っている error.jpg 画像の読み込みに失敗します。私のエラー処理が間違っていると私に信じ込ませます。

スクリプトが実行することを期待しているのは、ファイルが存在するかどうかを確認することです。存在しない場合は、正しいサイズ (存在しない画像の同じサイズの要求) に置き換えます error.jpg

私のスクリプトは次のとおりです。

<?php

header('Content-type: image/jpg');//override the return type
                              //so browser expects image not file
$id=$_GET['id'];//get file name
$new_width=$_GET['x'];//get width
$new_height=$_GET['y'];//get heigth
$color=$_GET['color'];//get colored version type
$filename=$id;//file id is set as file name
$filename.=".jpg";//append .jpg onto end of file name




// create a jpeg from the id get its size
$im=imagecreatefromjpeg($filename);

// get the size of the image
list($src_w, $src_h, $type, $attr)=getimagesize($filename);


/*
  Exception handling for when an image is requested and the file dosent exist
  in the current file system or directory. Returns file "error.jpg" correctly
  sized in the place of the  requested null file.
*/
if(!file_exists($filename))//(file_exists($filename) == false)
//(!file_exists($filename))
  {


    imagedestroy($im);//why do I have to destroy it, why cant I write over it?
    $im=imagecreatefromjpeg("error.jpg");
    list($src_w, $src_h, $type, $attr)=getimagesize($im);

  }

/*
  this function will resize the image into a temporary image
  and then copy the image back to $im
*/
if($new_width != '' && $new_height != '')

  {
     //MAKE A TEMP IMAGE TO COPY FROM
     $imTemp=imagecreate($new_width, $new_height);
     imagecopyresized($imTemp, $im, 0, 0, 0, 0, $new_width, $new_height, $src_w,
                     $src_h);
     imagedestroy($im);//free up memory space

     //COPY THE TEMP IMAGE OVER TO $im
     $im=imagecreate($new_width, $new_height);
     imagecopy($im, $imTemp, 0, 0, 0, 0, $new_width, $new_height);
     imagedestroy($imTemp);//free up memory space
  }

/*
  If the image being requested has color = 0, then we return a grayscale image,
  but if the image is already grayscale
*/
if($color == 0)
  {
     imagefilter($im, IMG_FILTER_GRAYSCALE);
  }

//What do we do if color = 0, but they want a colorized version of it???

imagejpeg($im);//output the image to the browser
imagedestroy($im);//free up memory space
?>
4

1 に答える 1

0

getimagesizeは、画像リソースハンドルではなく、ファイル名を取ります。それはあなたが間違っている1つの場所かもしれません。

于 2012-06-20T19:34:09.800 に答える