Изменить размер изображения при загрузке и сохранить оригинал

Я создаю сайт, используя Laravel 4, который позволяет администратору загружать большое количество изображений одновременно. В настоящее время я могу сделать это, когда каждому изображению присваивается свой уникальный идентификатор и помещается в собственную папку с таким же идентификатором.

Проблема в том, что мне нужно, чтобы приложение также загружало вторую, уменьшенную (уменьшенную) версию изображения вместе с оригиналом. Я узнал, что вы должны изменить размер изображения на стороне клиента, поэтому я не уверен, как бы я сохранил исходное изображение, а также уменьшенную версию. Меньшее изображение должно быть названо с использованием того же идентификатора, с каким-то идентификатором, например, «-smaller» в конце имени.

Вот мой текущий интерфейс;

    {{ Form::open(array('url' => 'imageUpload', 'files' => true, 'method' => 'post'))}}

<div class="form-group">
<label for="fileToUpload" class="col-sm-2 control-label">Choose All Images</label>
</br>
{{ Form::file('images[]', ['multiple' => true]) }}
</div>

<div class="col-sm-offset-2 col-sm-10">
{{ Form::submit('Add Photos', ['class' => 'btn btn-large btn-primary openbutton'])}}
<!--<button type="submit" class="btn btn-default">Sign in</button> -->
</div>

{{ Form::close() }}

А вот и мой контроллер;

    $files = Input::file('images');

foreach($files as $file) {
$rules = array(
'file' => 'required|mimes:png,gif,jpeg,txt,pdf,doc,rtf|max:9999999999'
);
$validator = \Validator::make(array('file'=> $file), $rules);
if($validator->passes()){

$id = Str::random(14);
$id = $race . "-" . $id;

$destinationPath = 'raceImages/' . $id;
//$filename = $id;
$filename = $file->getClientOriginalName();
$mime_type = $file->getMimeType();
$extension = $file->getClientOriginalExtension();
$upload_success = $file->move($destinationPath, $id););
} else {
return Redirect::back()->with('error', 'I only accept images.');
}
}

2

Решение

Вот как я решил ту же проблему в своем приложении:

  1. Установите этот пакет: https://github.com/Intervention/image
  2. Используйте этот код:

    $createnew = new Yourmodelname;
    $avatar = Input::file('pic_path');
    if (isset($avatar)) { //will process the code only if an image was properly pointed in the form
    $image = Input::file('pic_path');
    var_dump($image->getRealPath()); // just for error tracking
    $filename = $image->getClientOriginalName();
    if (Image::make($image->getRealPath())->save('foldername/yourprefix_' . $LastInsertId . '_' . $filename)) {      } // foldername is related to your public folder
    if (Image::make($image->getRealPath())->widen(200)->save('foldername/thumbs/thumb_yourprefix_' . $LastInsertId . '_' . $filename)) {
    
    }
    
    $createnew->pic_path = 'event_poster_' . $LastInsertId . '_' . $filename;
    $createnew->pic_thumb = 'event_poster_thumb_' . $LastInsertId . '_' . $filename;
    $createnew->save();
    

    }

Теперь у вас есть два файла: один оригинал (без изменений) и эскиз, масштабированный пропорционально ширине 280.
Другие варианты изменения размера вы можете найти в Документах по вмешательству.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]