Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Jaki błąd jest w tej funkcji ?, Skalowanie obrazu
primo
post
Post #1





Grupa: Zarejestrowani
Postów: 254
Pomógł: 0
Dołączył: 30.12.2003
Skąd: Strzegom

Ostrzeżenie: (0%)
-----


Witam,

funkcja wygląda następująco:

  1. <?php
  2.  
  3.  
  4. function resize($imgName, $size)
  5. {
  6. if(!($img = imagecreatefromjpeg($imgName))){
  7. echo(&#092;"Nie mogę otworzyć pliku: $imgName\");
  8. return false;
  9. }
  10.  
  11. $img_w = imagesx($img);
  12. $img_h = imagesy($img);
  13.  
  14. $ratio = $img_w / $img_h;
  15.  
  16. if($ratio > 1){
  17. $new_img_w = $size;
  18. $new_img_h = ($size / $ratio);
  19. }
  20. else{
  21. $new_img_w = ($size * $ratio);
  22. $new_img_h = $size;
  23. }
  24.  
  25. $tempImg = imagecreatetruecolor($new_img_w, $new_img_h);
  26. imagecopyresampled($tempImg, $img, 0, 0, 0, 0, 
  27. $new_img_w, $new_img_h, $img_w, $img_h);
  28.  
  29. $name = substr($imgName, 0, strlen($imgName) - 5);
  30. $name = $name.&#092;"-resized.jpg\";
  31.  
  32. imagejpeg($tempImg, $name);
  33. }
  34.  
  35. resize(&#092;"super_size_me.jpg\", 120);
  36.  
  37.  
  38. ?>


problem wygląda następująco: chciałbym tą funkcję zastosować w innej funkcji, ale nie wiem jak.

funkcja wygląda tak:

  1. <?php
  2.  
  3.  
  4. function opis_filmu()
  5. {
  6.  
  7. global $id;
  8. if($id){
  9. $query=&#092;"select * from filmy where id='$id'\"; 
  10. $result=mysql_query($query);
  11. while ( $row = mysql_fetch_row($result) )
  12. { 
  13.  
  14. $okladka = $row[4];
  15. $foto=$row[4];
  16. $name=$row[4];
  17. $foto = resize(&#092;"$foto\", 350);
  18.  
  19.  
  20.  
  21.  
  22.  
  23.  
  24.  echo &#092;"<table cellpadding=5 cellspacing=0 class=podmenu_opis>\";
  25.  echo&#092;"  <tr>
  26.  <td class=okladka><img src='graphics/okladki/$foto' border='0' ALT='$name'></td>
  27.  
  28.  
  29. ?>


nie jest to cała funkcja bo nie ma sensu jej tu dawać. Chodzi mi mianowicie o to aby zmienną foto przekształcić funkcją resize, jak bym nie dał zapisu to ciągle wyskakuje Nie mogę otworzyć pliku: aktualna_nazwa_dotyczaca_jakiegos_tam_filmu.jpg - zwróćcie uwagę, że ta zmienna foto odwołuje sie do innego katalogu aniżeli funkcja resize (nie wiem czy to wazne).

Ten post edytował primo 5.02.2005, 11:21:46
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 10)
tiraeth
post
Post #2





Grupa: Przyjaciele php.pl
Postów: 1 789
Pomógł: 41
Dołączył: 30.10.2003
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


  1. <?
  2. $foto = resize($foto, 350);
  3. ?>

zmienna $foto musi przetrzymywać nazwę pliku do resize'ingu (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) nie umieszczaj jej w cudzysłowiach (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)
Go to the top of the page
+Quote Post
primo
post
Post #3





Grupa: Zarejestrowani
Postów: 254
Pomógł: 0
Dołączył: 30.12.2003
Skąd: Strzegom

Ostrzeżenie: (0%)
-----


zdaje się że to nie jest aż tak banalne, jak się wydaje. Próbowałem już z cudzysłowami, z apostrofami i bez, ale nic z tego.

dodałem nawet:

  1. <?php
  2.  
  3.  
  4. $foto=$row[4];
  5. $name=$row[4];
  6. $foto = substr($foto, 0, strlen($foto) - 4);
  7. $foto = $foto.&#092;"-resized.jpg\";
  8. $foto = resize($foto, 350);
  9.  
  10.  
  11. ?>


ale nadal nici. Tak się zastanawiam czy może zachodzić konflikt nazw, że w jednej i drugiej występuje zmienna name, ale pochodząca z różnych źródeł (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif) (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif)
Go to the top of the page
+Quote Post
nibytak
post
Post #4





Grupa: Zarejestrowani
Postów: 22
Pomógł: 0
Dołączył: 24.01.2005

Ostrzeżenie: (0%)
-----


ja to zrobilem tak:

  1. <?php
  2.  
  3. function resize($imgName, $size)
  4. {
  5.  
  6. // funkcja z 1 postu - nic nie zmienilem az do:
  7.  
  8.   imagejpeg($tempImg, $name);
  9.  
  10.   // tu dodalem:
  11.   return $name;
  12. }
  13.  
  14. ?>


i przykladowe wywolanie:

  1. <?php
  2.  
  3.     $foto = resize('mapa-akita.JPG', 500);
  4.  
  5.     echo '<img src=\"'.$foto.'\" alt=\"'.$foto.'\" />';
  6.  
  7. ?>


i zadzialalo. przy okazji - obcielo mi ostatnia litere z nazwy pliku obrazka (zostalo 'mapa-akit').

Ten post edytował nibytak 6.02.2005, 06:40:19
Go to the top of the page
+Quote Post
primo
post
Post #5





Grupa: Zarejestrowani
Postów: 254
Pomógł: 0
Dołączył: 30.12.2003
Skąd: Strzegom

Ostrzeżenie: (0%)
-----


obcięło Ci ponieważ w linii kodu powinno być -4 a nie:

  1. <?php
  2.  
  3. $name = substr($imgName, 0, strlen($imgName) - 5);
  4. ?>


a mnie to jednak nie działa ;(

Nie mam już pomysłów co możnaby w tym poprawić.

Najdziwniejsze w tym jest to, że jak dam odwołanie w ten sposób:

  1. <img src="rysunek.jpg">
  2. resize("rysunek.jpg", 350);
  3. <img src="rysunek-resized.jpg">


to funkcja działa, a jak daję:

  1. <?php
  2.  
  3. $foto = resize($foto, 70);
  4.  
  5. ?>

to już nie działa (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif) (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif) (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif) (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif) (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif) (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif) ?

Ten post edytował primo 6.02.2005, 09:45:49
Go to the top of the page
+Quote Post
stoprocent
post
Post #6





Grupa: Zarejestrowani
Postów: 338
Pomógł: 2
Dołączył: 17.05.2003
Skąd: Kraków , Londyn

Ostrzeżenie: (0%)
-----


  1. <?php
  2.  
  3. function resize($imgName, $size)
  4. {
  5. if(!($img = imagecreatefromjpeg($imgName))){
  6. echo(&#092;"Nie moge^ otworzy? pliku: $imgName\");
  7. return false;
  8. }
  9.  
  10. $img_w = imagesx($img);
  11. $img_h = imagesy($img);
  12.  
  13. $ratio = $img_w / $img_h;
  14.  
  15. if($ratio > 1){
  16. $new_img_w = $size;
  17. $new_img_h = ($size / $ratio);
  18. }
  19. else{
  20. $new_img_w = ($size * $ratio);
  21. $new_img_h = $size;
  22. }
  23.  
  24. $tempImg = imagecreatetruecolor($new_img_w, $new_img_h);
  25. imagecopyresampled($tempImg, $img, 0, 0, 0, 0,
  26. $new_img_w, $new_img_h, $img_w, $img_h);
  27.  
  28. $name = substr($imgName, 0, strlen($imgName) - 5);
  29. $name = $name.&#092;"-resized.jpg\";
  30.  
  31. imagejpeg($tempImg, $name, 75);
  32. imagedestroy($tempImg);
  33.  
  34. return $name;
  35. }
  36.  
  37. ?>

To dziala.
Go to the top of the page
+Quote Post
primo
post
Post #7





Grupa: Zarejestrowani
Postów: 254
Pomógł: 0
Dołączył: 30.12.2003
Skąd: Strzegom

Ostrzeżenie: (0%)
-----


jeżeli obie funkcje działają oddzielnie to dlaczego nie działają w połączeniu (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif) Czy ja czegoś nie rozumię (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif) ? Zasieg zmiennych albo coś (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif)
Czy to może być wina tego że ja tą nazwę każdego zdjęcia przetrzymuję w bazie jako zwykły text (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif) Może to trzeba przetworzyć na coś innego (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif) Macie jakieś pomysły (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif) Please.........

tak nadal drążę ten temat:

w momencie jak usunę return false; to wyskakuje: gd-jpeg: JPEG library reports unrecoverable error: Empty JPEG image (DNL not supported) ---- może to kogoś naprowadzi na rozwiązanie mojego problemu (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif)

Ten post edytował primo 6.02.2005, 19:20:21
Go to the top of the page
+Quote Post
nibytak
post
Post #8





Grupa: Zarejestrowani
Postów: 22
Pomógł: 0
Dołączył: 24.01.2005

Ostrzeżenie: (0%)
-----


to ja niestety nie wiem jak pomoc (IMG:http://forum.php.pl/style_emoticons/default/sad.gif) . pewnie pliki ktore maja byc resiz()wane trzymasz w jednym katalogu - sprawdz przed wywolaniem resize() czy podajesz jej prawidlowy parametr $imgName (np echo $imageName przed pierwszym ifem). zobacz jeszcze gdzie funkcja zapisuje pliki i ew wymus zapis w inna sciezke lub zmodyfikuj tag img. to tyle z mojego skromnego doswiadczenia (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

powodzenia
Go to the top of the page
+Quote Post
primo
post
Post #9





Grupa: Zarejestrowani
Postów: 254
Pomógł: 0
Dołączył: 30.12.2003
Skąd: Strzegom

Ostrzeżenie: (0%)
-----


z tego komunikatu, który uzyskałem po usunięciu return false; wnioskuję, że funkcja otwiera pusty jpg. Tak myślę nad tym co powiedziałeś o tej ścieżce dostępu. Jeśli chodzi o zwracany bła to przy próbie otwarcia zdjęcia funkcja zwraca: Nie moge otworzyć pliku: $imgName - gdzie $imgName jest oczywiście nazwą pobraną z bazy, a więc np. super_size_me.jpg i to wyświetla - samą nazwę, a zdjęcia już nie.

Jak w takim razie w funkcji resize określić położenie tych plików skoro one są w katalogu graphics/okladki/$foto (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif)

zapomniałbym: funkcja resize nie tworzy mi wspomnianych miniaturek, co też jest dziwne...

Ten post edytował primo 6.02.2005, 20:20:39
Go to the top of the page
+Quote Post
NuLL
post
Post #10





Grupa: Zarejestrowani
Postów: 2 262
Pomógł: 21
Dołączył: 3.05.2004
Skąd: Sopot, Krakow, W-wa

Ostrzeżenie: (0%)
-----


Propblemem może byc zapis danego pliku graficznego gdyż GD nie radzi sobie z iektórymi.
Go to the top of the page
+Quote Post
nibytak
post
Post #11





Grupa: Zarejestrowani
Postów: 22
Pomógł: 0
Dołączył: 24.01.2005

Ostrzeżenie: (0%)
-----


przy wywolaniu funkcji podaj sciezke np. :

resize('graphics/okladki/'.$foto, ...);

i to zadziala o ile skrypt jest w katalogu glownym. jesli nie jest to musisz wyjsc z podkatalogu gdzie jest skrypt - uzywa sie do tego '..' - jeden raz lub wielokrotnie - zalezy jakie masz drzewo katalogow. np. jesli masz w katalogu glownym podkatalog 'skrypty' a wnim skrypt z funkcja resize() piszesz:

resize('../graphics/okladki/'.$foto, ...);

moze musisz uzyc tego wielokrotnie (np skrypt z resize() masz w katalogu /skrypty/przegladanieokladek/'):

resize('../../graphics/okladki/'.$foto, ...);

generalnie na tej zasadzie. funkcja resize() utworzy ci miniaturke w tym samym katalogu w ktorym sa okladki czyli /graphics/okladki (przynajmniej u mnie tak to dzialalo). zmienna $foto nie moze zawierac sciezki do pliku. dalej zostaje tylko html - tam odpowiednia sciezka i zalatwione. pokombinuj
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 15.09.2025 - 15:21