Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [image] Zapisywanie Utworzonego Obrazka Do Pliku
Forum PHP.pl > Forum > PHP
grohu
w jaki sposob zapisuje sie utworzony obrazek do pliku questionmark.gif?

probowalem tak, ale nie dziala (skrypt uruchamiam spod konsoli - NIE przeglądarki)

  1. <?php
  2. header(&#092;"Content-type: image/png\");
  3.  
  4. $im = @imagecreate($szerokosc, $wysokosc) or die(&#092;"Cannot Initialize new GD image stream\");
  5.  
  6. $kolor_tla = imagecolorallocate($im, 255, 255, 0);
  7.  
  8. $kolor = imagecolorallocate($im, 0, 0, 0);
  9.  
  10. imageline($im, 10, 10, 39, 10, $kolor);
  11.  
  12. imagepng($im, &#092;"xxx.png\");
  13.  
  14. imagedestroy($im);
  15. ?>



jak powinno to wyglądać, żeby działało poprawnie questionmark.gif?
kszychu
Spróbuj użyć funkcji z rodziny File functions: http://pl.php.net/manual/pl/ref.filesystem.php
grohu
fwrite probowalem ale nie wyszlo...
FiDO
A napiszesz co nie dziala czy mamy bawic sie we wrozki ? Wyskakuje jakis blad (jesli tak to jaki) czy co ?
Skad biora sie zmienne $szerokosc, $wysokosc ?

PS. jesli odpalasz z konsoli to nie musisz wysylac naglowka
grohu
$wysokosc i $szerokość nie są faktycznie zdefiniowane i to było błędem, ja je zastąpiłem wartościami 300 i 200.

Ale to nie zmieniło problemu.
Obrazek w przeglądarce jest normalnie otwierany, jeśli wyłączę header to w przeglądarce pokazuje się binarna zwartość tego obrazka a nie obrazek.

i tą zawartość chciałbym zapisać do pliku, próbowałem:

  1. <?php
  2. $im = @imagecreate(300, 200) or die(&#092;"Cannot Initialize new GD image stream\");
  3. $kolor_tla = imagecolorallocate($im, 255, 255, 0);
  4. $kolor = imagecolorallocate($im, 0, 0, 0);
  5. imageline($im, 10, 10, 39, 10, $kolor);
  6.  
  7. $fp = fopen(&#092;"yyy.png\", \"w\");
  8. fwrite($fp, imagepng($im));
  9. fclose($fp);
  10.  
  11. imagedestroy($im);
  12.  
  13. ?>


ale w ten sposób plik się w ogóle nie tworzy, natomiast w takiej kolejności:
  1. <?php
  2. $fp = fopen(&#092;"yyy.png\", \"w\");
  3. $im = @imagecreate(300, 200) or die(&#092;"Cannot Initialize new GD image stream\");
  4. $kolor_tla = imagecolorallocate($im, 255, 255, 0);
  5. $kolor = imagecolorallocate($im, 0, 0, 0);
  6. imageline($im, 10, 10, 39, 10, $kolor);
  7.  
  8. fwrite($fp, imagepng($im));
  9.  
  10. imagedestroy($im);
  11. fclose($fp);
  12. ?>
plik jest tworzony, jednak jego zawartość jest pusta, w jaki sposób mam do niego wrzucić binanrną wartość, która jest pokazywana w przeglądarce po wyłączeniu header questionmark.gif
tiraeth
  1. <?php
  2. $fp = fopen(&#092;"yyy.png\", \"w\");
  3. $im = @imagecreate(300, 200) or die(&#092;"Cannot Initialize new GD image stream\");
  4. $kolor_tla = imagecolorallocate($im, 255, 255, 0);
  5. $kolor = imagecolorallocate($im, 0, 0, 0);
  6. imageline($im, 10, 10, 39, 10, $kolor);
  7.  
  8. fwrite($fp, $im);
  9.  
  10. imagedestroy($im);
  11. fclose($fp);
  12. ?>


questionmark.gif może bez ImagePNG() questionmark.gif
grohu
a wyprobowales to przed wyslaniem questionmark.gif?

bo u mnie nadal plik yyy.png jest pusty exclamation.gif
harnas
witam. to moj pierwszy post na tym forum:)

Kod
<?php
header("Content-type: image/png");

$im = @imagecreate(200, 200) or die("Cannot Initialize new GD image stream");

$kolor_tla = imagecolorallocate($im, 255, 255, 0);

$kolor = imagecolorallocate($im, 0, 0, 0);

imageline($im, 10, 10, 39, 10, $kolor);

imagepng($im);
imagepng($im, "xxx.png");

imagedestroy($im);
?>




u mnie dziala. zarowno zapis do pliku jak i wyswietlenie na stronie. zeby wyswietlic musialem dopisac imagepng($im) bo imagepng($im, "xxx.png") tworzy tylko plik ale go nie wyswietla.
Vengeance
a może by tak dać w fopen() drugi paramtetr 'w+' a nie 'w' bo przy 'w' nie utrzorzy ci pliku jeśli on nie istnieje snitch.gif

Trochę to nie dożeczne bo nie stosujesz @ przed funckjami obsługi plików więc powinny być errory, ale może masz wyłączone ?
grohu
  1. <?php
  2. $fp = @fopen(&#092;"xxx.png\", \"w+\");
  3.  
  4. header(&#092;"Content-type: image/png\");
  5.  
  6. $im = @imagecreate(200, 200) or die(&#092;"Cannot Initialize new GD image stream\");
  7.  
  8. $kolor_tla = imagecolorallocate($im, 255, 255, 0);
  9.  
  10. $kolor = imagecolorallocate($im, 0, 0, 0);
  11.  
  12. imageline($im, 10, 10, 39, 10, $kolor);
  13.  
  14. fwrite($fp, imagepng($im));
  15.  
  16. fclose($fp);
  17. imagedestroy($im);
  18. ?>


ps. przed fwrite też próbowałem stawiać @

a sposob Harnasia to sposób manualowy, który niestety (nie wiem dlaczego) nie chce mi działać.

przeciez musi byc sposob na zapisanie obrazka do pliku mad.gif
FiDO
No przeciez jest.. polega on na dodaniu drugiego parametru do funkcji imagepng z nazwa pliku do ktorego zapisac. Jesli bez tego parametru obrazek wyswietla Ci sie w przegladarce prawidlowo to znaczy ze jest ok, tylko sam zapis sie nie udaje (brak praw do zapisu?), a moze walnela Ci sie instalka php, choc to malo prawdopodobne.
grohu
tez uwazam ze to malo prawdopodobne, zreszta skoro dziala w przegladarce to czemu mialoby sie nie dac zapisac do pliku...a jednak cos sie z tym pie*.

watpie zeby to bylo spowodowane przez instalacje php-gtk bo ta przebiegla bezproblemowo.

wiec musze dalej kombinowac bo to dla mnie bardzo wazne zeby zapisac obrazek do pliku.
Vengeance
Widze, że mimo podpowiedzi FiDo nadal nie skumałeś.

http://php.net/imagepng

int imagepng ( resource image [, string filename])

podaj drugi argument a powinno zapisac obrazek do pliku.

---edit-
ano tak nie jasno to opisane bylo ;]
grohu
Cytat
Widze, że mimo podpowiedzi FiDo nadal nie skumałeś.


SKUMAŁEM, tylko TY nie skumales ze pisze ze mi to NIE dziala exclamation.gif



do tej pory pracowalem pod linuxem ale...

pod windowsem ponizszy kod dziala prawidlowo i generuje plik (spod konsoli, a nie przegladarki)

  1. <?php
  2. $im = @imagecreate(300, 200) or die(&#092;"Cannot Initialize new GD image stream\");
  3.  
  4. $kolor_tla = imagecolorallocate($im, 255, 255, 0);
  5. $kolor = imagecolorallocate($im, 0, 0, 0);
  6.  
  7. imageline($im, 10, 10, 39, 10, $kolor);
  8.  
  9. imagepng($im, &#092;"aaa.png\");
  10. imagedestroy($im);
  11. ?>



musze popracowac nad linuxem i tym problemem...bo nie chce windowsa uzywac.

peAce
FiDO
Usun malpe z przed imagecreate, upewnij sie ze masz wlaczone raportowanie bledow (display_errors = On i error_reporting conajmniej E_ALL & ~E_NOTICE) i sprawdz czy nie wywala zadnych bledow.
Podaj tez na wszelki wypadek jak dokladnie wywolujesz ten skrypt z konsoli.
grohu
dzieki FiDO exclamation.gif! naprowadziles mnie na dobry tor, odznaczylem @ i wyskoczyl blad - nierozpoznawalna funkcja imagecreate. Nie wiem dlaczego, ale widze ze rozszerzenia uzywane przez php dla przegladarki mam pod linuxem w jednym katalogu, a rozszerzenia uzywane podczas korzystania z php przez konsole... wiec skopiowalem w odpowiednie miesce plik gd.so. a do skryptu tworzacego obrazek dopisalem zmodyfikowana linijke ladujaca rozszerzenie GTK:

  1. <?php
  2. if( !extension_loaded('gd')) { dl( 'gd.' . PHP_SHLIB_SUFFIX); }
  3. ?>


i teraz wszystko dziala juz poprawnie exclamation.gif!



teraz to mam dylemat z innej beczki: php-GTK - wstawianie pol tekstowych (GtkEntry) z okreslona dlugoscia pola... ale raczej nie jest dylemat na TU i TERAZ smile.gif

w kazdym razie PROBLEM UWAŻAM ZA ROZWIĄZANY exclamation.gif
DZIKI WSZYSTKIM
.
FiDO
Ech.. normalnie czulem to w kosciach, ze tak bedzie. A to dlatego, ze mialem podobny problem, po prostu php-cli korzysta u mnie z innego php.ini, przez co rozszerzenia sie nie ladowaly, to jednak pod windowsem, wydawalo mi sie ze w linuksie obie wersje korzystaja z tego samego php.ini, ktorego sciezka jest wkompilowana w binarke (a ustawiania podczas ./configure ...).
W kazdym razie kopiowanie nie jest najlepszym pomyslem, odpal sobie php --help jest tam jeden przelacznik, ktorym mozesz jawnie wskazac sciezke do php.ini. Takie rozwiazanie bedzie bardziej eleganckie.
grohu
ano faktycznie jest php -z /sciezka/gd.so.
dzieki za pomoc

peAce
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.