Druzya.org
Возьмемся за руки, Друзья...
 
 
Наши Друзья

Александр Градский
Мемориальный сайт Дольфи. 
				  Светлой памяти детей,
				  погибших  1 июня 2001 года, 
				  а также всем жертвам теракта возле 
				 Тель-Авивского Дельфинариума посвящается...

Библиотека :: Компьютеры и Программирование :: Котеров Д. В. - Самоучитель PHP 4
<<-[Весь Текст]
Страница: из 287
 <<-
 
 после 

рассмотрения функции imageColorClosest(). 
Получение ближайшего цвета 
Давайте разберемся, зачем это придумана такая технология работы с цветами через 

промежуточное звено — идентификатор цвета. А дело все в том, что некоторые фор- 

маты изображений (такие как GIF и частично PNG) не поддерживают любое количе-

Глава 23. Работа с изображениями 321 
ство различных цветов в изображении. А именно, в GIF количество одновременно 
присутствующих цветов ограничено цифрой 256, причем чем меньше цветов исполь- 
зуется в рисунке, тем лучше он "сжимается" и тем меньший размер имеет файл. Тот 

набор цветов, который реально использован в рисунке, называется его палитрой. 
Представим себе, что произойдет, если все 256 цветов уже "заняты" и вызывается 
функция imageColorAllocate(). В этом случае она обнаружит, что палитра запол- 
нена полностью, и найдет среди занятых цветов тот, который ближе всего 
находится 
к запрошенному — будет возвращен именно его идентификатор. Если же "свободные 
места" в палитре есть, то они и будут использованы этой функцией (конечно, если 
в 
палитре вдруг не найдется точно такой же цвет, как запрошенный — обычно дубли- 
рование одинаковых цветов всячески избегается). 
int imageColorClosest(int $im, int $red, int $green, int $blue) 
Наверное, вы уже догадались, зачем нужна функция imageColorClosest(). Вместо 
того чтобы пытаться выискать свободное место в палитре цветов, она просто 
возвра- 
щает идентификатор цвета, уже существующего в рисунке и находящегося ближе все- 

го к затребованному. Таким образом, нового цвета в палитру не добавляется. Если 

палитра невелика, то функция может вернуть не совсем тот цвет, который вы 
ожидае- 
те. Например, в палитре из трех цветов "красный-зеленый-синий" на запрос 
желтого 
цвета будет, скорее всего, возвращен идентификатор зеленого — он "ближе всего" 
с 
точки зрения GD соответствует понятию "зеленый". 
Эффект прозрачности 
Функцию imageColorClosest() можно и нужно использовать, если мы не хотим 
допустить разрастания палитры и уверены, что требуемый цвет в ней уже есть. 
Одна- 
ко есть и другое, гораздо более важное, ее применение — определение эффекта 
про- 
зрачности для изображения. "Прозрачный" цвет рисунка — это просто те точки, ко- 

торые в браузер не выводятся. Таким образом, через них "просвечивает" фон. 
Прозрачный цвет у картинки всегда один, и задается он при помощи функции 
imageColorTransparent(). 
int imageColorTransparent(int $im [,$int col]) 
Функция imageColorTransparent() указывает GD, что соответствующий цвет 
$col (заданный своим идентификатором) в изображении $im должен обозначиться 
как прозрачный. Возвращает она идентификатор установленного до этого прозрачно- 

го цвета, либо false, если таковой не был определен ранее. 
Не все форматы поддерживают задание прозрачного цвета — например, JPEG 
не может его содержать. 
Например, мы нарисовали при помощи GD птичку на кислотно-зеленом фоне и хо- 
тим, чтобы этот фон как раз и был "прозрачным" (вряд ли у птички есть части 
тела 

Часть IV. Стандартные функции PHP 322 
такого цвета, хотя с нашей экологией все может быть...). В этом случае нам 
потребу- 
ются такие команды: 
$tc=imageColorClosest($im,0,255,0); 
imageColorTransparent($im,$tc); 
Обратите внимание на то, что применение функции imageColorAllocate() здесь 
совершенно бессмысленно, потому что нам нужно сделать прозрачным именно тот 
цвет, который уже присутствует в изображении, а не новый, только что созданный. 

Получение RGB-составляющих 
array imageColorsForIndex(int $im, int $index) 
Функция возвращает ассоциативный массив с ключами red, green и blue (именно в 
таком порядке), которым соответствуют значения, равные величинам компонент RGB 
в идентификаторе цвета $index. Впрочем, мы можем и не обращать особого внима- 
ния на ключи и преобразовать возвращенное значение как список: 
$c=imageColorAt($i,0,0); 
list($r,$g,$b)=array_values(imageColorsForIndex($i,$c)); 
echo "R=$r, g=$g, b=$b"; 
Эта функция ведет себя противоположно по отношению к imageCollorAllocate() 
или imageColorClosest(). 
Графические примитивы 
Здесь мы рассмотрим минимальный набор функций для работы с картинками. При- 
веденный список функций не полон и постоянно расширяется вместе с развитием GD. 

Но все же он содержит те функции, которые вы будете употреблять в 99% случаев. 
За 
полным списком функций обращайтесь к документации или на http://ru.php.net. 
Копирование изображений 
int imageCopyResized(int $dst_im, int $src_im, int $dstX, int $dstY, 
int $srcX, int $srcY, int $dstW, int $dstH, 
int $srcW, int $sr
 
<<-[Весь Текст]
Страница: из 287
 <<-