Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Как вычислить цвет
 
 автор: Tamplier   (28.05.2010 в 11:24)   письмо автору
 
 

Привет народ!

Такой вопросик, делаю на сайте фотогалерею и хочу чтобы у изображений были скругленные края. Для этого использую следующий код, вот кусок ответственный за это дело:


<?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);
?>


Тут создается маска с рамкой такого розово-лилового цвета, после чего изображение с рамкой накладывается на основное и далее данный цвет замещается прозрачным и все выглядит замечательно, но есть грабли. Если в изображении есть этот злосчастный цвет, то получается полная ерунда. Я так понимаю что сперва надо определить есть такой цвет в изображении или нет, как это сделать кто знает???

Помогите мозг закипает!!!

  Ответить  
 
 автор: DJ Paltus   (28.05.2010 в 12:27)   письмо автору
 
   для: Tamplier   (28.05.2010 в 11:24)
 

Я бы предложил следующий вариант.
Круглоугольную картинку, которая накладывается поверх изображения, сделать монотонной, но по внутреннему краю дать границу, чуть отличную от основного цвета. После наложения маски, надо попасть в нее (в рамку, не в границу) функцией imagefill с цветом imagecolorallocatealpha($image, 255, 255, 255, 100);
Наверное. Но я могу ошибаться.

  Ответить  
 
 автор: sim5   (28.05.2010 в 13:44)   письмо автору
 
   для: Tamplier   (28.05.2010 в 11:24)
 

Фон страницы надо полагать не в горошек же? Что вам мешает наложить на изображение уголки цвета фона страницы?

  Ответить  
 
 автор: Tamplier   (28.05.2010 в 16:52)   письмо автору
 
   для: sim5   (28.05.2010 в 13:44)
 

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

  Ответить  
 
 автор: sim5   (28.05.2010 в 17:59)   письмо автору
 
   для: Tamplier   (28.05.2010 в 16:52)
 

Даже в этом случае, лучше поместить изображение на белый фон, получится изображение в рамке со скругленными углами внутри.

  Ответить  
 
 автор: DJ Paltus   (28.05.2010 в 14:00)   письмо автору
 
   для: Tamplier   (28.05.2010 в 11:24)
 

Да, и кстати, пожалейте трафик! Получается, что все бывшие jpg станут png при выводе? Это будет не фотогалерея, а наказание. Делайте как сим5 сказал и оставляйте картинку в jpeg.

  Ответить  
 
 автор: Tamplier   (28.05.2010 в 16:53)   письмо автору
 
   для: DJ Paltus   (28.05.2010 в 14:00)
 

Ой не драматизируйте, из-за пары килобайт никто не умрет. Тем паче что очень многие сейчас сидят на безлимитках, так что траф они вобще не считают.

  Ответить  
 
 автор: DJ Paltus   (28.05.2010 в 16:57)   письмо автору
 
   для: Tamplier   (28.05.2010 в 16:53)
 

Безлимитки - безлимитками, а скорости - скоростями. Вариант номер один я Вам предложил выше. Для всех, кто живет за пределами Садового, Ваш сайт будет сюрпризом.

  Ответить  
 
 автор: Tamplier   (28.05.2010 в 16:59)   письмо автору
 
   для: DJ Paltus   (28.05.2010 в 16:57)
 

Ну пес с ними с расширениями, цвет-то можно как-то вычислить или это не решаемо?

  Ответить  
 
 автор: DJ Paltus   (28.05.2010 в 17:00)   письмо автору
 
   для: Tamplier   (28.05.2010 в 16:59)
 

Да не надо никакой цвет вычислять. Мне самого себя процитировать, или Вы поднимете глаза к моему первому ответу?!

  Ответить  
 
 автор: Tamplier   (28.05.2010 в 17:02)   письмо автору
 
   для: DJ Paltus   (28.05.2010 в 17:00)
 

Фон градиентный и местами есть фоновый рисунок (красивый), а не простой цвет. Если сделать рамку одного цвета, она будет перекрывать градиентный фон и рисунок, что не есть гуд.

  Ответить  
 
 автор: DJ Paltus   (28.05.2010 в 17:05)   письмо автору
 
   для: Tamplier   (28.05.2010 в 17:02)
 

обратите внимание, что мы заливаем функцией imagecolorallocatealpha() с параметром альфа=100. То есть, мы заменяем фон прозрачным фоном! попробуйте, что ли.
Линия по внутреннему контуру нужна чтобы избежать заливки идентичного цвета с краю картинки.

  Ответить  
 
 автор: Tamplier   (28.05.2010 в 17:07)   письмо автору
 
   для: DJ Paltus   (28.05.2010 в 17:05)
 

Вот эта линия и смущает, она там совсем не к чему, край нужен чистый, без границы изображения.

  Ответить  
 
 автор: DJ Paltus   (28.05.2010 в 17:08)   письмо автору
 
   для: Tamplier   (28.05.2010 в 17:07)
 

эту линию можно сделать на 99% прозрачной. Кроме нас никто не будет о ней знать.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования