Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как сделать круглые картинки средствами php 
V
    Опции темы
savmp
Дата 15.4.2011, 11:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Awaiting Authorisation
Сообщений: 260
Регистрация: 27.7.2009
Где: Геленджик

Репутация: -13
Всего: -16



Здравствуйте!

Подскажите возможно ли из квадратной фотографии сделать круглую... при загрузке?
То есть мы загружаем квадратную... программа находит центр и от центра делает круг по определённому радиусу...
А всё остальное становится прозрачным...
То есть фотография останется быть квадратной, но видимая часть будет только круг?

Заранее большое спасибо!
PM MAIL ICQ   Вверх
cia
Дата 15.4.2011, 16:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 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. Рисовать точку не надо.


PM WWW ICQ   Вверх
ksnk
Дата 15.4.2011, 16:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 96
Всего: 386



Код

$photoImage = ImageCreateFromJPEG('photo.jpg'); 
ImageAlphaBlending($photoImage, true);

$logoImage = ImageCreateFromPNG('logo.png'); 
$logoW = ImageSX($logoImage); 
$logoH = ImageSY($logoImage);

ImageCopy($photoImage, $logoImage, 0, 0, 0, 0, $logoW, $logoH);

ImageJPEG($photoImage); // вывод в браузер

ImageDestroy($photoImage); 
ImageDestroy($logoImage); 

Вот этот код откуда-то утащен, как пример наложения логотипа на картинку. logo.png сохраняется в формате PNG-24 с прозрачным фоном и полупрозрачным изображением. Сия нехитрая процедура наводит полупрозрачную надпись на изображение.

Возвращаясь к задаче - почему бы не сделать логотип  изображением круга с прозрачным центром? Для пущего страху можно сделать в фотошопе границу круга потолще, со сменой полупрозрачности от картинки к границе.

Осталось только виньетку нарисовать в фотошопе...

Это сообщение отредактировал(а) ksnk - 15.4.2011, 16:24


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
cia
Дата 15.4.2011, 17:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 207
Регистрация: 15.1.2007

Репутация: 4
Всего: 4



Цитата(ksnk @  15.4.2011,  16:23 Найти цитируемый пост)
Возвращаясь к задаче - почему бы не сделать логотип  изображением круга с прозрачным центром? Для пущего страху можно сделать в фотошопе границу круга потолще, со сменой полупрозрачности от картинки к границе.

Хорошая идея. Если только под
Цитата

То есть фотография останется быть квадратной, но видимая часть будет только круг?

не подразумевается, что края должны быть не белые (или чёрные, зелённые...), а именно прозрачные.
PM WWW ICQ   Вверх
ksnk
Дата 15.4.2011, 17:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 96
Всего: 386



Цитата(cia @  15.4.2011,  17:47 Найти цитируемый пост)
не подразумевается, что края должны быть не белые (или чёрные, зелённые...), а именно прозрачные. 

Хм... вероятно, так оно и подразумевается... :(

Ну тогда никакой красоты с переливами границ smile Просто круглая прозрачная дырка на виньетке. В процессе наложения появляется "рамка" с определенным цветом, который можно объявить прозрачным и вывести картинку в png-8 или gif.


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0455 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.