Forum Webscript.Ru

Программирование => PHP => Тема начата: kosm от 29 Января 2004, 14:42:35

Название: Закруглить углы у картинки
Отправлено: kosm от 29 Января 2004, 14:42:35
Ребят, подскажите плиз, можно на лету у картинки углы закруглять с помощью пхп? Просто дизайн требует закругленных краев, а обрабатывать ручками каждую фотку довольно муторно :(
Название: Закруглить углы у картинки
Отправлено: Diesel от 29 Января 2004, 16:53:12
Ну да. Лучше PHP напрячь на лишнюю работу при каждом запуске скрипта, чем один раз в фотошопе все сделать :)
Название: Закруглить углы у картинки
Отправлено: kosm от 29 Января 2004, 17:10:28
Diesel
Т.е. это не правильно? Либо ручками до размещения на сйте, либо отказаться от закруглений?
Название: Закруглить углы у картинки
Отправлено: FreeSpace от 29 Января 2004, 20:09:20
kosm
Diesel забыл рассказать тебе о ещё одном варианте: во время загрузки изображения на сервер, обрабатывать его один раз, а затем хранить изображение на сервере с уже закругленными углами.
Сделать это можно функцией [p]imagecopy[/p], копируя четыре изображения с закругленными углами в четыре соответсвующих угла загружаемой картинки. Так же тебе может понадобится фунция [p]imagecolortransparent[/p]. Я сам никогда не делал ничего подобного, но предполагаю, что четыре угла нужно будет сохранить в формате png с альфа-каналом, который будет задавать прозрачность в нужном месте.
Название: Закруглить углы у картинки
Отправлено: Меняздесьдавнонет от 29 Января 2004, 20:16:17
у джипега нету прозрачности.
Название: Закруглить углы у картинки
Отправлено: FreeSpace от 29 Января 2004, 20:55:25
Цитировать
FreeSpace:
четыре угла нужно будет сохранить в формате png с альфа-каналом
Название: Закруглить углы у картинки
Отправлено: Neter от 29 Января 2004, 21:04:34
FreeSpace А что експлорер уже начал отображать png с альфаканалом? Скорее всего прийдётся юзать гиф или если известно что с бэкграундом ничего не планируется делать - jpg с залитыми углами.
Название: Закруглить углы у картинки
Отправлено: Меняздесьдавнонет от 29 Января 2004, 21:06:41
FreeSpace ,а при чем здесь формат квадратов-то - я не пойму?
Название: Закруглить углы у картинки
Отправлено: FreeSpace от 29 Января 2004, 21:08:59
Neter
Перечитай внимательнее сообщение.
Я не хочу посылать тебя в "na_tanke" :)
Картинка формируется при помощи GD на стороне сервера.
А браузер получает уже сформированную картинку с закругленными углами в том формате, в каком пожелаешь (и какой поддерживает GD). Скорее всего в jpeg.
Название: Закруглить углы у картинки
Отправлено: FreeSpace от 29 Января 2004, 21:11:00
RomikChef
Да в том-то и дело, что я не работал с прозрачными изображениями в GD и не знаю, можно ли будет задать цвет прозрачности "на лету" в jpeg. Зато я на 100% уверен, что это можно сделать в png и не на лету, а в том же фотошопе. Поэтому и говорил про png.
Название: Закруглить углы у картинки
Отправлено: Меняздесьдавнонет от 29 Января 2004, 21:41:08
FreeSpace , не надо посылать нетера на танк.
он там был.
твои альфа-каналы - это все трындеж и бутафория, поверь мне.
поскольку картинки на сайте могут быть в джпг, все твои каналы идут лесом. понимаешь? Если нельзя применить метод для всех картинок, то грош ему цена.

Не надо бежать впереди паровоза.
сначла спроси товарища - как он представляяет себе "картинки со скругленными краями", а потом уже бежать овтечать.

Хотя что там особо изобретать - вариант все равно один, ГД рисовать эллипсы, залитые цветом фона сайта
Название: Закруглить углы у картинки
Отправлено: FreeSpace от 29 Января 2004, 22:57:55
RomikChef
Сразу говорю, я не проверял, но в теории алгоритм должен работать с любыми типами изображений.
1. Открываем загружаемую картинку (формат не важен - лишь бы GD поддерживал).
2. Открываем четыре картинки с закругленными углами в формате PNG.
3. Копируем четыре картинки с углами в соответствующие углы загружаемой картинки.
4. Сохраняем обновленную загружаемую картинку в нужном нам формате.

