Малюємо код з Матриці на PHP - Програмні продукти

Якось мені спала на думку ідея зробити динамічно створюване тло для блогу у вигляді горезвісного коду з фільму "Матриця". Після вбивства вечора і пів на півночі я таки досяг бажаного результату, і вирішив поділитися ним з народом. На жаль, я не знайшов подібної реалізації, а мати "матрицю", що динамічно створюється, як фон бложика таки хочеться.

Отже, пишемо генератор коду "Матриці" на PHP із використанням бібліотеки gd.

Отже, поставлені такі вимоги до картинки, що генерується:

1. Стовпчики коду не повинні дорівнювати по довжині, довжина повинна вибиратися випадково 2. Яскравість кольору повинна наростати зверху вниз 3. Розташування стовпчиків має бути випадковим, але вони не повинні налазити один на одного 4. Отримана картинка не повинна кешуватися браузерами, щоб при кожному оновленні виходив новий код 5. Код не повинен відлітати за межі зображення.

Приступимо, власне, до створення картинки.

Для початку треба придумати, що виступатиме в ролі елементів коду. У "Матриці" використовувалися як цифри, і кана (складова абетка японської мови). Остання виглядає ефектніше, отже, її й візьмемо.

Створимо функцію getJapanSym(), яка повертає HTML-Entity код (його використовує функція imagettftext(), але пізніше).

У Unicode кана знаходиться в діапазоні кодів від 0x3040 до 0x30FF. З цього діапазону потрібно брати випадковий код символу. В результаті отримуємо ось таку функцію: function getJapanSym() $rnd = rand(hexdec("3040"), hexdec("30FF")); // чи лижі не їдуть, чи у мене кривий сервер, але з числами у форматі 0xXXXX він працювати відмовився return "&#x".dechex($rnd).";"; // формат HTML-Entity, щось на кшталт >

Далі нам потрібномалювати власне картинку. Давайте по порядку.

Насамперед нам потрібно намалювати стовпчик з каною із заданою кількістю знаків. Для малювання будемо використовувати згадану раніше функцію imagettftext() із бібліотеки gd. Більш того, колір кожного символу повинен відрізнятися від попереднього, так що простим тут не обійтися, доведеться писати цілий цикл.

Саму кану можна знайти в шрифті Arial Unicode MS, який ми, власне, використовуємо.

Функція для малювання кани в стовпчик виглядає так: