Pull to refresh

Успокаиваем нервы при помощи Perl и GD

Reading time 2 min
Views 3K

Предисловие


Я один из тех людей, которые часто подвержены стрессовым ситуациям. Избавиться от стресса можно разными способами. В данном топике я покажу вам, как это делаю я.

Как мне пришло это в голову


Однажды гуляя по интернету, я натолкнулся на одно удивительное изображение — на нём был сплошной черный фон, хаотически разбросанные линии и точки тепло-фиолетового цвета. Я попытался вообразить себе, что же может быть изображено на этом изображении. Изображение не несло никакой смысловой нагрузки, но смотреть на него было удивительно приятно. Я вообразил себе, что это некое графическое изображение космической тематики. Мои глазные мышцы расслабились и я почувствовал на себе загадочный эффект цветотерапии.

Немного погодя я решил попробовать воссоздать что-нибудь подобное программно. Так как мой подручный язык был Perl, то я обратился именно к нему. В моём ActiveState Perl 5.14.2 был по умолчанию установлен модуль GD и я решил что воспользуюсь именно им.

Принцип действия


Для начала нам нужен скрипт, который будет создавать нам изображения с хаотическими наложениями:
#!/usr/bin/env perl
use strict; use GD;
my $res = 16000;
my $outres = 1000;
my $format = 2.0;
for my $z(0..20) {
    my ($c1, $c2, $c3, $c4);
    my $img = new GD::Image($res, $res);
    $img->fill($res, $res => $img->colorAllocate(0, 0, 0));

    for (0..1200) {
        $c1 = $img->colorAllocate(rand(0xFF-0x32)+0x32, rand(0xFF-0x32)+0x32, rand(0xFF-0x32)+0x32);
        $c2 = $img->colorAllocate(rand(0xFF-0x32)+0x32, rand(0xFF-0x32)+0x32, rand(0xFF-0x32)+0x32);
        $c3 = $img->colorAllocate(rand(0xFF-0x32)+0x32, rand(0xFF-0x32)+0x32, rand(0xFF-0x32)+0x32);
        $c4 = $img->colorAllocate(rand(0xFF-0x32)+0x32, rand(0xFF-0x32)+0x32, rand(0xFF-0x32)+0x32);
        $img->setStyle($c1, $c1, $c2, $c2, $c3, $c3, $c4, $c4, gdTransparent, gdTransparent);
        (rand(10)>2) ? ($img->line(rand($res), rand($res), rand($res), rand($res), gdStyled)):
        ((rand(10)>2) ? $img->rectangle(rand($res), rand($res), rand($res), rand($res), gdStyled):
        $img->ellipse(rand($res), rand($res), rand($res), rand($res), gdStyled)) if (rand(10)>2);
    }

    print "processing $z.png...\n";
    my $m = new GD::Image($outres*$format, $outres);
    $m->copyResized($img, 0, 0, 0, 0, $outres*$format, $outres, $res, $res);

    open F => '>'.$z.'.png';
    binmode F;
    print F $m->png;
    close F;
}

  • Помещаем скрипт в папку.
  • Запускаем и ждём, пока скрипт создаёт нам шедевры.
  • Сгенерированные изображения можно просматривать листая вручную, или используя «слайдшоу», которое не должно быть со слишком коротким интервалом.


Примеры результата






Ссылки


GD Perl Module
Цветотерапия на википедии

P.S: Картинки в примере получились 800х400, потому что их сжал хабрасторейдж. Натуральный масштаб этих изображений — 2000х1000
Tags:
Hubs:
+27
Comments 30
Comments Comments 30

Articles