![]() |
|
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]()
|
|
| savmp |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Awaiting Authorisation Сообщений: 260 Регистрация: 27.7.2009 Где: Геленджик Репутация: -13 Всего: -16 |
Здравствуйте!
Подскажите возможно ли из квадратной фотографии сделать круглую... при загрузке? То есть мы загружаем квадратную... программа находит центр и от центра делает круг по определённому радиусу... А всё остальное становится прозрачным... То есть фотография останется быть квадратной, но видимая часть будет только круг? Заранее большое спасибо! |
|||
|
||||
| cia |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 207 Регистрация: 15.1.2007 Репутация: 4 Всего: 4 |
Можетбыть и есть какойнибудь класс готовый, я не знаю, но тут и вручную не очень сложно сделать.
1. загружаем исходный рисунок (imagecreatefrom...) 2. высчитываем центр предполагаемой окружности, высчитываем радиус предполагаемой окружности (высота/2, или ширина/2), предполагая, что рисунок квадратный. 3. создаём новый рисунок 4. по пиксельно пробегаем в цекле по всем точкам исходного рисунка 4.1. высчитываем координаты каждой точки относительно центра предполагаемой окружности (значения могут быть как положительные, так и отрицательные) складываем квадраты координат (x^2 + y^2). 4.2. Если получившаяся сумма меньше квадрата радиуса окружности (r2=x2+y2 - вспоминаем шклоу), значит эта точка лежит "внутри" окружности - рисуем точку таким же цветом на новом рисунке. 5. Заливаем (если надо) цветом или рисунком (Imagefill или что-то похожее) область за пределами картинки (хотя, пожалуй, практичнее сначала залить, а уже потом рисовать). Например, если рисунок 100x100, то радиус - 50, квадрат радиуса - 2500. Координаты центра - 50x50. Если точка имеет координаты (от верхнего левого угла) 90x90, то: её координаты относительно центра: 40x40 (90-50=40, 90-50=40, сумма квадратов: 40^2+40^2=3200, это больше 2500 - точку рисовать не нужно. Если координаты 80x80, то: (80-50)^2+(80-50)^2=1800. Точку рисуем. Если координаты 1x1, то (1-50)^2+(1-50)^2=4802. Рисовать точку не надо. |
|||
|
||||
| ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 96 Всего: 386 |
Вот этот код откуда-то утащен, как пример наложения логотипа на картинку. logo.png сохраняется в формате PNG-24 с прозрачным фоном и полупрозрачным изображением. Сия нехитрая процедура наводит полупрозрачную надпись на изображение. Возвращаясь к задаче - почему бы не сделать логотип изображением круга с прозрачным центром? Для пущего страху можно сделать в фотошопе границу круга потолще, со сменой полупрозрачности от картинки к границе. Осталось только виньетку нарисовать в фотошопе... Это сообщение отредактировал(а) ksnk - 15.4.2011, 16:24 -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! |
|||
|
||||
| cia |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 207 Регистрация: 15.1.2007 Репутация: 4 Всего: 4 |
Хорошая идея. Если только под
не подразумевается, что края должны быть не белые (или чёрные, зелённые...), а именно прозрачные. |
|||
|
||||
| ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 96 Всего: 386 |
Хм... вероятно, так оно и подразумевается... :( Ну тогда никакой красоты с переливами границ -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! |
|||
|
||||
![]()
|
| Правила форума "PHP" | |
|
|
Новичкам:
Важно:
Внимание:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | PHP: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |