{% else-1 %}
Обновить
* Тема закрыта!
1.
[STEM] * 16.33
[автор] (20 июн 2016, 20:46) [0/0] [0] [спам] [под]

Хочу сделать чтобы были везде одинаковые аватарки. Круг, с диаметром 200. Если просто использовать border-radius, то прямоугольные изображения будут овальными, а мне нужен именно круг из середины. Так же пробовал с помощью такой функции:
<?
/*
$x_o и $y_o - координаты левого верхнего угла выходного изображения на исходном
$w_o и h_o - ширина и высота выходного изображения
*/
function crop($image, $x_o, $y_o, $w_o, $h_o) {
if (($x_o < 0) || ($y_o < 0) || ($w_o < 0) || ($h_o < 0)) {
echo "Некорректные входные параметры";
return false;
}
list($w_i, $h_i, $type) = getimagesize($image); // Получаем размеры и тип изображения (число)
$types = array("", "gif", "jpeg", "png"*; // Массив с типами изображений
$ext = $types[$type]; // Зная "числовой" тип изображения, узнаём название типа
if ($ext) {
$func = 'imagecreatefrom'.$ext; // Получаем название функции, соответствующую типу, для создания изображения
$img_i = $func($image); // Создаём дескриптор для работы с исходным изображением
} else {
echo 'Некорректное изображение'; // Выводим ошибку, если формат изображения недопустимый
return false;
}
if ($x_o + $w_o > $w_i) $w_o = $w_i - $x_o; // Если ширина выходного изображения больше исходного (с учётом x_o), то уменьшаем её
if ($y_o + $h_o > $h_i) $h_o = $h_i - $y_o; // Если высота выходного изображения больше исходного (с учётом y_o), то уменьшаем её
$img_o = imagecreatetruecolor($w_o, $h_o); // Создаём дескриптор для выходного изображения
imagecopy($img_o, $img_i, 0, 0, $x_o, $y_o, $w_o, $h_o); // Переносим часть изображения из исходного в выходное
$func = 'image'.$ext; // Получаем функция для сохранения результата
return $func($img_o, $image); // Сохраняем изображение в тот же файл, что и исходное, возвращая результат этой операции
?>
Но если задать crop(картинка, 0, 0, 200, 200), то он вырезает круг не из середины, а слева.
Как все же сделать? Любой способ попробую.

2.
Anvar * 3.33
(20 июн 2016, 20:59) [0/0] [0] [спам] [под]

Не овальный border-radius используй. Php грузить нет смысла.


Изм. 1 раз. / Посл. изм.
Anvar * 3.33
(20 июн 2016, 21:00)
3.
[STEM] * 16.33
[автор] (20 июн 2016, 21:09) [0/0] [0] [спам] [под]
Anvar,

В смысле "не овальный"? о__О

4.
Xsikor * 0.06
(20 июн 2016, 21:22) [0/0] [0] [спам] [под]

border-radius поставь 50% от ширины/длинны и будет круг.
При условии что ты сделаешь сразу max-width:200px; max-height:200px;

5.
[STEM] * 16.33
[автор] (20 июн 2016, 21:55) [0/0] [0] [спам] [под]
Xsikor,

Ага, в таком случае мне сожмет картинку, а не обрежет ее.
Вот скрин:

Прикрепленные файлы:
* PROFIWM_COM_833_1571827_S32hot.png (31.08 кб)
6. (20 июн 2016, 22:07) [0/0] [0] [спам] [под]

STEM™, тебе так надо? или надо именно обрезать просто?

Прикрепленные файлы:
* PROFIWM_COM_2466_1571839_Snimok_yekrana_2016-06-20_22-07-00.png (32.15 кб)

Изм. 1 раз. / Посл. изм. (20 июн 2016, 22:08)
7.
bibilink * 19.01
(20 июн 2016, 22:09) [0/0] [0] [спам] [под]

Ну $x_o, $y_o это вероятно отступы по осям х и y, у тебя они по нулям, по этому и обрезает слева.
Сделай нужные отступы вручную если входящее изображение имеет статические (не изменяющиеся) размеры. Или же немного математики чтобы разместить по центру в любом случае.

8.
[STEM] * 16.33
[автор] (20 июн 2016, 22:14) [0/0] [0] [спам] [под]
bibilink,

А можешь подробнее как сделать по центру при любом размере? В процентах задать мб?*

9.
[STEM] * 16.33
[автор] (20 июн 2016, 22:14) [0/0] [0] [спам] [под]
Odo Veiz,

Да, но только чтобы не сжималась картинка и не растягивалась.

10. (20 июн 2016, 22:33) [0/0] [0] [спам] [под]

STEM™, так ?

Прикрепленные файлы:
* PROFIWM_COM_2466_1571858_Snimok_yekrana_2016-06-20_22-07-00.png (37.13 кб)
Подписаны: 1
Скачать тему | Файлы темы | Фильтр сообщений