Эффект волнового искажения изображения на PHP
Эффект волнового искажения изображения на PHP
Продолжаем портировать фотошоп на PHP :) Сегодня будет эффект волнового искажения изображения. Его можно использовать для получения красивых надписей, создания шаржей из фотографий друзей, генерации фоновых рисунков и текстур или вообще для производства всякой адовой крипоты в промышленных масштабах.
Код преобразования несложный. Создается целевое изображение с учетом высоты выступов волны, затем в цикле берутся точки из каждого ряда исходного изображения и по синусоиде накладываются на целевое изображение.
Code (PHP) : Убрать нумерацию
- // Обрабатываемый файл
- $file='image.jpg';
- // Настройки параметров волны
- $wave_height=20;
- $wave_width=80;
- $im=ImageCreateFromJPEG($file);
- $width=ImageSX($im);
- $height=ImageSY($im);
- $wave=ImageCreateTruecolor($width,$height+$wave_height*2);
- $rgb=ImageColorAt($im,0,0);
- $R=($rgb >> 16) & 0xFF;
- $G=($rgb >> 8) & 0xFF;
- $B=$rgb & 0xFF;
- $new_color=ImageColorAllocate($wave, $R, $G, $B);
- ImageFilledRectangle($wave,0,0,$width,$height+$wave_height*2,$new_color);
- for ($x=0; $x<$width; $x++) {
- for ($y=0; $y<$height; $y++) {
- // Вычисление позиции сдвига
- $dy=$wave_height+intval($y+$wave_height*sin($x/$wave_width));
- $rgb=ImageColorAt($im,$x,$y);
- $R=($rgb >> 16) & 0xFF;
- $G=($rgb >> 8) & 0xFF;
- $B=$rgb & 0xFF;
- $new_color=ImageColorAllocate($wave, $R, $G, $B);
- ImageSetPixel($wave,$x,$dy,$new_color);
- }
- }
- header("Content-type: image/jpeg");
- ImageJPEG($wave,NULL,100);
- // Прибраться за собой
- ImageDestroy($im);
- ImageDestroy($wave);
Эффект волнового искажения изображения на PHP
Эффект волнового искажения изображения на PHP
Для портретов и фотографий людей параметры настраиваются индивидуально. Результат получается как в кривых зеркалах в "Комнате смеха".
Эффект волнового искажения изображения на PHP
Алгоритм можно немного оптимизировать, чтобы во-первых, избавиться от вложенного цикла, а во-вторых, более корректно обрабатывать неоднородный фон на выступах волны.
Code (PHP) : Убрать нумерацию
- // Обрабатываемый файл
- $file='image.jpg';
- // Настройки параметров волны
- $wave_height=15;
- $wave_width=15;
- $im=ImageCreateFromJPEG($file);
- $width=ImageSX($im);
- $height=ImageSY($im);
- $wave=ImageCreateTruecolor($width,$height+$wave_height*2);
- for ($x=0; $x<$width; $x++) {
- $dy=$wave_height+intval($wave_height*sin($x/$wave_width));
- ImageCopyResampled($wave,$im,$x,0,$x,0,1,$height+$wave_height*2,1,$height);
- ImageCopy($wave,$im,$x,$dy,$x,0,1,$height);
- }
- header("Content-type: image/jpeg");
- ImageJPEG($wave,NULL,100);
- // Прибраться за собой
- ImageDestroy($im);
- ImageDestroy($wave);
Эффект волнового искажения изображения на PHP
Эффект волнового искажения изображения на PHP
Эффект волнового искажения изображения на PHP
Волну можно делать не только вертикальную, но и горизонтальную. Для этого в формулу расчета надо подставить координату Y, а сдвиг считать по координате X.
Просмотров: 793 | Комментариев: 6
Внимание! Статья опубликована больше года назад, информация могла устареть!
Комментарии
Отзывы посетителей сайта о статье
DiPrm
(06.06.2022 в 23:15):
А Мона Лиза номер 2 напоминает Иосифа Бродского!
ManHunter
(06.06.2022 в 14:06):
Ага, причем я специально никакие параметры волн для этого не подбирал, как-то само получилось с первого раза.
DiPrm
(06.06.2022 в 11:51):
Собакен очень органично смотрится!)
кодер
(05.06.2022 в 22:27):
ImageMagick ещё обычно пользуют на стороне сервера. К PHP вроде тоже прикручивается.
А вместо фотошопа я, например, давно уже пересел на GIMP, очень нравится, вполне реально перестроиться и привыкнуть. Очень много форматов поддерживает. Может там туториалов и книг для гимпа по-меньше будет, это да. Но на фотошоп возвращаться уже нет желания. Возня с лицензиями-активациями, прожорливость последних версий, ну его...
А вместо фотошопа я, например, давно уже пересел на GIMP, очень нравится, вполне реально перестроиться и привыкнуть. Очень много форматов поддерживает. Может там туториалов и книг для гимпа по-меньше будет, это да. Но на фотошоп возвращаться уже нет желания. Возня с лицензиями-активациями, прожорливость последних версий, ну его...
ManHunter
(04.06.2022 в 13:38):
Ну есть же всякие онлайновые редакторы для графики. Морда крутится на JS, обработка выполняется частично на canvas, частично на сервере. Но полноценно заменить фотошоп невозможно.
NobootRecord
(04.06.2022 в 13:32):
"Результат получается как в кривых зеркалах в 'Комнате смеха'" - хорошее сравнение, соглашусь. Особенно угарнул с "отфотошопленной" Мона Лизы.
А возможно ли реально портировать Photoshop на PHP? :)
А возможно ли реально портировать Photoshop на PHP? :)
Добавить комментарий
Заполните форму для добавления комментария