2014-03-01 88 views
6

我正在嘗試使用laravel 4製作圖像上傳腳本(使用資源控制器),並使用了包乾涉圖像。Laravel 4上傳1圖像並保存爲多個(3)

而我想要的是:上傳圖片時將其保存爲3張不同圖片(不同尺寸)。

例如:

1 - 富 - original.jpg

1 - 富 - thumbnail.jpg

1 - 富 - resized.jpg

這是我得到了這麼遠..它不工作或任何東西,但這是我儘可能得到它。

if(Input::hasFile('image')) { 
    $file    = Input::file('image'); 
    $fileName   = $file->getClientOriginalName(); 
    $fileExtension = $file->getClientOriginalExtension(); 
    $type = ????; 

    $newFileName = '1' . '-' . $fileName . '-' . $type . $fileExtension; 

    $img = Image::make('public/assets/'.$newFileName)->resize(300, null, true); 
    $img->save(); 
} 

希望有人能幫助我,謝謝!

回答

8

你可以試試這個:

$types = array('-original.', '-thumbnail.', '-resized.'); 
// Width and height for thumb and resized 
$sizes = array(array('60', '60'), array('200', '200')); 
$targetPath = 'images/'; 

$file = Input::file('file')[0]; 
$fname = $file->getClientOriginalName(); 
$ext = $file->getClientOriginalExtension(); 
$nameWithOutExt = str_replace('.' . $ext, '', $fname); 

$original = $nameWithOutExt . array_shift($types) . $ext; 
$file->move($targetPath, $original); // Move the original one first 

foreach ($types as $key => $type) { 
    // Copy and move (thumb, resized) 
    $newName = $nameWithOutExt . $type . $ext; 
    File::copy($targetPath . $original, $targetPath . $newName); 
    Image::make($targetPath . $newName) 
      ->resize($sizes[$key][0], $sizes[$key][1]) 
      ->save($targetPath . $newName); 
} 
+0

謝謝。有沒有一種方法可以將原始文件放在foreach中? (我也想重新調整原始大小/縮略圖相同的方式)。當我試圖把它放在foreach中時,我得到了File :: copy()的錯誤。我怎樣才能做到這一點?? – yinshiro

+1

完美作品 –

6

試試這個

$file = Input::file('userfile'); 
$fileName = Str::random(4).'.'.$file->getClientOriginalExtension(); 
$destinationPath = 'your upload image folder'; 

// upload new image 
Image::make($file->getRealPath()) 
// original 
->save($destinationPath.'1-foo-original'.$fileName) 
// thumbnail 
->grab('100', '100') 
->save($destinationPath.'1-foo-thumbnail'.$fileName) 
// resize 
->resize('280', '255', true) // set true if you want proportional image resize 
->save($destinationPath.'1-foo-resize-'.$fileName) 
->destroy(); 
+0

完美,謝謝! – americanknight

相關問題