Edited:
Альфа-канал необходим только в процессе копирования уголков на загружаемую картинку. Получившееся изображение можно сохранить в JPEG или любом другом формате без всякого альфа-канала.
Название: Закруглить углы у картинки
Отправлено: Меняздесьдавнонет от 29 Января 2004, 23:23:17
объясни, родной, какого цвета будут углы?
можно без гд и пхп.

может, хватит уже тупить-то?
Название: Закруглить углы у картинки
Отправлено: FreeSpace от 30 Января 2004, 00:05:31
Какого цвета - это надо у kosm\'а спросить.
Какого надо, такого и будут.
Вот пример:
(http://www.infinity.com.ua/corner.gif)
Картинка правого нижнего угла.
Белая область становится прозрачной, а голубая остается голубой, гармонично вписываясь в дизайн сайта.

Ромик, хватит наезжать.
Ты предлагаешь делать это [p]imagefilledarc[/p] или подобной функцией.
Я согласен с тобой, но если форма угла выходит за пределы обычной кривой, или например содержит какую-либо текстуру, то проще сделать это именно копированием изображений.
Название: Закруглить углы у картинки
Отправлено: Меняздесьдавнонет от 30 Января 2004, 01:00:43
стоп.
при чем здесь гиф?
я тебе уже битый час толкую про ДЖИПЕГ!

и не наезжаю я на тебя.
Я удивляюсь - как можно так безбожно тупить.

(передразнивая) "беееелая область становится прозрачной".
КАК У ДЖИПЕГА ОБЛАСТЬ СТАНЕТ ПРОЗРАЧНОЙ???
Название: Закруглить углы у картинки
Отправлено: Neter от 30 Января 2004, 02:21:55
FreeSpace Блин, незнаю чем смотрел, мне почему-то показалось что ты прадлагаешь выводить картинки в PNG с альфаканалом, извиняюсь.
А в принцепе чё у вас тут за тёрки? Мне кажется ФриСпейс нормальный вариант предложил, универсальный, его вобще для любых рамок можно использовать.

RomikChef, Ну не был я на твоём танке ;)

В принцепе давайте кончать эти споры о форматах, это всё фигня. Берётся маска и накладывается на изображение. Всё, вся идея.
Осталось только скрипт написать :)

ЗЫ
Посмотрите на сайте автора какие превьюшки маааленькие.. вот мастак, догадался как ресайзить картинки на клиенской стороне :)
Название: Закруглить углы у картинки
Отправлено: Меняздесьдавнонет от 30 Января 2004, 02:39:11
Цитировать
Neter:
Мне кажется ФриСпейс нормальный вариант предложил

блин еще один.
у вас коллективное помутнение разума?

Ну ладно, если ума не хватает понять про эллипсы - пусть будут ваши чертовы заранее заготовленные углы.
НЕ НЕ ПРОЗРАЧНЫЕ!

потому, что прозрчных джипегов не бывает!
а конвертировать полноцветный джипег в пнг будет только идиот.

