Как создать округленное изображение с помощью php?

Я пытаюсь создать изображение с закругленной рамкой в ​​Php.

Я пытался с этим, но создает только белый круг:

<?php
  header('Content-type: image/jpeg');
  $img = imagecreatefromjpeg('person_1.jpg');
  $color = imagecolorallocate($img, 255, 255, 255);
  imagefilledellipse($img , 300, 300, 600, 600, $color);
  imagejpeg($img);
  imagedestroy($img);
?>

Я пытаюсь сделать что-то вроде (извините за плохой пример): https://i.imgur.com/rO4xtHW.jpg

И я получаю это: https://i.imgur.com/8rKVdCi.jpg

Надеюсь, вы можете помочь мне с этим, спасибо.


php
person Ultraviolet    schedule 15.12.2018    source источник
comment
Добро пожаловать в Stack Overflow. Пожалуйста, отредактируйте свой вопрос, включив в него скриншот изображения, которое вы получаете прямо сейчас, и изображение, которое вы хотите создать вместо него.   -  person Progman    schedule 16.12.2018
comment
Готово, я обновил пост примерами изображений.   -  person Ultraviolet    schedule 16.12.2018
comment
Почему это нужно делать на PHP, а не на CSS? вторая мысль!   -  person Anand G    schedule 16.12.2018
comment
Вам нужно сделать это с помощью PHP? Рассмотрим CSS для задачи, это намного проще   -  person Itay Gal    schedule 16.12.2018
comment
Лучше просто отправить изображение и позволить браузеру замаскировать его с помощью CSS. Обработка изображений в PHP (или любом серверном коде, если на то пошло) — это огромное злоупотребление ресурсами. Пусть браузер пользователя сделает часть работы.   -  person Havenard    schedule 16.12.2018
comment
Первоначальная идея заключалась в том, чтобы создать изображение, а затем загрузить его. Я знаю, как сделать это в CSS.   -  person Ultraviolet    schedule 16.12.2018


Ответы (1)


На всякий случай, если вы можете сделать это с помощью CSS, а не PHP, возможно, это будет лучше и быстрее. Создайте div и установите фоновое изображение на свое изображение, затем установите границу радиуса на 50%, это создаст круг.

.rounded {
  background-image: url("http://itayg.com/gallery/landscape/ThreeLagoons.jpg");
  width: 300px;
  height: 300px;
  border-radius: 50%;
  background-repeat: no-repeat;
  background-size: cover;
}
<div class="rounded"></div>

person Itay Gal    schedule 15.12.2018
comment
Я согласен с аргументацией, лежащей в основе этого ответа, но я думаю, что у ОП могут быть свои причины округлить его на стороне сервера. Потенциально включает в себя его сохранение, вырезание лишних пикселей может позволить ему занимать меньше места? - person dGRAMOP; 16.12.2018
comment
@dGRAMOP Изменение размера Я понимаю, но выбрасывать информацию для незначительного уменьшения размера файла - глупо. И что еще хуже, это будет выглядеть не так хорошо, как в CSS, потому что сжатие изображения добавит шум в круг. - person Havenard; 16.12.2018
comment
Согласен, но не тот вопрос, который задавал ОП. Лично я бы никогда не использовал imagick для чего-то подобного. - person dGRAMOP; 16.12.2018
comment
Первоначальная идея заключалась в том, чтобы создать изображение, а затем загрузить его. Я знаю, как сделать это в CSS. - person Ultraviolet; 16.12.2018