2015-04-13 2 views
1

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

Я использую Intervention Image библиотеку для Laravel

Мой код выглядит следующим образом:

$identifier = "{$this->loggedUser->id}" . str_random(9) . ".{$file->getClientOriginalExtension()}"; 
$mask = $this->createCircleMask(200, 200); 
$thumbMask = $this->createCircleMask(40, 40); 
Image::make($file->getRealPath())->mask($mask)->save(public_path("images/profile/{$identifier}")); 
Image::make($file->getRealPath())->mask($thumbMask)->save(public_path("images/profile/thumbs/{$identifier}")); 

Метод createCircleMask выглядит следующим образом:

public function createCircleMask($width, $height) 
{ 
    $circle = Image::canvas($width, $height, '#000000'); 
    return $circle->circle($width - 1, $width/2, $height/2); 
} 

ответ

4

Вот функция, которая работает в моем случае. Но ТОЛЬКО, если я использую драйвер imagick. Стандартная библиотека gd очень медленная, по крайней мере, на моем тестовом компьютере. Вы можете взглянуть на поставщика \ вмешательство \ образ \ src \ Intervention \ Image \ Gd \ Commands \ MaskCommand.php, чтобы узнать, почему.

public function upload() { 

    $path = storage_path('app')."/"; 

    $image = \Image::make(\Input::file('image')); 
    $image->encode('png'); 

    /* if you want to have a perfect and complete circle using the whole width and height the image 
    must be shaped as as square. If your images are not guaranteed to be a square maybe you could 
    use Intervention's fit() function */ 
    // $image->fit(300,300); 

    // create empty canvas 
    $width = $image->getWidth(); 
    $height = $image->getHeight(); 
    $mask = \Image::canvas($width, $height); 

    // draw a white circle 
    $mask->circle($width, $width/2, $height/2, function ($draw) { 
     $draw->background('#fff'); 
    }); 

    $image->mask($mask, false); 
    $image->save($path."circled.png"); 

} 
+0

Это прекрасно работает: D – FosAvance

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