2009-06-06 4 views
0

最近私はプロジェクトで働いていました。私は画像のサイズを変更する必要があり、私は次のクラスを使用します。 getimagesize(シーカー/ SeekerPhoto/so.jpg) は[function.getimagesize]:オープンストリームを に失敗した私は、クラスを使用する場合、それは蛇腹どうすればphpのgetimage()警告メッセージを避けることができます

警告等の警告メッセージを表示

class SimpleImage 
{ 
    var $image; 
    var $image_type; 
    function load($filename) 
    {  
     $image_info = getimagesize($filename); 
     $this->image_type = $image_info[2]; 
     if($this->image_type == IMAGETYPE_JPEG) 
     { 
     $this->image = imagecreatefromjpeg($filename); 
     } 
     elseif($this->image_type == IMAGETYPE_GIF) 
     { 
     $this->image = imagecreatefromgif($filename); 
     } 
     elseif($this->image_type == IMAGETYPE_PNG) 
     { 
     $this->image = imagecreatefrompng($filename); 
     } 
    } 
    function save($filename, $image_type=IMAGETYPE_JPEG, $compression=75, $permissions=null) 
    { 
     if($image_type == IMAGETYPE_JPEG) 
     { 
     imagejpeg($this->image,$filename,$compression); 
     } elseif($image_type == IMAGETYPE_GIF) 
     { 
     imagegif($this->image,$filename);   
     } elseif($image_type == IMAGETYPE_PNG) 
     { 
     imagepng($this->image,$filename); 
     } 
     if($permissions != null) 
     { 
     chmod($filename,$permissions); 
     } 
    } 
    function output($image_type=IMAGETYPE_JPEG) 
    { 
     if($image_type == IMAGETYPE_JPEG) 
     { 
     imagejpeg($this->image); 
     } 
     elseif($image_type == IMAGETYPE_GIF) 
     { 
     imagegif($this->image);   
     } 
     elseif($image_type == IMAGETYPE_PNG) 
     { 
     imagepng($this->image); 
     } 
    } 
    function getWidth() 
    { 
     return imagesx($this->image); 
    } 
    function getHeight() 
    {  
     return imagesy($this->image); 
    } 
    function resizeToHeight($height) 
    { 
     $ratio = $height/$this->getHeight(); 
     $width = $this->getWidth() * $ratio; 
     $this->resize($width,$height); 
    } 
    function resizeToWidth($width) 
    { 
     $ratio = $width/$this->getWidth(); 
     $height = $this->getheight() * $ratio; 
     $this->resize($width,$height); 
    } 
    function scale($scale) 
    { 
     $width = $this->getWidth() * $scale/100; 
     $height = $this->getheight() * $scale/100; 
     $this->resize($width,$height); 
    } 
    function resize($width,$height) 
    {  
     $new_image = imagecreatetruecolor($width, $height);  
     imagecopyresampled($new_image, $this->image, 0, 0, 0, 0, $width, $height, $this->getWidth(), $this->getHeight()); 
     $this->image = $new_image; 
    }  
} 

:Cでのそのようなファイルやディレクトリはありません : ライン上の\ xamppの\ htdocsに\ジョブ\のinsphoto.php 11

警告:画像):与えられた引数が 有効なイメージ・リソース私ではありませんN C:\ xamppの\ htdocsに ライン上のジョブの\ insphoto.php 60

警告\:imagesy():与えられた引数 は Cで有効なイメージ・リソースではありません:\ XAMPP \ htdocsに\ジョブ\のinsphoto。 行に64

警告PHP:imagecopyresampled(): 与えられた引数が Cで有効な画像 リソースではありません:\ XAMPP \ htdocsに\ジョブ\のinsphoto.php ラインで87

このような警告メッセージを避けるにはどうしたらいいですか?ありがとうArif ..

答えて

0

あなたのメソッドにはこれまでどんなことがあってもエラー処理はありません。

など。 load()メソッドファイルが最初に存在しない場合、getimagesize()を介してファイルを取得することはほとんど意味がありません。また、getimagesize()が失敗した場合、戻り値を使用して特定のイメージタイプなどをテストすることは、あまり意味がありません。

(未テスト)例:

function load($filename) { 
    if (!is_readable($filename)) { 
     throw new ErrorException("file not readable"); 
    } 
    else if (false===($image_info=getimagesize($filename))) { 
     throw new ErrorException("unable to get informations from image file"); 
    } 
    // 
    switch($image_info[2]) { 
     case IMAGETYPE_JPEG: 
      $fn = 'imagecreatefromjpeg'; 
      break; 
     case IMAGETYPE_GIF: 
      $fn = 'imagecreatefromgif'; 
      break; 
     case IMAGETYPE_PNG: 
      $fn = 'imagecreatefrompng'; 
      break; 
     default: 
      throw new ErrorException("unknown image type"); 
    } 
    $this->image = $fn($filename); 
    if (false===$this->image) { 
     throw new ErrorException("$fn failed"); 
    } 
    $this->image_type = $image_info[2]; 
    return $this->image_type; 
}

関連する問題