2016-04-05 16 views
1

サーバーにアップロードする前に、境界線付きの画像にテキストを追加しようとしています。しかし、私のコードを書いたのはイメージをアップロードしていないようです。私は、彼らが動作しないアップロードが作品や画像操作作業ということが、一緒に、別々にチェックしていますサーバーにアップロードする前にGDで画像を編集する

$name = "some text"; 
$target_dir = "uploads/"; 
//strip filename of clear spaces 
$cleaned = str_replace(' ', '', basename($_FILES["fileToUpload"]["name"])); 
$target_file = $target_dir . $cleaned; 
$image = $_FILES["fileToUpload"]["name"]; 


$im = imagecreatefromjpeg($image); 
$white = imagecolorallocate($im, 255, 255, 255); 
$font_path = 'uploads/SCRIPTIN.ttf'; 
$text = "In Memory of " . $name; 
imagesetthickness($im, 200); 
$black = imagecolorallocate($im, 0, 0, 0); 
$x = 0; 
$y = 0; 
$w = imagesx($im) - 1; 
$z = imagesy($im) - 1; 
imageline($im, $x, $y, $x, $y+$z, $black); 
imageline($im, $x, $y, $x+$w, $y, $black); 
imageline($im, $x+$w, $y, $x+$w, $y+$z, $black); 
imageline($im, $x, $y+$z, $x+$w ,$y+$z, $black); 
imagettftext($im, 200, 0, 20, 300, $white, $font_path, $text); 

私はそれは私がサーバーにファイルを書いていますどのように関連しているかもしれないと思う:

move_uploaded_file(imagejpeg($im), $target_file); 
+0

(画像上の書き込みに名前を含めるのを忘れて) $ _FILES ['fileToUpload'] ['name']はあなたのマシン上にあった元の名前だけを提供します。また、これが有効なファイルであるかどうかのチェックも実行していないため、問題が発生する可能性があります。ユーザーを信頼してはいけません。少なくとも、拡張チェックとMIMEタイプのチェックを実行します。これにより、jpg/jpeg以外の画像形式で作業することもできます。 – Eihwaz

+0

"move_uuploaded_file"を "imagejpeg($ im、$ target_file);に置き換えてください。 – kraysak

答えて

1

これは、クイックドラフトですが、それは動作するはずです:

は、ファイルImageProcessor.phpを作成し、コードをコピーして、require_onceを経由して、それを含める:

class ImageProcessor 
{ 
    /** @var string actual file, in our tmp folder on the server */ 
    private $file; 

    /** @var string filename that we are going to save it with */ 
    private $filename; 

    /** @var string the name we are going to write on the image */ 
    private $name_to_write; 

    /** @var resource file resource */ 
    private $resource = false; 

    /** @var string where we are going to save the result */ 
    public static $save_path = 'images/'; 

    /** @var array the list of file extensions we're going to allow */ 
    private $allowed_extensions = array('jpg', 'jpeg', 'png', 'gif'); 

    public function __construct($file, $name_to_write) 
    { 
     if (!is_array($file) || !isset($file['tmp_name'])) { 
      throw new Exception('We are expecting something else'); 
     } 

     $this->file = $file['tmp_name']; 
     $this->filename = $file['name']; 
     $this->name_to_write = $name_to_write; 

     if (!$this->checkFileValidity()) { 
      throw new Exception('Invalid file'); 
     } 
    } 

    /* 
    * Get the file extension in lowercase for further checks 
    * 
    * @return string 
    */ 
    private function getExtension() 
    { 
     return strtolower(pathinfo($this->filename, PATHINFO_EXTENSION)); 
    } 

    /* 
    * Check whether the file has a valid extension. 
    * 
    * @return bool 
    */ 
    private function checkFileValidity() 
    { 
     return in_array($this->getExtension(), $this->allowed_extensions); 
    } 

    /* 
    * Create a resource, depending on file's extension 
    * 
    * @return void 
    */ 
    private function setFileResource() 
    { 
     switch ($this->getExtension()) { 
      case 'jpeg': 
      case 'jpg': 
       $this->resource = imagecreatefromjpeg($this->file); 
      break; 

      case 'png': 
       $this->resource = imagecreatefrompng($this->file); 
      break; 

      case 'gif': 
       $this->resource = imagecreatefromgif($this->file); 
      break; 
     } 
    } 

    /* 
    * Process the file - add borders, and writings, and so on. 
    * In the last step we're also saving it. 
    * 
    * @return void 
    */ 
    public function processFile() 
    { 
     $this->setFileResource(); 

     if (!$this->resource) { 
      throw new Exception('Invalid file'); 
     } 

     $white = imagecolorallocate($this->resource, 255, 255, 255); 
     $font_path = 'uploads/SCRIPTIN.ttf'; 
     $text = "In Memory of ".$this->name_to_write; 

     imagesetthickness($this->resource, 200); 
     $black = imagecolorallocate($this->resource, 0, 0, 0); 
     $x = 0; 
     $y = 0; 
     $w = imagesx($im) - 1; 
     $z = imagesy($im) - 1; 
     imageline($this->resource, $x, $y, $x, $y+$z, $black); 
     imageline($this->resource, $x, $y, $x+$w, $y, $black); 
     imageline($this->resource, $x+$w, $y, $x+$w, $y+$z, $black); 
     imageline($this->resource, $x, $y+$z, $x+$w ,$y+$z, $black); 
     imagettftext($this->resource, 200, 0, 20, 300, $white, $font_path, $text); 

     return $this->save(); 
    } 

    /* 
    * Save the file in $save_path and return the path to the file 
    * 
    * @return mixed string|bool 
    */ 
    private function save() 
    { 
     imagejpeg($this->resource, self::$save_path.$this->filename); 

     return file_exists(self::$save_path.$this->filename) ? self::$save_path.$this->filename : false; 
    } 
} 

そして、あなたは、ファイルがアップロードされたことを検出した場合、あなたはそれを呼び出すには:

if (isset($_FILES['fileToUpload']) && is_uploaded_file($_FILES['fileToUpload']['tmp_name'])) { 
    $processor = new ImageProcessor($_FILES['fileToUpload'], 'John Doe'); 

    if ($image_path = $processor->processFile()) { 
     var_dump($image_path); // this is your new image 
    } 
} 

UPDATEDあなたは[$ _FILESを使用する必要があります

関連する問題