M
metallphilin
НЛО опубликовал
Прежде всего замечу, что для полного понимания материала данной статьи необходимо иметь некоторые знания о работе с библиотекой GD. Предполагается, что читатель уже работал с ней или хотя бы теоретически подкован.
Предисловие
После выхода в свет PHP 4.3, библиотека GD начала поставляться с ним одной связке. Для проверки, установлена ли данная библиотека в вашей системе, запустите функцию phpinfo() и найдите секцию GD. Если же таковой не окажется, то для ее установки нужно: 1) наличие самого файла php_gd.dll в папке php-4.x.xextensions 2) убрать ";" в строке ";extension=php_gd.dll" файла php.ini.
Еще небольшое замечание: так как предполагается, что графика, созданная с помощью РHP, предназначена для просмотра посетителю, то необходимо позаботиться о ее размерах. Ведь выделенные каналы есть не у всех, а ведь не хочется, чтобы ваш сайт был закрыт еще до окончания его загрузки.
Библиотека GD стала столь популярной благодаря тому, что с ее помощью возможно динамически генерировать различные графические элементы. Чаще всего это необходимо для различного рода счетчиков, эскизов и рекламных материалов. Более сложное применение функций библиотеки GD можно встретить в изменении цвета изображения или же "фокусами" со шрифтами. Это можно применить, например, при наведении курсора мыши на определенную картинку.
Часть 1 - Изменяем цвет
На самом деле в изменении цвета изображения ничего сложного нет. Самый простой способ - это создать изображение таких же размеров и залить его новым цветом. А потом это изображение накладывается поверх исходного.
Листинг:
Вот что получиться, если использовать для наложения слой синего цвета RGB(0,0,255):
А сейчас рассмотрим другое применение графической библиотеки. Это будут функции работы со шрифтами TTF (TrueType Font). Их всего две - imagettftext и imagettftextbbox. Но практически используется только одна: imagettftext (записывает текст на изображение с использованием шрифтов TrueType).
С тех пор, как PHP стал работать с графикой, появилась возможность широко использовать его в комбинации с функциями TTF. Таким образом можно получить много интересных эффектов: текстуры, тени и прозрачный текст.
Часть 2 - Затенение
Пожалуй, самый простой текстовый эффект - затенение. Этот эффект делается очень просто: рисуем смещенный текст, а потом накладываем на него исходный текст. Еще можно использовать прозрачный текст для создания лучшего эффект тени, но об этом чуть позже.
Листинг 2:
Как видите, ничего сложно в реализации эффекта "тени" ничего сложного нет.
Выделение текста также довольно просто реализовать. Теоретически для этого нужно нарисовать линию слева, справа, над- и под исходным текстом. Данный метод успешно работает с всеми шрифтами, так как все сводиться к перемещению за один раз одного пикселя. Чтобы создавать такой контур, нам необходимо лишь знать ширину текста. Затем создаем два цикла:
Теперь, вызвав функцию imagettftextoutline($img,40,0,10,50,$red,$black,"arial.ttf","AaBbCcDd",3), можно получить следующее:
Часть 3 - Прозрачный текст
Создать прозрачный текст не так просто, как тень или обводку контура. Но на php нет ничего невозможного. Прозрачность создается путем перемещения текста в буфер (для редактирования), а затем возврат обратно и наложением на исходную картинку.
Листинг 4:
В результате выполнения данной функции исходное изображение остается без изменений. Вот только сверху на него добавляется полупрозрачный текст. Данный пример иллюстрирует это:
Часть 4 - Текстуры
Создание текста с текстурой - один из самых сложных эффектов. Для его воплощения необходимо знать, как использовать так называемое "маскирование". Поможет разобраться в этом следующая функция:
Представленный выше код - самый объемный в данной статье, хотя и используется для создания простого текстурированного текста. Это быстрее можно сделать в том же Photoshop'е, а теперь это стало возможным с использованием PHP и GD. При вызове функции imagettftexttexture ($img,$texture,40,0,10,50,"arial.ttf","AaBbCcDd") где $texture содержит картинку с текстурой (в нашем примере - кирпичная стена), то результатом ее работы будет следующее изображение:
На этом я завершаю свою статью о работе с графической библиотекой GD. Надеюсь, что рассмотренные примеры помогут вам расширить область применения языка PHP и создавать полезные скрипты.
Автор: Николай Рудченко
Источник: Link hidden, please Sign inor Sing up
Предисловие
После выхода в свет PHP 4.3, библиотека GD начала поставляться с ним одной связке. Для проверки, установлена ли данная библиотека в вашей системе, запустите функцию phpinfo() и найдите секцию GD. Если же таковой не окажется, то для ее установки нужно: 1) наличие самого файла php_gd.dll в папке php-4.x.xextensions 2) убрать ";" в строке ";extension=php_gd.dll" файла php.ini.
Еще небольшое замечание: так как предполагается, что графика, созданная с помощью РHP, предназначена для просмотра посетителю, то необходимо позаботиться о ее размерах. Ведь выделенные каналы есть не у всех, а ведь не хочется, чтобы ваш сайт был закрыт еще до окончания его загрузки.
Библиотека GD стала столь популярной благодаря тому, что с ее помощью возможно динамически генерировать различные графические элементы. Чаще всего это необходимо для различного рода счетчиков, эскизов и рекламных материалов. Более сложное применение функций библиотеки GD можно встретить в изменении цвета изображения или же "фокусами" со шрифтами. Это можно применить, например, при наведении курсора мыши на определенную картинку.
Часть 1 - Изменяем цвет
На самом деле в изменении цвета изображения ничего сложного нет. Самый простой способ - это создать изображение таких же размеров и залить его новым цветом. А потом это изображение накладывается поверх исходного.
Листинг:
<?php
function imagecolorize(&$im,&$col,$pct) {
// Определение ширины изображения
$im_w = imagesx($im);
// Определение высоты изображения
$im_h = imagesy($im);
// Задаем цвет пикселя
$setpixel = imagesetpixel($im,$im_w,0,$col);
// Получаем информацию о цвете
$index = imagecolorat($im,$im_w,0);
// Нахождение цвета в цветовой палитре
$rgb = imagecolorsforindex($im,$index);
// Значение красного цвета (red)Get the red value
$r = $rgb["red"];
// Значение зеленого цвета (green)
$g = $rgb["green"];
// Значение синего цвета (blue)
$b = $rgb["blue"];
// Новый слой
$layover = imagecreate($im_w,$im_h);
// Распределение цветов на новом слое
$color = imagecolorallocate($layover,$r,$g,$b);
// Заливка изображения новым цветом
$fill = imagefill($layover,0,0,$color);
// Накладываем слой поверх исходного изображения
$merge = imagecopymerge($im,$layover,0,0,0,0,$im_w,$im_h,$pct);
imagedestroy($layover); // удаляем слой
}
?>
Вот что получиться, если использовать для наложения слой синего цвета RGB(0,0,255):
А сейчас рассмотрим другое применение графической библиотеки. Это будут функции работы со шрифтами TTF (TrueType Font). Их всего две - imagettftext и imagettftextbbox. Но практически используется только одна: imagettftext (записывает текст на изображение с использованием шрифтов TrueType).
С тех пор, как PHP стал работать с графикой, появилась возможность широко использовать его в комбинации с функциями TTF. Таким образом можно получить много интересных эффектов: текстуры, тени и прозрачный текст.
Часть 2 - Затенение
Пожалуй, самый простой текстовый эффект - затенение. Этот эффект делается очень просто: рисуем смещенный текст, а потом накладываем на него исходный текст. Еще можно использовать прозрачный текст для создания лучшего эффект тени, но об этом чуть позже.
Листинг 2:
<?php
function imagettftextshadow(&$im,$size,$angle,$x,$y,&$col,
&$shadowcolor,$fontfile,$text,$offsetx,$offsety
) {
// Рисуем тень
$text1 = imagettftext($im,$size,$angle,$x+$offsetx,$y+$offsety,$shadowcolor,$fontfile,$text);
// Рисуем исходный текст
$text2 = imagettftext($im,$size,$angle,$x,$y,$col,$fontfile,$text);
}
?>
Как видите, ничего сложно в реализации эффекта "тени" ничего сложного нет.
Выделение текста также довольно просто реализовать. Теоретически для этого нужно нарисовать линию слева, справа, над- и под исходным текстом. Данный метод успешно работает с всеми шрифтами, так как все сводиться к перемещению за один раз одного пикселя. Чтобы создавать такой контур, нам необходимо лишь знать ширину текста. Затем создаем два цикла:
<?php
function imagettftextoutline(&$im,$size,$angle,$x,$y,&$col,
&$outlinecol,$fontfile,$text,$width) {
// Для каждого пикселя по оси X слева и справа
for ($xc=$x-abs($width);$xc<=$x+abs($width);$xc++) {
// Для каждого пикселя по оси Y сверху и снизу
for ($yc=$y-abs($width);$yc<=$y+abs($width);$yc++) {
// Рисуем контур
$text1 = imagettftext($im,$size,$angle,$xc,$yc,$outlinecol,$fontfile,$text);
}
}
// Рисуем основной текст
$text2 = imagettftext($im,$size,$angle,$x,$y,$col,$fontfile,$text);
}
?>
Теперь, вызвав функцию imagettftextoutline($img,40,0,10,50,$red,$black,"arial.ttf","AaBbCcDd",3), можно получить следующее:
Часть 3 - Прозрачный текст
Создать прозрачный текст не так просто, как тень или обводку контура. Но на php нет ничего невозможного. Прозрачность создается путем перемещения текста в буфер (для редактирования), а затем возврат обратно и наложением на исходную картинку.
Листинг 4:
<?php
function imagettftexttransparent(&$im,$size,$angle,$x,$y,&$col,$fontfile,$text,$pct) {
$im_w = imagesx($im); // Ширина картинки
$im_h = imagesy($im); // Высота картинки
$new = imagecreate($im_w,$im_h); // Создаем буфер обмена
imagesetpixel($im,$im_w-1,0,$col); // Устанавливаем исходную позицию пикселя
$index = imagecolorat($im,$im_w-1,0); // Цвет этого пикселя
$rgb = imagecolorsforindex($im,$index); // Индекс цвета
$r = $rgb["red"]; // Величина красного цвета (Red) в пикселе
$g = $rgb["green"]; // Величина зеленого цвета (Green) в пикселе
$b = $rgb["blue"]; // Величина синего цвета (Blue) в пикселе
$color = imagecolorallocate($new,$r,$g,$b); // Размещаем информацию о цвете в буфер
$copy = imagecopy($new,$im,0,0,0,0,$im_w,$im_h); // Извлекаем исходное изображение из буфера
$text = imagettftext($new,$size,$angle,$x,$y,$color,$fontfile,$text); // Пишем текст
$merge = imagecopymerge($im,$new,0,0,0,0,$im_w,$im_h,$pct); // Извлекаем изображение из буфера на исходную картинку
imagedestroy($new); // Очистка буфера
}
?>
В результате выполнения данной функции исходное изображение остается без изменений. Вот только сверху на него добавляется полупрозрачный текст. Данный пример иллюстрирует это:
Часть 4 - Текстуры
Создание текста с текстурой - один из самых сложных эффектов. Для его воплощения необходимо знать, как использовать так называемое "маскирование". Поможет разобраться в этом следующая функция:
<?php
function imagettftexttexture(&$im,&$textureim,$size,$angle,$x,$y,$fontfile,$text) {
$width = imagesx($im); // Ширина картинки
$height = imagesy($im); // Высота картинки
$buffer = imagecreate($width,$height); // Создание изображения, которое будет помещено в буфер
$tile_w = imagesx($textureim); // Ширина рисунка с текстурой
$tile_h = imagesy($textureim); // Высота рисунка с текстурой
$fits_x = (int)($im_w/$tile_w); // Количество текстурных блоков по горизонтали
$fits_y = (int)($im_h/$tile_h); // Количество текстурных блоков по вертикали
for ($i=0;$i<=$fits_x;$i++) { // Пройдемся по исходному изображению и найдем координату X левого верхнего пикселя для текстуры
$x = (int)($tile_w*$i); // Пошаговое изменение координаты X
for ($i2=0;$i2<=$fits_y;$i2++) { // Пройдемся по исходному изображению и найдем координату Y левого верхнего пикселя для текстуры
$y = (int)($tile_h*$i2); // Пошаговое изменение координаты Y
$copy = imagecopy($im,$textureim,$x,$y,0,0,$tile_w,$tile_h); // Вставка текстуры в позицию (X;Y)
}
}
$pink = imagecolorclosest($im,255,0,255); // Создаем розовый цвет, которой обычно используется для масок
$trans = imagecolortransparent($im,$pink); // Делаем розовый цвет прозрачным
imagettftext($im,$size,$angle,$x,$y,-$pink,$fontfile,$text); // Рисуем текст поверх маски (без сглаживания)
imagecopy($buffer,$im,0,0,0,0,$width,$height); // Копируем исходное изображение в буфер
imagecopy($im,$buffer,0,0,0,0,$width,$height); // Копируем содержимое буфера назад на исходное изображение
imagedestroy($buffer); // Очистка буфера обмена
}
?>
Представленный выше код - самый объемный в данной статье, хотя и используется для создания простого текстурированного текста. Это быстрее можно сделать в том же Photoshop'е, а теперь это стало возможным с использованием PHP и GD. При вызове функции imagettftexttexture ($img,$texture,40,0,10,50,"arial.ttf","AaBbCcDd") где $texture содержит картинку с текстурой (в нашем примере - кирпичная стена), то результатом ее работы будет следующее изображение:
На этом я завершаю свою статью о работе с графической библиотекой GD. Надеюсь, что рассмотренные примеры помогут вам расширить область применения языка PHP и создавать полезные скрипты.
Автор: Николай Рудченко
Источник: Link hidden, please Sign in