RkBlog

Hardware, programming and astronomy tutorials and reviews.

Dynamiczne dodawanie tekstu do grafiki

PHP oferuje nam poprzez m.in. biblioteki GD narz臋dzia do edycji plik贸w graficznych. Mo偶emy rysowa膰 proste wzory, tekst czy edytowa膰 same grafiki: robi膰 miniaturki, nak艂ada膰 grafiki na siebie i wiele wi臋cej. By poni偶ej opisane skrypty dzia艂a艂y musimy mie膰 zainstalowan膮 biliotek臋 GD. Zazwyczaj darmowe serwery czy niekt贸re prostsze serwery na komputer nie maj膮 jej. W tym drugim przypadku radz臋 stosowa膰 XAMPPa. Ten artyku艂 po艣wi臋cony jest umieszczaniu tekstu na grafice.

Dodawanie tekstu

Teraz zajmiemy si臋 nanoszeniem tekstu na grafiki. Oto przyk艂adowy skrypt:
<?php

// Otwieramy plik graficzny
$rysunek = ImageCreateFromJpeg("banner.jpg");

// Definicje kolor贸w jako sk艂adowe RGB
$bialy = ImageColorAllocate($rysunek, 255, 255, 255);
$nieb = ImageColorAllocate($rysunek, 0, 255, 255);

// Lokacja 艂a艅cucha i jego warto艣膰
ImageString($rysunek, 15, 50, 10, "tekst1", $bialy);
ImageString($rysunek, 5, 180, 20, "tekst2", $nieb);

// Stworzenie wynikowej grafiki
header("Content-type: image/jpeg");
ImageJpeg($rysunek);
Skrypt ten otwiera istniej膮cy plik graficzny (plik jpg):
1
Nast臋pnie definiujemy u偶ywane kolory jako sk艂adowe RGB - Czerwonego, Zielonego i Niebieskiego. Przyk艂adowo czarny: (0,0,0), czerwony (255,0,0), zielony (0,255,0), niebieski (0,0,255). W przyk艂adzie mamy jasny niebieski - zmieszany niebieski z zielonym. Ka偶da liczba mo偶e przyjmowa膰 warto艣ci od 0 do 255. Kolejnym etapem jest naniesienie tekstu na grafik臋. ImageString to funkcja wykonuj膮ca t膮 czynno艣膰.
<?php
ImageString($rysunek, X, Y, Z, "lancuch", $kolor);
$rysunek to u偶ywane we wszystkich wywo艂ywanych po kolei funkcjach identyfikator otwartego pliku. X - rozmiat czcionki (warto艣ci od 1 do ok. 15, dalej czcionka nie powi臋ksza si臋). Y - Odleg艂o艣膰 od lewego boku, Z - odleg艂o艣膰 od g贸rnego bloku. 艁a艅cuch to tekst jaki chcemy wstawi膰. Kod HTML nie b臋dzie interpretowany. Ostatnim parametrem jest kolor tekstu.
Gdy ju偶 nanie艣li艣my wszystkie teksty wysy艂amy nag艂贸wek (header) i wy艣wietlamy efekt ko艅cowy za pomoc膮 ImageJpeg. Powy偶szy przyk艂ad dotyczy plik贸w jpg i jpeg. Dla PNG mieliby艣my ImageCreateFromPng, header("Content-type: image/png") i ImagePng($rysunek). W identyczny spos贸b dla GIFa lecz niekt贸re wersje GD nie maj膮 wsparcie dla gif贸w (raczej na tak膮 nie trafimy, ale warto pami臋ta膰 o tym). Efekt ko艅cowy:
2

Zaawansowane dodawanie tekstu

Zaprezentowany skrypt nie daje nam mo偶liwo艣ci okre艣lenia czcionki czy nachylenia tekstu. GD oferuje r贸wnie偶 bardziej zaawansowane funkcje umo偶liwiaj膮ce wyb贸r czcionki z pliku TIF. Oto przyk艂ad:
<?php

$rysunek = ImageCreateFromJpeg("banner.jpg");

$bialy = ImageColorAllocate($rysunek, 255, 255, 255);
$nieb = ImageColorAllocate($rysunek, 0, 255, 255);

ImageTTFText($rysunek, 16, 5, 12, 30, $bialy, 'rksig/fonts/kirstybi.ttf', 'Test czcionki');
ImageTTFText($rysunek, 20, 0, 170, 40, $bialy, 'rksig/fonts/Nokian.ttf', 'Matrix');

header("Content-type: image/jpeg");
ImageJpeg($rysunek);
Zamiast ImageString u偶ywamy funkcj臋 ImageTTFText
<?php
ImageTTFText($rysunek, X, Y, Z, Q, $kolor, 'link/do/pliku TTF', '艁a艅cuch');
X - rozmiar czcionki, Y - k膮t nachylenia tekstu, Z - odleg艂o艣膰 od lewego boku, Q - odleg艂o艣膰 od g贸rnego boku. Pliki czcionek mo偶emy np. pobra膰 z netu. Umieszczamy je wraz ze skryptem wi臋c nie ma tutaj ogranicze艅. Oto wynik:
3


Pobieranie danych o rysunku

PHP posiada natywn膮 funkcj臋 pobieraj膮c膮 dane o rysunku (nie jest wymagane GD). Oto przyk艂ad:
<?php

$info = GetImageSize("banner.jpg");
echo '<pre>';
print_r($info);
echo '</pre>';
Funkcja GetImageSize zwraca tablic臋 zawieraj膮c膮 dane o pliku graficznym. Dla powy偶szego:
<?php

Array
(
    [0] => 400
    [1] => 50
    [2] => 2
    [3] => width="400" height="50"
    [bits] => 8
    [channels] => 3
    [mime] => image/jpeg
)
RkBlog

Podstawy PHP, 14 July 2008, Piotr Mali艅ski

Comment article