К какому из перечисленных положений у вас есть претензии?
Название: Закруглить углы у картинки
Отправлено: FreeSpace от 30 Января 2004, 03:31:35
Ромик, ты только не обижайся.
Я тебя уважаю и списываю всё на то, что у тебя сегодня был тяжелый день.
Так же не отрицаю, что я мог не совсем понятно излагать свои мысли.
Тем не менее, вот в
этом (http://forums.webscript.ru/showthread.php?s=&postid=99543#post99543)  сообщении я, кажется, достаточно ясно изложил свой алгоритм, который до тебя не дошел.
Я не собираюсь принимать от пользователя PNG!
Я не собираюсь отдавать пользователю PNG!
Я собираюсь хранить в формате PNG изображения четырех углов и накладывать их на рисунок, загружаемый пользователем.
На входе имеем рисунок, напимер, в формате JPEG. И на выходе тоже JPEG.
Чтобы спор полностью исчерпал себя, я забил на лень реализовал все свои мысли в коде. Я специально взял не обычные уголки, а градиенты, чтобы показать весь потенциал формата PNG.

Сам скрипт:
http://www.infinity.com.ua/ugolki/index.php
Исходники:
http://www.infinity.com.ua/ugolki/index.php?action=sources
Название: Закруглить углы у картинки
Отправлено: Diesel от 30 Января 2004, 09:20:28
FreeSpace Че та не работает, гружу жипег а он мне "Мне лень, это не жипег" :)  Надо по миме а не по расширению проверять.
А вообще суть не в этом. Ромик тебе объясняет что у JPG нет прозрачности, поэтому ты не сможешь сделать закругленных углов так что бы они выглядили таковыми на любом фоне. Даже если ты подберешь цвет фона, то остается проблема когда фоном является изображение. Выход готовить уголки для каждого фона, либо везде использовать GIF. Не проще ли все же в фотожопе посидеть часок?
Название: Закруглить углы у картинки
Отправлено: kosm от 30 Января 2004, 11:22:40
Ууу, какой спор вышел :) Ребята не сорьтес! :)
Спасибо огромное за советы - я думаю подойдут оба способа, т.к. фон одноцветный, так что настоящей прозрачности особо не требуется (в моем случае). Скорее всего я тогда не совсем точно выразился что мне нужно. По большому счету, нужна однопиксельная рамка с закругленными углами. Какой из способов описанных вами подойдет для этого случая? Здесь соответственно предпочтительная минимальная нагрузка на сервер.

PS: С помощью GD заодно можно и сресайзить под трумбнаилс ведь?
Название: Закруглить углы у картинки
Отправлено: professorX от 30 Января 2004, 11:27:19
господа, прочитал данный топик - просто удивляюсь, как можно так не понимать того, что объясняют...
Роман СОВЕРШЕННО прав!
Название: Закруглить углы у картинки
Отправлено: Diesel от 30 Января 2004, 11:43:59
kosm Ты делаешь фотогаллерею? Тогда возьми вариант правки картинки при заливке с помощью GD. Если один раз залил картинки и забыл, то обработай в фотошопе.  Вариант с обработкой "налету" даже не рассматривай.
Название: Закруглить углы у картинки
Отправлено: Меняздесьдавнонет от 30 Января 2004, 12:43:06
professorX , пока товарищ рассуждал о прозрачности - я был прав.
Но когда он изменился на градиент и тому подобное - претензий к нему нет. мы стали писать об одном и том же - наложить уголки заданного цвета.
а уж, откуда они будут - из ффайлов или ГД нарисованные - это вопрос не принципиальный.
принципиальный - только про прозрачность, которая тут вообще не при делах.
Название: Закруглить углы у картинки
Отправлено: Меняздесьдавнонет от 30 Января 2004, 12:48:43
kosm
можно, но тебя могут ждать проблемы.
воспользуйся поиском по форуму - они тут неоднократно обсуждались
Название: Закруглить углы у картинки
Отправлено: professorX от 30 Января 2004, 14:24:41
RomikChef
я уж понял.
Единственное, чего я не совсем уяснил, это что здесь имеется в виду под обработкой "налету"...
Название: Закруглить углы у картинки
Отправлено: CGVictor от 30 Января 2004, 14:43:54
RomikChef
Если можно: есть ли где-нибудь нормальные данные того, а сколько именно сьедает обработка картинок на лету? (типа, тесты и все прочее)

По поводу этой статьи:
Знаете, про тех мудрецов и слона?
Название: Закруглить углы у картинки
Отправлено: Diesel от 30 Января 2004, 15:45:46
Цитировать
professorX:
что здесь имеется в виду под обработкой "налету"...

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

Цитировать
CGVictor:
сколько именно сьедает обработка картинок на лету

Почему сам не протестируешь? Время работы твоего скрипта например. Потом умножь на количество картинок. Еще добавь возможную загруженность сервера. Можно сказать точно лишь одно: Получится медленее чем обрабатывать картинку 1 раз.
Название: Закруглить углы у картинки
Отправлено: Меняздесьдавнонет от 30 Января 2004, 17:28:06
хорушую картинку обработать - это секунда-полторы.
тебе этого достаточно?
Название: Закруглить углы у картинки
Отправлено: CGVictor от 30 Января 2004, 17:41:35
RomikChef
В том-то и дело, что "хорошая" - понятие растяжимое... Если мне надо один раз обработать действительно хорошую (300dpi - 21cm - 29,7cm - CMYK :) ) картинку на сервере, сколько это займет времени? Обрабатываю, естественно, не на лету, а один раз. Но как ее обработать - будет зависеть от данных сервера и пользователя...
Название: Закруглить углы у картинки
Отправлено: Меняздесьдавнонет от 30 Января 2004, 17:46:29
обработай на своем сервере, и посмотри.

