2015-11-16 55 views
-2

這是一個完整的腳本,用於從原始上傳創建3個不同的重新調整大小的圖像。現在它會將它們的大小加上原始圖像文件名稱重命名爲3個輸出文件。我想重新命名大小爲BUT的圖像,將其更改爲不同的名稱,該名稱將成爲名爲字符串的值。PHP - 如何在上傳時重命名圖像文件

$ ListingId = $ _GET ['ListingId']; (我是從網址抓取值)

這是我的索引頁

<?php 
    include('function.php'); 
    // settings 
    $max_file_size = 1024*200; // 200kb 
    $valid_exts = array('jpeg', 'jpg', 'png', 'gif'); 
    // thumbnail sizes 
    $sizes = array(100 => 100, 150 => 150, 250 => 250); 

    if ($_SERVER['REQUEST_METHOD'] == 'POST' AND isset($_FILES['image'])) { 
     if($_FILES['image']['size'] < $max_file_size){ 
     // get file extension 
     $ext = strtolower(pathinfo($_FILES['image']['name'], PATHINFO_EXTENSION)); 
     if (in_array($ext, $valid_exts)) { 
      /* resize image */ 
      foreach ($sizes as $w => $h) { 
      $files[] = resize($w, $h); 
      } 

     } else { 
      $msg = 'Unsupported file'; 
     } 
     } else{ 
     $msg = 'Please upload image smaller than 200KB'; 
     } 
    } 
    ?> 
    <html> 
    <head> 
     <title>Image resize while uploadin</title> 
    <head> 
    <body> 
     <!-- file uploading form --> 
     <form action="" method="post" enctype="multipart/form-data"> 
     <label> 
      <span>Choose image</span> 
      <input type="file" name="image" accept="image/*" /> 
     </label> 
     <input type="submit" value="Upload" /> 
     </form> 
    </body> 
    </html> 

這是function.php代碼

/** 
    * Image resize 
    * @param int $width 
    * @param int $height 
    */ 
    function resize($width, $height){ 
     /* Get original image x y*/ 
     list($w, $h) = getimagesize($_FILES['image']['tmp_name']); 
     /* calculate new image size with ratio */ 
     $ratio = max($width/$w, $height/$h); 
     $h = ceil($height/$ratio); 
     $x = ($w - $width/$ratio)/2; 
     $w = ceil($width/$ratio); 
     /* new file name */ 
     $path = 'uploads/'.$width.'x'.$height.'_'.$_FILES['image']['name']; 
     /* read binary data from image file */ 
     $imgString = file_get_contents($_FILES['image']['tmp_name']); 
     /* create image from string */ 
     $image = imagecreatefromstring($imgString); 
     $tmp = imagecreatetruecolor($width, $height); 
     imagecopyresampled($tmp, $image, 
     0, 0, 
     $x, 0, 
     $width, $height, 
     $w, $h); 
     /* Save image */ 
     switch ($_FILES['image']['type']) { 
     case 'image/jpeg': 
      imagejpeg($tmp, $path, 100); 
      break; 
     case 'image/png': 
      imagepng($tmp, $path, 0); 
      break; 
     case 'image/gif': 
      imagegif($tmp, $path); 
      break; 
     default: 
      exit; 
      break; 
     } 
     return $path; 
     /* cleanup memory */ 
     imagedestroy($image); 
     imagedestroy($tmp); 
    } 

任何幫助,不勝感激!感謝代碼Resalat Haque的原作者。

回答

2

新文件名在resize()函數中設置爲寬度和高度以及上傳的文件名。

/* new file name */ 
$path = 'uploads/'.$width.'x'.$height.'_'.$_FILES['image']['name']; 

如果你想重新命名它,你可以通過新的名稱爲resize()功能和更改的功能

function resize($width, $height, $newFileName){ 
    /* Get original image x y*/ 
    list($w, $h) = getimagesize($_FILES['image']['tmp_name']); 
    /* calculate new image size with ratio */ 
    $ratio = max($width/$w, $height/$h); 
    $h = ceil($height/$ratio); 
    $x = ($w - $width/$ratio)/2; 
    $w = ceil($width/$ratio); 
    /* new file name */ 
    $path = 'uploads/'.$width.'x'.$height.'_'.$newFileName; 
    /* read binary data from image file */ 
    $imgString = file_get_contents($_FILES['image']['tmp_name']); 
    /* create image from string */ 
    $image = imagecreatefromstring($imgString); 
    $tmp = imagecreatetruecolor($width, $height); 
    imagecopyresampled($tmp, $image, 
    0, 0, 
    $x, 0, 
    $width, $height, 
    $w, $h); 
    /* Save image */ 
    switch ($_FILES['image']['type']) { 
    case 'image/jpeg': 
     imagejpeg($tmp, $path.'.jpg', 100); 
     break; 
    case 'image/png': 
     imagepng($tmp, $path.'.png', 0); 
     break; 
    case 'image/gif': 
     imagegif($tmp, $path.'.gif'); 
     break; 
    default: 
     exit; 
     break; 
    } 
    return $path; 
    /* cleanup memory */ 
    imagedestroy($image); 
    imagedestroy($tmp); 
} 

變化的函數調用:

$newFileName = 'newName'; // set to your desired value 
/* resize image */ 
foreach ($sizes as $w => $h) { 
    $files[] = resize($w, $h, $newFileName); 
} 

編輯:還需要將文件類型擴展名添加到交換機中的$ path。

+0

感謝Tristan的快速反應!我實現了你的代碼,它重命名了這個文件,謝謝!但是,當我在服務器上查看它時(原始文件是.jpg),新文件名不包含.jpg擴展名,您能解釋如何將其添加到名稱中嗎? – shakkashawn

+0

完全正確。我編輯了答案以反映變化。最簡單的方法就是在交換機中添加擴展名。 – Tristan