2011-10-21 9 views
1

私は定期的に画像の操作(サイズ変更、透かし入れ、グレースケールへの変換など)に使用するPHP関数を持っています。私はそれに満足しており、うまくいきます。しかし、それは$ _FILESのスーパーグローバルで動作するように設計されており、それをパラメータとして受け入れます。

私は、フォームから$ _FILES配列にアップロードされたファイルと同じ方法で処理する必要がある、サーバー上の既存のファイルディレクトリがある状況に遭遇しました。

私の既存の関数で作業するのが最も簡単だと分かりましたが、私は$ _FILESのスーパーグローバルを複製する方法を探していましたので、スクリプトに渡すことができますが、必要な関数/これを達成する。 (一見すると、getimagesizefilesizeの機能は役に立ちそうです)。

誰でも$ _FILES配列を複製するために必要な機能/プロパティについてアドバイスできますか? (?それとも私がやろうとしています何を達成する代替方法)

因みに、私が使用した画像機能はここにある:

function resize_upload ($file, $dest, $maxw = 50, $maxh = 50, $grey = false, $wm = false, $mark = "a/i/watermark.png", $opa = 40) {  
    $allowext = array("gif", "jpg", "png", "jpeg", "bmp");  
    $fileext = strtolower(getExtension($file['name'])); 
    if (!in_array($fileext,$allowext)) { 
     echo "Wrong file extension."; 
     exit(); 
    } 
    list($width, $height, $imgcon) = getimagesize($file['tmp_name']); 
    if ($file['size'] && ($width > $maxw || $height > $maxh)) {  
     if($file['type'] == "image/pjpeg" || $file['type'] == "image/jpeg"){$newimg = imagecreatefromjpeg($file['tmp_name']);} 
     elseif($file['type'] == "image/x-png" || $file['type'] == "image/png"){$newimg = imagecreatefrompng($file['tmp_name']);} 
     elseif($file['type'] == "image/gif"){$newimg = imagecreatefromgif($file['tmp_name']);}   
     $ratio = $width/$height; 
     if ($ratio < 1) { // Width < Height 
      $newheight = $maxh; 
      $newwidth = $width * ($maxh/$height); 
      if ($newwidth > $maxw) { 
       $newheight = $newheight * ($maxw/$newwidth); 
       $newwidth = $maxw;    
      } 
     } elseif ($ratio == 1) { // Width = Height 
      if ($maxw < $maxh) { 
       $newheight = $maxw; 
       $newwidth = $maxw; 
      } elseif ($maxw == $maxh) { 
       $newheight = $maxh; 
       $newwidth = $maxw; 
      } elseif ($maxw > $maxh) { 
       $newheight = $maxh; 
       $newwidth = $maxh; 
      } 
     } elseif ($ratio > 1) { // Width > Height   
      $newwidth = $maxw; 
      $newheight = $height * ($maxw/$width); 
      if ($newheight > $maxh) { 
       $newwidth = $newwidth * ($maxh/$newheight); 
       $newheight = $maxh; 
      } 
     }  
     if (function_exists(imagecreatetruecolor)) {$resize = imagecreatetruecolor($newwidth, $newheight);}    
     if (($imgcon == IMAGETYPE_GIF)) { 
      $trnprt_indx = imagecolortransparent($newimg); 
      if ($trnprt_indx >= 0) { 
       $trnprt_color = imagecolorsforindex($newimg, $trnprt_indx); 
       $trnprt_indx = imagecolorallocate($resize, $trnprt_color['red'], $trnprt_color['green'], $trnprt_color['blue']); 
       imagefill($resize, 0, 0, $trnprt_indx); 
       imagecolortransparent($resize, $trnprt_indx); 
      } 
     } elseif ($imgcon == IMAGETYPE_PNG) { 
      imagealphablending($resize, false); 
      $color = imagecolorallocatealpha($resize, 0, 0, 0, 127); 
      imagefill($resize, 0, 0, $color); 
      imagesavealpha($resize, true); 
     } 
     imagecopyresampled($resize, $newimg, 0, 0, 0, 0, $newwidth, $newheight, $width, $height); 
     if ($wm) { 
      $watermark = imagecreatefrompng($mark); 
      $wm_width = imagesx($watermark); 
      $wm_height = imagesy($watermark); 
      $destx = $newwidth - $wm_width - 5; 
      $desty = $newheight - $wm_height - 5; 
      imagecopymerge($resize, $watermark, $destx, $desty, 0, 0, $wm_width, $wm_height, $opa); 
      imagedestroy($watermark); 
     } 
     $filename = random_name().".".$fileext; 
     if ($grey) {imagefilter($resize, IMG_FILTER_GRAYSCALE);} 
     if($file['type'] == "image/pjpeg" || $file['type'] == "image/jpeg"){$new = imagejpeg($resize, $dest."/".$filename, 100);} 
     elseif($file['type'] == "image/x-png" || $file['type'] == "image/png"){$new = imagepng($resize, $dest."/".$filename, 0);} 
     elseif($file['type'] == "image/gif"){$new = imagegif($resize, $dest."/".$filename);}   
     imagedestroy($resize); 
     imagedestroy($newimg);  
     return $filename; 
    } elseif ($file['size']) { 
     $filename = random_name().".".getExtension($file['name']); 
     if ($grey) { 
      if($file['type'] == "image/pjpeg" || $file['type'] == "image/jpeg"){$newimg = imagecreatefromjpeg($file['tmp_name']);} 
      elseif($file['type'] == "image/x-png" || $file['type'] == "image/png"){$newimg = imagecreatefrompng($file['tmp_name']);} 
      elseif($file['type'] == "image/gif"){$newimg = imagecreatefromgif($file['tmp_name']);} 
      imagefilter($newimg, IMG_FILTER_GRAYSCALE); 
      if($file['type'] == "image/pjpeg" || $file['type'] == "image/jpeg"){imagejpeg($newimg, $dest."/".$filename);} 
      elseif($file['type'] == "image/x-png" || $file['type'] == "image/png"){imagepng($newimg, $dest."/".$filename);} 
      elseif($file['type'] == "image/gif"){imagegif($newimg, $dest."/".$filename);} 
      imagedestroy($newimg); 
      return $filename; 
     } else { 
      $upload = file_upload($file, $dest); 
      return $upload; 
     } 
    } 
} 
+0

