Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: copy jpg ze skryptu generującego jpga
Forum PHP.pl > Forum > PHP
hao
W poniższym skrypcie:

  1. <?
  2. $katalog="test";
  3.  
  4. if ($handle = opendir($katalog)):
  5. {
  6.  while (false !== ($file = readdir($handle)))
  7.  {
  8.  if ($file != "." && $file != ".." && substr($file, -3,3) == "jpg" && substr($file, 1,2) != "m_" ):
  9.  {
  10.  copy("$katalog/m.php?pic=$file", "$katalog/m_$file");
  11.  }
  12.  endif;
  13.  }
  14. }
  15. endif;
  16. ?>

chcę wszystkie pliki .jpg skopiować do miniaturek. Plik m.php pobiera sobie plik jpg, pomniejsza go, resampluje i na wyjściu wyrzuca już nowego jpega. (sam plik m.php działą bez zarzutu). Jednak w powyższym skrypcie najwyraźniej funkcja copy nie radzi sobie, kiedy nie podaję "normalnej" ścieżki dostępu do jpega, tylko do pliku generującego jpega. Zaznaczam, że skrypt , gdy podam mu normalną scieżkę tj. np.
  1. <?php
  2. copy("sciezka/plik.jpg", "sciezka/nowy.jpg");
  3. ?>

to działa poprawnie.

W moim przypadku zwraca się komunikat:

Warning: copy(test/m.php?pic=test.jpg): failed to open stream: No such file or directory in /var/www/re/index.php on line 12

Podaję również zawartość pliku m.php:
  1. <?php
  2. // pobieram sobie nazwę obrazka do resamplingu ze zmiennej pic
  3. $filename = $_GET['pic'];
  4. $percent = 0.5; // pomniejsznie o połowe
  5.  
  6. header('Content-type: image/jpeg');
  7.  
  8. list($width, $height) = getimagesize($filename);
  9. $new_width = $width * $percent;
  10. $new_height = $height * $percent;
  11.  
  12. $image_p = imagecreatetruecolor($new_width, $new_height);
  13. $image = imagecreatefromjpeg($filename);
  14. imagecopyresampled($image_p, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height);
  15.  
  16. //wyjście
  17. imagejpeg($image_p, null, 100);
  18. ?>

(zresztą ten skrypt jest skopiowany z php.net)

Czy ktoś ma jakiś pomysł na rozwiązanie tego problemu?

Pozdrawiam.
nospor
Drugim argumentem funkcji copy jest plik docelowy pod którym ma byc zapisany plik źródłowy. Copy nie wykonuje pliku docelowego a w niego kopiuje plik źródłowy (jesli wogole tak mozna powiedziec biggrin.gif).
Musisz najpierw wykonac miniaturkę, a potem ją zapisac tam gdzie chcesz
hao
Ale proszę zauważyć, że drugi argument tej funkcji nie jest wykonywalnym plikiem docelowym (o ile o to chodzi) a jedynie ścieżką z nazwą generowaną z dwóch zmiennych:

  1. <?php
  2.  
  3. $katalog="sciezka1";
  4. $file="nowy.jpg";
  5.  
  6. print("$katalog/m_$file"); // drugi argument z copy("$katalog/m.php?pic=$file", "$katalog/m_$file");
  7.  
  8. ?>

Da na wyjściu:

sciezka1/m_nowy.jpg

---------------------------
Albo może inaczej:

W jaki sposób mogę z pliku generujacego jpega zapisać go do katalogu automatycznie od razu? Będę wdzięczny za małą podowiedź, bo już po prostu nie mogę patrzyć na monitor dzisiaj (a co za tym idzie grzebać w php.net)..tongue.gif
pozdrawiam.
nospor
MIalem na mysli pierwszy argument funkcji. Jako pierwszy argument podajesz nazwe pliku, który ma ci wygenerowac dopiero jpg. Ty musisz od razu podać nazwe juz istniejącego pliku.


Jesli wygeneryjesz juz jpg, to zapisz go tam gdzie chcesz. fopen, fwrite,fclose
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.