Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Generowanie grafiki GD, TEKST
Gray
post
Post #1





Grupa: Zarejestrowani
Postów: 127
Pomógł: 0
Dołączył: 5.04.2010

Ostrzeżenie: (10%)
X----


Witam, znalazłem pewien tutorial odnośnie tworzenia grafiki za pomocą GD. Zmodyfikowałem delikatnie kod który tam był opisany i w efekcie posiadam taki kod:

  1. <?php
  2. $tekst=$_POST['tekst'];
  3.  
  4. $data_img=date('dmYHis');
  5. $uploaddir = 'img/upload/'.$data_img.'-slowo.png';
  6.  
  7. $im = @imagecreate(200, 100)
  8. or die("Cannot Initialize new GD image stream");
  9. $background_color = imagecolorallocate($im, 0, 0, 0);
  10. $text_color = imagecolorallocate($im, 255, 255, 255);
  11. imagestring($im, 1, 5, 5, $tekst, $text_color);
  12. imagepng($im, $uploaddir);
  13. ImageDestroy($im);
  14. ?>


Oczywiście do jego obsługi wystarczy prosty formularz z oknem textowym "tekst". Ale do rzeczy, kod ten tworzy czarny prostokąt i na nim biały napis. Chciał bym móc manipulować tym tekstem i wielkością prostokąta. Dokładniej mówiąc chciał bym móc ustawić marginesy dla tekstu i jego wyśrodkowanie lub wyjustowanie, odpowiednie zawijanie wierszy w przypadku dłuższego tekstu, skalowanie wielkości prostokąta względem ilości tekstu i wielkości czcionki lub na odwrót, wielkości czcionki względem wielkości prostokąta. I czy jest możliwość stosowania zaawansowanych opcji do samej czcionki, takich jak używa się w css.

Pozdrawiam,
Gray

Ten post edytował Gray 23.10.2011, 20:49:29
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
croc
post
Post #2





Grupa: Zarejestrowani
Postów: 706
Pomógł: 108
Dołączył: 12.03.2010

Ostrzeżenie: (0%)
-----


Temat jest bardzo ciekawy. To może przydać: http://www.google.pl/search?gcx=w&sour...stify+algorithm

EDIT
Ja jestem w trakcie pisania nakładki obiektowej dla GD (bardziej dla praktyki niż użyteczności). Zainspirowany tym tematem zacząłem robić metodę wypisywania tekstu jako bloku. Póki co zrobiłem sobie centrowanie tekstu. Efekt jest taki:
(IMG:http://img692.imageshack.us/img692/8459/47941390.png)

Kod metody:
  1. public function text($text, $width, $font, $size, Color $color, $x, $y) {
  2. $fontFileName = './'.$font.'.ttf';
  3. $words = explode(' ', $text);
  4. $rows = array();
  5. $row = '';
  6. $rowWidth = 0;
  7. foreach($words as $word) {
  8. $element = ($row === '' ? null : ' ').$word;
  9. $box = imagettfbbox ($size, 0, $fontFileName, $element);
  10. $elementWidth = $box[2] - $box[0];
  11. if($rowWidth + $elementWidth <= $width) {
  12. $row .= $element;
  13. $rowWidth += $elementWidth;
  14. }
  15. else {
  16. array_push($rows, $row);
  17. $row = $word;
  18. $rowWidth = $elementWidth;
  19. }
  20. }
  21. foreach($rows as $row) {
  22. $box = imagettfbbox ($size, 0, $fontFileName, $row);
  23. imagettftext($this->source, $size, 0, $x + ($width - ($box[2] - $box[0]) >> 1), $y, $color->identifier, $fontFileName, $row);
  24. $y += $size << 1;
  25. }
  26. }

A powyższy obrazek wywołałem tak:
  1. $image = new Image(400, 300, new Color(0, 0, 0));
  2. $image->gradient(new Color(235, 245, 255), new Color(215, 235, 255));
  3. $image->text(file_get_contents('text.txt'), $image->getWidth(), 'arial', 12, new Color(0, 123, 255), 0, 20);
  4. $image->show();


Metoda oczywiście zawiera błędy. Fajnie byłoby, gdyby udało się stworzyć rozwiązanie, które służyłoby do wypisywania tekstu z dowolnym sposobem wyrównania.

Zastanawia mnie jak najlepiej rozwiązać justowanie:
  1. wydłużać tylko spacje
  2. wydłużać spacje i odstępy między literami po równo
  3. wydłużać spacje bardziej niż odstępy między literami

Wydaje mi się, że sposób 3. jest najlepszy, ale jaki współczynnik obrać? (IMG:style_emoticons/default/smile.gif)

Ten post edytował croc 26.10.2011, 00:16:36
Go to the top of the page
+Quote Post

Posty w temacie
- Gray   Generowanie grafiki GD, TEKST   23.10.2011, 20:46:33
- - croc   PHP GD nie posiada takich opcji. Jedyne co możesz ...   23.10.2011, 22:46:37
- - Pawel_W   imagettfbbox to Ci pomoże do zabawy z wielkością p...   23.10.2011, 23:07:51
- - Gray   Dzięki Paweł_W za podpowiedz, w gruncie rzeczy mys...   24.10.2011, 00:13:15
- - croc   W odpowiedzi na to pytanie nie ma nic o czym nie w...   24.10.2011, 12:16:16
- - Gray   Hmm, z tym dzieleniem na słowa i sprawdzaniem czy ...   25.10.2011, 19:20:52
- - dwwa   jak dobrze pamiętam to funkcja imageftbbox() ci po...   25.10.2011, 19:59:56
- - Gray   Ta właśnie jestem w trakcie maglowania tej funkcji...   25.10.2011, 20:04:26
- - croc   Twoja metoda nie ma sensu. Porównaj wyniki z użyci...   25.10.2011, 20:15:07
- - dwwa   http://pl.php.net/manual/en/function.imagettftext....   25.10.2011, 20:22:50
- - croc   No właśnie. Dokładnie o coś takiego chodzi. Proble...   25.10.2011, 20:27:21
- - Gray   Wiem, że podał, już wcześniej ktoś inny ją podał i...   25.10.2011, 20:27:51
- - croc   wordwrap jest tutaj bezużyteczny.   25.10.2011, 20:31:02
- - Gray   tzn. nie wiem czy jest bezużyteczny w bardzo zopty...   25.10.2011, 20:35:11
- - croc   Bezużyteczny, bo - jak napisałem powyżej - jeden c...   25.10.2011, 20:38:25
- - Pawel_W   obiło mi się kiedyś o uszy coś takiego jak phpHyph...   25.10.2011, 21:52:45
- - croc   Temat jest bardzo ciekawy. To może przydać: http:/...   25.10.2011, 22:01:37
- - Gray   Heh fajnie, że kogoś to zainspirowało. Ja jestem p...   26.10.2011, 00:53:48
- - croc   Cytat(Gray @ 26.10.2011, 01:53:48 ) i...   26.10.2011, 01:08:54
- - Gray   Nie bardzo rozumiem, poco liczyć długość wszystkic...   26.10.2011, 03:17:36
- - croc   Nie możemy sobie wstawiać "spacji", bo s...   26.10.2011, 11:01:07
- - Gray   Małe pytanie odnośnie GD i tekstu... dlaczego kied...   2.11.2011, 18:41:57
- - croc   stripslashes   2.11.2011, 18:47:07
- - Gray   pomogło, dzięki!   2.11.2011, 18:52:18


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 26.12.2025 - 16:17