重複すると、同じ値を返す代替関数が見つかりますか? –

答えて

3

$ _FILES配列は、アップロードされたファイルのためのネストされた配列が含まれています。このネストされた配列には5つのキーがあります。私はそれが含まれている必要がありますかを説明し、どのような機能を使用するために、各キーの場合:

  • :ファイルの名前が、このエントリ
  • タイプためのbasename()機能を使用します。 「画像/ PNG形式」、「画像/ JPEG」、など
  • tmp_nameに設定した画像のためのファイルのMIMEタイプ、:実際のファイルへのパスは、ここにあなたがあなたのイメージへのパスを設定する必要があり
  • エラー:これは、エラーは、アップロードして発生したことを示しているあなたのケースでは、あなたがエラーなし
  • サイズのために0に設定することができます:バイト単位のファイルのサイズなので、あなたは(ファイルサイズを使用することができます)あなたのイメージ

例えば機能:

$_FILES = array('image' => array(
    'name' => basename('/path/to/image.png'), 
    'type' => 'image/png', 
    'tmp_name' => '/path/to/image.png', 
    'error' => 0, 
    'size' => filesize('/path/to/image.png') 
)); 

一度に複数のファイルを処理したい場合は、$ _FILES配列の構造は、あなたが期待するものとは異なることに注意する必要がありますにこの場合は、PHPドキュメントのthis commentを参照してください。

関連する問題