Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Przechwycenie obrazka generowanego przez imagepng
Forum PHP.pl > Forum > PHP
radziel
Witam,

Aktualnie potrzebuję zrobić "generator obrazków". Wiadomo że do tego celu idealnie nadaje się GD. Mam jednak z tym problem. Mój obraz z przyczyn technicznych nie może być wczytany przez <img src="adres_strony_z_generatorem">. Gdyż musiałbym wysyłać nagłówki w miejscu gdzie tego zrobić nie mogę. Na php5.pl natrafiłem na artykuł: "Zapisywanie grafiki w pliku tekstowym - Base64 Encoder" autorstwa Zbigniewa Heintza (przepraszam jeżeli zrobiłem błąd w odmianie winksmiley.jpg).

Na podstawie tamtego tekstu stworzyłem coś takiego:

  1. <?php
  2. function CreatePicture()
  3. {
  4. $resBackground = imagecreatefrompng('http://rserwer/~dev/_bin/bg-code.png');
  5. $resResult  = imagecreate(imagesx($resBackground),imagesy($resBackground));
  6. $resTextColor = imagecolorallocate($resResult, 0, 0, 0);
  7.  
  8. imagecopy($resResult,$resBackground,0,0,0,0,imagesx($resBackground),imagesy($resBackground));
  9. imagestring($resResult,2,8,7,'text',$resTextColor);
  10.  
  11.  
  12. imagepng($resResult);
  13. $strImage = ob_get_clean();
  14. $encodedContent = chunk_split(base64_encode($strImage));
  15.  
  16. echo $encodedContent;
  17. }
  18.  
  19. ?>
  20. <img src="data:image/png;<? CreatePicture(); ?>">



Niestety nie wiem, jak dobrze "przechwycić" obrazek i go "przekodować". Powyższy kod mimo usilnych starań nie chodzi poprawnie.

Czy ktoś z Was mógłby mnie nakierować?
crash
Napisz może co chcesz osiągnąć, bo z tego co można odgadnąć po kodzie to generujesz:
  1. <img src="data:image/png;obrazek_zakodowany_w_base64">
radziel
Właśnie chcę poprawnie wyświetlić obraz przy pomocy ciągu zakodowanego base64, gdyż nie mogę wysyłać headerów. Innej metody która by to umożliwiła nie znam. Nie mogę też napisać:
Kod
<img src="generator.php">


Niestety w powyższym kodzie jest błąd. Podejrzewam że źle "przechwytuję" i "koduję" obraz. Niestety nie jestem w stanie zlokalizować usterki.
crash
Czemu nie możesz wysyłać nagłówków? Jakieś podłe ograniczenia? To może zapisz sobie wygenerowaną grafikę (info np. tu: imagepng) i potem odwołaj się do tej zapisanej grafiki.
radziel
Nie chcę zapisywać grafiki gdyż to ma być element systemu antyspamowego (generator kodów). A nagłówków nie mogę wysłać gdyż w moim frameworku nagłówki wysyła system IO i akcja (MVC) nie "ma dostępu" do czegoś takiego.
crash
No to tyle: bez nagłówka nie wyświetlisz grafiki...
radziel
Ale używając:
Kod
src="data:image/png;[obraz wygenerowany przez imagepng i zakodowany w base64]">


...raczej tak. Czy się mylę?
crash
Wprowadziłem Cię w błąd. Sorrki. Myślałem, że ten zapis przy img to jakiś skrót czy błąd. No możesz tak wyświetlić grafikę. Przykład:
  1. <?php
  2. $img = imagecreatefromjpeg( './image.jpg' );
  3.  
  4. imagepng( $img );
  5. $data = ob_get_clean();
  6. imagedestroy( $img );
  7.  
  8. $data = chunk_split( base64_encode( $data ) );
  9.  
  10. echo '<img src="data:image/png;base64,' . $data . '"/>';
  11. ?>

Tylko pomyśl ile będzie zajmować wygenerowany w ten sposób HTML...
radziel
No nie, tyle czasu siedze nad swoim kodem i zapomniałem głupiego "base64," wstawić do <img src=""> tongue.gif

Dzięki za pomoc crash smile.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.