Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [HTML][PHP] osadzanie i generowanie obrazka w jednym skrypcie
Forum PHP.pl > Forum > Przedszkole
kerum
Dzien dobry,

mam pytanie odnosnie generowania obrazkow z PHP i wstawiania ich w HTML,
a konkretnie jak polaczyc obie czynnosci w jednym skrypcie PHP.

Typowe wstawianie obrazka jest rozbite na dwa pliki,
ponizszy przyklad dziala bez problemu:

plik test.php:

  1. <?php
  2. header( 'Content-type: image/png' );
  3. $img = imagecreatetruecolor( 150, 30 );
  4. imagepng( $img );
  5. imagedestroy( $img );
  6. ?>

plik test.html:

  1. <img src='test.php'>
  2. </html>

Zalezy mi na tym, aby obie czynnosci (generowanie obrazka i wstawianie go w HTML)
byly wykonane jednym skryptem PHP, cos w stylu:

plik test2.php:

  1. <?php
  2. function generate_php()
  3. {
  4. header( 'Content-type: image/png' );
  5. $img = imagecreatetruecolor( 150, 30 );
  6. imagepng( $img );
  7. imagedestroy( $img );
  8. }
  9.  
  10. echo '<html>';
  11. echo '<img src=', generate_php() , '>';
  12. echo '</html>';
  13. ?>

Niestety w tym przypadku otrzymuje slawny komunikat od funkcji header():
Warning: Cannot modify header information - headers already sent by
(czytalem odpowiedni rozdzial w FAQ: http://forum.php.pl/index.php?showtopic=44...=0&start=0)

Probowalem kombinowac z buforowaniem poprzez ob_start() i ob_flush() ale nie wiem,
czy to jest wlasciwe rozwiazanie.

Uwaga: nie chodzi mi o osadzenie rysunku jako URI data jak opisane np. tutaj:
http://www.sencer.de/article/1135/how-to-i...-with-data-uris

Chodzi mi o zasymulowanie w jedym skrypcie tego, co w pierwszym przykladzie
bylo zrealizowane w dwoch plikach.

Czy ktos ma jakis pomysl?

Pozdrawiam,
K.
wookieb
imagepng i drugi parametr
kerum
Dzieki za szybka odpowiedz.

Zapomnialem dodac, ze chodzilo mi o to, aby nie trzeba tworzyc pliku z obrazkiem na serwerze
(podobnie jak nie jest tworzony w pierwszym przykladzie).

Tak wiec pytanie jest aktualne.

Pozdrawiam,
K.
kerum
Hej,

jak pisalem w pierwszym post'cie nie chodzi o osadzanie rysunku poprzez URI czyli 'data:'.
Link, ktory przytoczylem, opisuje to samo.
Czy ktos moglby zaproponowac jakis kod? A moze sie nie da?
Pytanie nadal aktualne.

Pozdro,
K.
wookieb
Ok spoko ale nie doczytałem
Nie da się wygenerować obrazka nie zapisując go do pliku i przekazując go tagu img w formie ciągu bez użycia "data:"
Także skoro nie chodzi ci o użycie powyższe rozwiązania więc nie wiem co teraz chcesz smile.gif
kerum
sprobuje jeszcze raz opisac slowami o co chodzi.

W pierwszym poscie pokazalem dwa przyklady:
-> pierwszy z dwoma plikami (dzialajacy)
-> drugi z jednym skryptem (niedzialajacy)

W pierwszym przykladzie przegladarka dostaje strone, czyta ja, dochodzi do <IMG SRC=test.php>,
robi kolejnego request'a, wywolany skrypt test.php przygotowuje rysunek i podsyla go i ostatecznie strona wyswietla sie kompletnie z rysunkiem.

Chodzi mi o skonstruowanie analogicznego mechanizmu w jednym skrypcie. Probowalem naszkicowac go jako przyklad dwa.
Chcialbym zamienic wywolanie zewnetrznego skryptu php poprzez wywolanie funkcji w obrebie tego samego skryptu,
ktory wygenerowal html'a.
Ten przyklad nie dziala i zastanawiam sie, czy mozliwe jest jego poprawienie, np. poprzez buforowanie opozniajace dosylanie rysunku przez funkcje.

Innymi slowy czy da sie stworzyc rozwiazanie w jednym skrypcie, ktore wysyla w html strone zawierajaca <IMG SRC...>
a jednoczesnie dosyla zrodlo tego rysunku, w odpowiedzi na kolejny request przegladarki.

Pozdrawiam,
K.
hind
chyba że chodzi o prostego if
  1. if($_GET['generuj']) {
  2. header( 'Content-type: image/png' );
  3. $img = imagecreatetruecolor( 150, 30 );
  4. imagepng( $img );
  5. imagedestroy( $img );
  6. }else{
  7. echo '<html>';
  8. echo '<img src="?generuj=1">';
  9. echo '</html>';
  10. }
kerum
Heja,

nie o to tez mi nie chodzilo. W podanym przez Ciebie przykladzie i tak jest wolany od nowa skyrpt php,
fakt ze ten sam, ale jednak caly skrypt od nowa.
Chodzilo mi o to, aby to wywolanie bylo zrealizowane przez wolanie funkcji php, zdefiniowanej w tym samym skrypcie.

Chcialem dzieki temu uproscic sobie przekazywania dziesiatkow parametrow do generowania wykresu.
Prosciej byloby przekazac je jako parametry funkcji, niz poprzez sesje, POST, GET, itp.

Zaintrygowalo mnie, ze taki z pozoru prosty mechanizm jest dosc trudny do zaimplementowania.

Pozdr.,
K.
hind
niedasie... możesz tylko zrobić funkcję która ma wstępnie zdefiniowane jakieś parametry
  1. function maleobrazki($plik) { return '/thumb.php?file='.$plik.'&rozmiar=maly&jakies_inne_argumenty=dupa' ;}
  2. function duzeobrazki($plik) { return '/thumb.php?file='.$plik.'&rozmiar=duzy&jakies_inne_argumenty=dupa' ;}


i potem tylko w viewie "<img src=".maleobrazki('laska.jpg').">";
kerum
ok, rozumiem, ze nie da sie zrobic jednego skryptu, ktory obsluzy dwa requesty i musza byc dwa.
Wielkie dzieki za wszystkie odpowiedzi.

Jaka metode polecacie do przekazania parametrow zwizanych z generowaniem wykresu miedzy tymi skryptami
(przede wszystkim tablice)?
Session, POST czy moze cos innego?

Pozdrawiam,
K.
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.