Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] Łączenie dwóch dynamicznie generowanych grafik w całość
Forum PHP.pl > Forum > Przedszkole
msikora
Witam

Szukałem w dokumentacji PHP, na różnych forach, na Google... i nic. Nikt nie poruszył podobnego tematu, a niektórych forumowiczów może on zainteresować.

Stworzyłem skrypt w PHP (o nazwie: kod_kreskowy.php), generujący kod kreskowy, który może być wywołany w dokumencie typu HTML jak zwykły obrazek typu PNG. Następnie utworzyłem następny skrypt, generujący jako obrazek wzór pewnego dokumentu, do którego chcę wstawić kod kreskowy za pomocą fragmentu:

  1. <?php
  2. (...)
  3. $grafika = 'kod_kreskowy.php?kod=01020349';
  4. $rozmiar = GetImageSize($grafika);
  5. $stary_png = ImageCreateFromPNG($grafika);
  6. ImageCopy($nowy_png, $stary_png, 0, 0, 0, 0, $rozmiar[0], $rozmiar[1]);
  7. (...)
  8. ?>


Niestety ta składnia nie działa, a nie chcę kodu kreskowego zapisywać do pliku, w celu jego wstawienia do obrazkowego dokumentu. Roboczo połączyłem zawartości obu skryptów w jednym pliku, ale uważam to rozwiązanie za mało eleganckie, ponieważ chcę w przyszłości rozwijać możliwości skryptu "kreskowego", a nie chcę za każdym razem podmieniać kodu w dwóch miejscach.

Czy jest jakiś sposób na łączenie w jedną całość dwóch różnych skryptów, generujących dynamicznie grafikę?

Pozdrawiam
Michał Sikora
Kicok
Spróbuj podać pełną ścieżkę do pliku w funkcji imagecreatefrompng(), np.:
  1. <?php
  2.  
  3. $grafika = 'http://twoja_strona.pl/katalog/kod_kreskowy.php?kos=0123456';
  4. $stary_png = imagecreatefrompng( $grafika );
  5.  
  6. ?>



Jeśli się będzie pluło, to obrazek będziesz musiał zapisać w pliku tymczasowym (tmpfile" title="Zobacz w manualu PHP" target="_manual, tempnam" title="Zobacz w manualu PHP" target="_manual) również przy użyciu protokołu http://, następnie plik ten otworzyć przez imagecreate*, a na końcu go usunąć (unlink" title="Zobacz w manualu PHP" target="_manual)
msikora
Rozwiązanie z podaniem pełnej ścieżki do skryptu z kodem kreskowym (http://....) już dawno sprawdziłem, niestety nie działa. Natomiast tworzenie tymczasowo obrazków w pliku jest niedopuszczalne, ponieważ chcę skrypt wywoływać w wielu miejscach, także poprzez wstawki typu <img src="obrazek.php?kod=123">, które skrypt traktują jak rasowy obrazek PNG, czyli prawidłowo.
W skrócie mówiąc, przydałaby się funkcja ImageCreateFromPHP laugh.gif
Kicok
1. Jeśli chcesz, żeby kod PHP z danego pliku się wykonał i chcesz pobrać wynik działania tego kodu, to nie możesz się do tego pliku odwołać przez katalog/nazwapliku.php, tylko z wykorzystaniem serwera WWW, czyli przez http://twoja_strona.pl/katalog/nazwapliku.php

2. Jeśli allow_url_fopen jest włączone to zadziała taki kod:
img.php
  1. <?php
  2.  
  3. $img = imagecreatetruecolor( 300, 200 );
  4. $red = imagecolorallocate( $img, 0x99, 0x00, 0x00 );
  5. $white = imagecolorallocate( $img, 0xFF, 0xFF, 0xFF );
  6.  
  7. imagefilledrectangle( $img, 0, 0, 300, 200, $red );
  8.  
  9. imagestring( $img, 1, 100, 90, 'TEST TEST TEST TEST', $white );
  10.  
  11. header( 'Content-Type: image/png' );
  12. imagepng( $img );
  13. imagedestroy( $img );
  14.  
  15. ?>


img2.php
  1. <?php
  2.  
  3. $img = imagecreatefrompng( 'http://robota.kicok.net/image/img.php' );
  4. $white = imagecolorallocate( $img, 0xFF, 0xFF, 0xFF );
  5.  
  6. imagestring( $img, 3, 10, 10, 'TEST2 TEST2 TEST2', $white );
  7.  
  8. header( 'Content-Type: image/png' );
  9. imagepng( $img );
  10. imagedestroy( $img );
  11.  
  12. ?>


Przykład: http://robota.kicok.net/image/img2.php


Jeśli nie jest włączone, to będziesz musiał to wygenerowane dynamicznie zdjęcie jakoś zapisać na dysku (curl" title="Zobacz w manualu PHP" target="_manual, fsockopen" title="Zobacz w manualu PHP" target="_manual) i dopiero to zapisane zdjęcie będziesz mógł przekazać do funkcji imagecreatefrompng()
msikora
Kicoku wielkie dzięki za podpowiedź. Po drobnej przeróbce Twojego kodu, odpalił na moim serwerze bez problemów. A teraz kilka słów wyjaśnienia.

Zapisałem Twoje skrypty na serwerze, pod takimi samymi nazwami plików. Plik img.php pobrał "obrazek" z Twojego serwera, modyfikując go odpowiednio. Ponieważ mój serwer nazywa się "samba", zmieniłem linijkę:

  1. <?php
  2. $img = imagecreatefrompng( 'http://robota.kicok.net/image/img.php' );
  3. ?>


na:

  1. <?php
  2. $img = imagecreatefrompng( 'http://samba/img.php' );
  3. ?>


spodziewając się pozytywnego efektu. Niestety mimo włączonego allow_url_fopen, skrypt wywalił kilka błędów, np:

Warning: imagecreatefrompng(http://samba/img.php): failed to open stream: HTTP request failed! HTTP/1.1 404 Object Not Found in /srv/www/htdocs/img2.php on line 3

Warning: imagecolorallocate(): supplied argument is not a valid Image resource in /srv/www/htdocs/img2.php on line 4


Gdzie tkwi błąd? Nie mam zielonego pojęcia. Natomiast pomogło odwoływanie się po numerze IP, a także jako LOCALHOST:

  1. <?php
  2. $img = imagecreatefrompng( 'http://localhost/img.php' );
  3. ?>


lub

  1. <?php
  2. $img = imagecreatefrompng( 'http://192.168.6.112/img.php' );
  3. ?>


Wielkie dzięki za pomoc 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.