2015-04-21 2 views
3

Я делаю веб-портал электронной коммерции. Я пытаюсь загрузить изображение в разных разрешениях, которые работают совершенно нормально.Laravel 5 - размытое изображение после загрузки - вмешательство

Но проблема в том, что если я просмотрю его в браузере после загрузки, я увижу размытое изображение, которое не то, что я хочу. Я хочу, чтобы после загрузки изображение должно быть четко видно, и оно не должно быть размытым.

Вот метод управления для него:

public function store(AddProductRequest $request) { 
    if(\Auth::guest()) { 
     return redirect('/admin'); 
    } 

    $imageType = [ 
     'thumbnail' => [ 
      'height' => 75, 
      'width' => 75 
     ], 
     'product' => [ 
      'height' => 450, 
      'width' => 450 
     ], 
     'cart' => [ 
      'height' => 200, 
      'width' => 200 
     ] 
    ]; 

    if ($request->file('image_file')) { 
     $fileName = $request->file('image_file')->getClientOriginalName(); 

     $fileName = explode('.', $fileName); 
     $image = \Image::make($request->file('image_file')); 
     $path = public_path('images/uploads/'); 

     foreach ($imageType as $key => $value) { 
      if ($key == 'thumbnail') { 
       $image->resize($value['width'], $value['height'], function($constraint) { 
        $constraint->aspectRatio(); 
       }); 
       $image->save($path.$fileName[0]."-thumbnail-". $value['width'] ."-".$value['height'] .".jpg", 100); 
      } elseif ($key == 'product') { 
       $image->resize($value['width'], $value['height'], function($constraint) { 
        $constraint->aspectRatio(); 
       }); 
       $image->save($path.$fileName[0]."-product-". $value['width'] ."-".$value['height'] .".jpg", 100); 
      } elseif ($key == 'cart') { 
       $image->resize($value['width'], $value['height'], function($constraint) { 
        $constraint->aspectRatio(); 
       }); 
       $image->save($path.$fileName[0]."-cart-". $value['width'] ."-".$value['height'] .".jpg", 100); 
      } 
     } 
    }  

    $product = Product::create($request->all()); 

    $product->tags()->attach($request->input('tags')); 

    \Session::flash('product_added', 'Product has been successfully added in the database.'); 
    return redirect('admin/products'); 
} 

Как избежать отображений размытого изображения после загрузки?

Пожалуйста, помогите мне. Заранее спасибо.

+0

Может кто-нибудь, пожалуйста, помогите мне? –

+0

Каков размер исходного изображения и каков размер измененного изображения? –

+0

Оригинальный размер изображения 1000x1000. Измененный размер изображения задается в массиве. –

ответ

1

Проблема с текущим кодом заключается в том, что манипулирует одним и тем же файлом изображения. Это приводит к изменению размера исходного файла на «миниатюру». Затем этот миниатюра изменяется, что приводит к «блочному» результату.

Ответ заключается в том, чтобы создать новый файл «Изображение» исходного файла для каждой операции «изменить размер».

Также код может быть упрощен, так как вся информация для генерации выходных имен файлов находится в массиве .

У меня нет «рамки», поэтому я изменил функцию, чтобы взять имя файла и выходную директорию. Фактически входное имя файла помещается в структуру SplFileInfo, поэтому я могу легко получить доступ к различным частям имени файла, но это всего лишь деталь.

Вот эта функция, единственное реальное изменение в обработке - это воссоздание «изображения» от оригинала каждый раз.

<?php 
function store(SplFileInfo $imageFile, 
       $outDirectory) { 

    $imageType = array(
     'thumbnail' => array(
      'height' => 75, 
      'width' => 75 
     ), 
     'product' => array(
      'height' => 450, 
      'width' => 450 
     ), 
     'cart' => array(
      'height' => 200, 
      'width' => 200 
     ) 
    ); 

    if (file_exists($imageFile->getRealPath())) { 

     $fileName = explode('.', $imageFile->getFilename()); 
     $path = $imageFile->getPath(); 

     foreach ($imageType as $key => $value) { 
      $image = Image::make($imageFile->getRealPath()); 
      $image->resize($value['width'], $value['height'], 
        function($constraint) { 
           $constraint->aspectRatio(); 
        }); 
      $outFilename = $fileName[0] ."-{$key}-". 
          $value['width'] ."-". $value['height'] 
          .".". $imageFile->getExtension(); 
      $image->save($outDirectory .'/'. $outFilename, 100); 
     } 
    } 

    return true; 
} 

Я покажу его, если это необходимо.

+1

Спасибо, сэр, ваш ответ мне помог .. –

Смежные вопросы