[PHP] Generowanie tekstu na obrazku

Data dodania wpisu: 27-05-2010

Kto chce pobawić się w pisanie po jotpegach? Dowolnym krojem fonta, pod dowolnym kątem, do tego łamiąc wiersze w odpowiednim miejscu, żeby tekst nie wychodził poza obszar grafiki? Tutaj nauczymy się jak tego dokonać;) Zaczniemy od przygotowania/wyszperania w sieci grafiki, która posłuży za podkład. Ot - dajmy na to coś takiego:

Dodatkowo, możemy pobrać jakiegoś darmowego fonta z krojem pasującym do stylu obrazka, a dodatkowo, żeby posiadał obsługę polskich literek;) Ja wybrałem fonta "Tehzeta" z www.dafont.com. Mając te dwa pliki, możemy przygotować prosty skrypt wykorzystujący funkcje
ImageCreateFromJpeg(), ImageColorAllocate() oraz ImageTTFText()
a także drobne funkcje poboczne;)

Co do skryptu:

<?php
     $tempValue = ''; //tutaj przechowamy tekst docelowy
     $sourceText = 'Hurra, mamy piękny napis na pomiętym papirusie ;)'
     $tempTab = array(); //tablica to przechowania kolejnych słów w tekście
     $tempTab = explode(' ',$sourceText); //dzielimy tekst po spacji
	 $count=0; //licznik potrzebny do łamania wierszy
     foreach($tempTab as $word){ //dla każdego elementu tablicy (słowa)
         $tempValue .= $word." "; //dodajemy słowo i spację po nim
         if(strlen($tempValue)<170){ //jeśli zdanie ma mniej niż 170 znaków 
//(załóżmy że tyle zmieści się na rysunku)
             if(strlen($tempValue)<=(30*$count)){ //i jeśli długość zdania jest
// wielokrotnością licznika i liczbny 30,
//gdzie 30 to liczba znaków w jednej linii na późniejszym rysunku
                 $tempValue .= "\n\r"; //to w tym miejscu łamiemy linię co
// spowoduje wyświetlenie się kolejnej linii tekstu w nowym wierszu
                 $count++; //zwiększamy licznik
             }
         }
     }
    $obrazek = ImageCreateFromJpeg('papier.jpg'); //tworzymy obiekt z pliku
    $fontColor = ImageColorAllocate($obrazek, 255, 0, 0); //ustawiamy kolor tekstu
// na obrazku
    ImageTTFText($obrazek, 10, -9, 20, 20, $fontColor, 'Tehzeta.ttf', $tempValue); 
//umieszczamy tekst na odpowiedniej 
//pozycji (całą składnię polecenia ImageTTFText polecam poczytać na www.php.net)
    imagejpeg($obrazek, 'papier-z-tekstem.jpg', 100); //zapisujemy obrazek do pliku
    imagedestroy($obrazek); //i usuwamy go z pamięci serwera
}
?>

Skoro obrazek jest gotowy, pozostaje go tylko wyświetlić;)

Komentarze

Dzięki wielkie! Tego potrzebowałem. W weekend obczaję czy działa to na mojej stronce.
no i w 28 ta klamerka jest niepotrzebna;)
i jak na chwilę obecną nie działają mi polskie znaki;)
(ograniczanie komentarzy tez jest zle;)
jest tu kilka błędów;)
w 3 linii brakuje ;
w 6 licznik powinien być równy 1 a nie 0
w 11 warunek powinien być odwrotny czyli >= a nie
Comments closed...

DesignEnd na Facebook'u

Inspiration