Blog. Just Blog

Наложение текстуры на изображение на PHP

Версия для печати Добавить в Избранное Отправить на E-Mail | Категория: Web-мастеру и не только | Автор: ManHunter
Наложение текстуры на изображение на PHP
Наложение текстуры на изображение на PHP

Продолжаем раскрывать тему по созданию графических эффектов на PHP. Сегодня будем совмещать два изображения, а точнее, накладывать текстуру на исходное изображение. При правильно подобранной текстуре можно получить эффект картины на холсте, настенного граффити или рисунка на бумаге. Впрочем, фантазию никто не отменял, совмещая два совершенно разных изображения, можно получить очень интересные результаты.

Наложение текстуры на изображение на PHP
Наложение текстуры на изображение на PHP

Наложение текстуры на изображение на PHP
Наложение текстуры на изображение на PHP

Теоретически картинка с текстурой может быть любого формата и размера, но лучше всего использовать 24- или 32-битные бесшовные изображения в оттенках серого. При совмещении с основным изображением текстура будет накладывать плиткой, поэтому важно, чтобы стыки по вертикали и горизонтали были как можно точнее совместимы. Как вариант можно использовать в качестве текстуры водяной знак, ниже есть пример готовой картинки.
  1. $texture='texture.png';
  2. $file='image.jpg';
  3.  
  4. // Основное изображение
  5. $im=ImageCreateFromJPEG($file);
  6. $width=ImageSX($im);
  7. $height=ImageSY($im);
  8.  
  9. // Текстура
  10. $tx=ImageCreateFromPNG($texture);
  11. $txwidth=ImageSX($tx);
  12. $txheight=ImageSY($tx);
  13.  
  14. for ($x=0$x<$width$x++) {
  15.     for ($y=0$y<$height$y++) {
  16.         // Получить точку из текстуры и преобразовать ее в оттенок серого
  17.         $rgb=ImageColorAt($tx,($x%$txwidth),($y%$txheight));
  18.         $R=($rgb >> 16) & 0xFF;
  19.         $G=($rgb >> 8) & 0xFF;
  20.         $B=$rgb 0xFF;
  21.         $gray=intval(0.2126*$R+0.7152*$G+0.0722*$B);
  22.  
  23.         // Получить точку исходного изображения
  24.         $rgb=ImageColorAt($im,$x,$y);
  25.  
  26.         $R=($rgb >> 16) & 0xFF;
  27.         $G=($rgb >> 8) & 0xFF;
  28.         $B=$rgb 0xFF;
  29.  
  30.         // Совместить изображения
  31.         if ($gray<128) {
  32.             $_R = ($gray*$R)>>7;
  33.             $_G = ($gray*$G)>>7;
  34.             $_B = ($gray*$B)>>7;
  35.         }
  36.         else {
  37.             $_R = (255-(((255-$gray)*(255-$R))>>7));
  38.             $_G = (255-(((255-$gray)*(255-$G))>>7));
  39.             $_B = (255-(((255-$gray)*(255-$B))>>7));
  40.         }
  41.  
  42.         $new_color=ImageColorAllocate($im$_R$_G$_B);
  43.         ImageSetPixel($im,$x,$y,$new_color);
  44.     }
  45. }
  46.  
  47. // Вывести готовое изображение в браузер
  48. header("Content-type: image/jpeg");
  49. ImageJPEG($im,NULL,100);
  50.  
  51. // Прибраться за собой
  52. ImageDestroy($im);
  53. ImageDestroy($tx);
Обратите внимание, в коде присутствует уже знакомая нам формула получения оттенка серого. Если используются специально подготовленные текстуры, то эту формулу можно не применять. Но для универсальности лучше оставить, в этом случае вы сможете использовать в качестве текстуры вообще любое изображение без предварительной подготовки.

Наложение текстуры на изображение на PHP
Наложение текстуры на изображение на PHP

Наложение текстуры на изображение на PHP
Наложение текстуры на изображение на PHP

Наложение текстуры на изображение на PHP
Наложение текстуры на изображение на PHP

Наложение текстуры на изображение на PHP
Наложение текстуры на изображение на PHP

Наложение текстуры на изображение на PHP
Наложение текстуры на изображение на PHP

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

Поделиться ссылкой ВКонтакте
Просмотров: 711 | Комментариев: 3

Метки: PHP, графика
Внимание! Статья опубликована больше года назад, информация могла устареть!

Комментарии

Отзывы посетителей сайта о статье
Григорий (12.04.2022 в 17:25):
МэнХантер - давний поклонник творчества Саши, хехехе)
ManHunter (12.04.2022 в 14:56):
Рене Зеллвегер же. Но нет, это тоже Саша
DiPrm (12.04.2022 в 14:45):
На первом фото кандидатка похожа на актрису Зеле Ренвегер) Эксперимент удался!

Добавить комментарий

Заполните форму для добавления комментария
Имя*:
Текст комментария (не более 2000 символов)*:

*Все поля обязательны для заполнения.
Комментарии, содержащие рекламу, ненормативную лексику, оскорбления и т.п., а также флуд и сообщения не по теме, будут удаляться. Нарушителям может быть заблокирован доступ к сайту.
Наверх
Powered by PCL's Speckled Band Engine 0.2 RC3
© ManHunter / PCL, 2008-2024
При использовании материалов ссылка на сайт обязательна
Время генерации: 0.07 сек. / MySQL: 2 (0.0072 сек.) / Память: 4.5 Mb
Наверх