у меня ексиф 1600х1200 в 800х600 имэджиком под винды полтора гагагерца третим пнем ресайзится как раз секунду.
Название: Закруглить углы у картинки
Отправлено: CGVictor от 30 Января 2004, 18:11:14
RomikChef
С этим сложнее...
CMYK-21cmX29,7cm@300dpi ресайзится фотошопом в 200x282 на примерно такой же машине за 4 секунды. А мне нужно его не только ресайзить, но еще и довольно сложную математику реализовать (математика похожа на некоторые из фильтров фотошопа). И потом, моя машина - не показатель... Сервак помощнее будет.
Так никто не знает каких-нибудь обьективных всесторонних тестов по этой теме?
Название: Закруглить углы у картинки
Отправлено: FreeSpace от 30 Января 2004, 20:41:15
CGVictor
Какие могут быть объективные тесты, когда железо на всех серверах разное?
Примерные цифры уже назвали. Если тебе нужно точнее, напиши или возьми готовый класс для бенчмаркинга и тестируй на здоровье.
Название: Закруглить углы у картинки
Отправлено: Меняздесьдавнонет от 30 Января 2004, 21:09:14
Цитировать
Так никто не знает каких-нибудь обьективных всесторонних тестов по этой теме?

по какой теме?
вот по этой?
Цитировать
сколько именно сьедает обработка картинок на лету?

ДВА КИЛОГРАММА ЯБЛОК!

Сегодня у нас праздник?
День дебила?

во-первых, даже дефективному первокласснику будет ясно, что обработка на лету и не на лету занимает одинаковое количество ресурсов. При на лету просто идет умножение на количество отдаваемых картинок.

Тебе это исследование нужно? Своим умом допереть не мог? Таблицу умножения забыл?
Или сколько съедает одна картинка? Съедает ЧЕГО? памяти? тактов процессора?

какие ты еще тесты хочешь? с каких сторон?
Все умные слова вспомнил? Или еще есть?
Давай, не стесняйся.

А, главное - результат какой?
вопрос в чем?
Для чего тебе результаты "всесторонних тестов" нужны?
Что ты с ними делать будешь?
Вывод сделаешь - на лету ресайзить нельзя? Без тестов, типа, ума не хватает?
Название: Закруглить углы у картинки
Отправлено: CGVictor от 31 Января 2004, 17:54:26
RomikChef
Спасибо за откровенный флейм. Не можешь сказать ничего умного - не пости сообщения.
Я всё сказал.
Название: Закруглить углы у картинки
Отправлено: kosm от 31 Января 2004, 17:55:33
Ясно, спасибо. Подготавливать картинки при загрузке на сервер - хорошая идея, так и поступлю. Чтобы нарисовать рамку, надо будет только нарисовать рамку в формате PNG, углы закрасить цветом фона.
Где можно почитать по работе с GD, а лучше посмотреть примеры. Как наложить примерно понятно - спасибо огромное за пример FreeSpace.
Название: Закруглить углы у картинки
Отправлено: FreeSpace от 31 Января 2004, 20:01:14
Инормацию по рабоде с GD, как и по любой другой теме, которая касается php, можно почитать в официальном руководстве (http://www.php.net/gd).
Название: Закруглить углы у картинки
Отправлено: Меняздесьдавнонет от 01 Февраля 2004, 10:08:36
CGVictor
ого, как мы заговорили.
Ню-ню.
Название: Закруглить углы у картинки
Отправлено: Меняздесьдавнонет от 01 Февраля 2004, 10:19:31
kosm в формате png рисовать рамку совсем не обязательно.
ее можно рисовать в любом, который сможет прочесть ГД. Никакой разницы нету.
Я бы даже сказал, что если работать с заготовленной рамкой, то лучше бы иметь рамку того же формата, что и редактируемая картинка. А то, знаешь ли - всякие нюансы там, туда-сюда...

А можно, как я уже говорил, безо всяких рамок, а просто нарисовать нужные фигуры средствами гд. Сдается мне, это будет даже быстрее.