|
|
|
| Привет народ!
Такой вопросик, делаю на сайте фотогалерею и хочу чтобы у изображений были скругленные края. Для этого использую следующий код, вот кусок ответственный за это дело:
<?php
$res = imagecreate(120,120);
$img = imagecreatefromjpeg(photo.jpg);
$mask = imagecreatefrompng(border.png);
$logo = imagecreatefrompng(logo.png);
$green = imagecolorallocate($res,136,203,44);
imagecopyresized ($res,$img,0,0,0,0,120,120,imagesx($img),imagesy($img));
imagecopy ($res,$logo,60,110,0,0,60,12);
imagecopy ($res,$mask,0,0,0,0,120,120);
$trans = imagecolorat($res,0,0);
imagecolortransparent($res,$trans);
imagepng($res);
?>
|
Тут создается маска с рамкой такого розово-лилового цвета, после чего изображение с рамкой накладывается на основное и далее данный цвет замещается прозрачным и все выглядит замечательно, но есть грабли. Если в изображении есть этот злосчастный цвет, то получается полная ерунда. Я так понимаю что сперва надо определить есть такой цвет в изображении или нет, как это сделать кто знает???
Помогите мозг закипает!!! | |
|
|
|
|
|
|
|
для: Tamplier
(28.05.2010 в 11:24)
| | Я бы предложил следующий вариант.
Круглоугольную картинку, которая накладывается поверх изображения, сделать монотонной, но по внутреннему краю дать границу, чуть отличную от основного цвета. После наложения маски, надо попасть в нее (в рамку, не в границу) функцией imagefill с цветом imagecolorallocatealpha($image, 255, 255, 255, 100);
Наверное. Но я могу ошибаться. | |
|
|
|
|
|
|
|
для: Tamplier
(28.05.2010 в 11:24)
| | Фон страницы надо полагать не в горошек же? Что вам мешает наложить на изображение уголки цвета фона страницы? | |
|
|
|
|
|
|
|
для: sim5
(28.05.2010 в 13:44)
| | Фон страницы градиент и угадать в какое точно место встанет изображение, еще сложнее чем определить цвет. | |
|
|
|
|
|
|
|
для: Tamplier
(28.05.2010 в 16:52)
| | Даже в этом случае, лучше поместить изображение на белый фон, получится изображение в рамке со скругленными углами внутри. | |
|
|
|
|
|
|
|
для: Tamplier
(28.05.2010 в 11:24)
| | Да, и кстати, пожалейте трафик! Получается, что все бывшие jpg станут png при выводе? Это будет не фотогалерея, а наказание. Делайте как сим5 сказал и оставляйте картинку в jpeg. | |
|
|
|
|
|
|
|
для: DJ Paltus
(28.05.2010 в 14:00)
| | Ой не драматизируйте, из-за пары килобайт никто не умрет. Тем паче что очень многие сейчас сидят на безлимитках, так что траф они вобще не считают. | |
|
|
|
|
|
|
|
для: Tamplier
(28.05.2010 в 16:53)
| | Безлимитки - безлимитками, а скорости - скоростями. Вариант номер один я Вам предложил выше. Для всех, кто живет за пределами Садового, Ваш сайт будет сюрпризом. | |
|
|
|
|
|
|
|
для: DJ Paltus
(28.05.2010 в 16:57)
| | Ну пес с ними с расширениями, цвет-то можно как-то вычислить или это не решаемо? | |
|
|
|
|
|
|
|
для: Tamplier
(28.05.2010 в 16:59)
| | Да не надо никакой цвет вычислять. Мне самого себя процитировать, или Вы поднимете глаза к моему первому ответу?! | |
|
|
|
|
|
|
|
для: DJ Paltus
(28.05.2010 в 17:00)
| | Фон градиентный и местами есть фоновый рисунок (красивый), а не простой цвет. Если сделать рамку одного цвета, она будет перекрывать градиентный фон и рисунок, что не есть гуд. | |
|
|
|
|
|
|
|
для: Tamplier
(28.05.2010 в 17:02)
| | обратите внимание, что мы заливаем функцией imagecolorallocatealpha() с параметром альфа=100. То есть, мы заменяем фон прозрачным фоном! попробуйте, что ли.
Линия по внутреннему контуру нужна чтобы избежать заливки идентичного цвета с краю картинки. | |
|
|
|
|
|
|
|
для: DJ Paltus
(28.05.2010 в 17:05)
| | Вот эта линия и смущает, она там совсем не к чему, край нужен чистый, без границы изображения. | |
|
|
|
|
|
|
|
для: Tamplier
(28.05.2010 в 17:07)
| | эту линию можно сделать на 99% прозрачной. Кроме нас никто не будет о ней знать. | |
|
|
|