Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php]Tworzenie miniaturki w locie przy uploadzie zdjęcia
Forum PHP.pl > Forum > Przedszkole
grattz
Pierwszy raz modyfikuje gotowy skrypt i nie daje sobie rady.
Chce aby przy uploadowaniu zdjęcia na serwer tworzyła sie w locie miniaturka tegoż zdjęcia.
Dane wyjściowe:
Katalog na serwerze .../portal2006/uploads/
Nazwy plików zapisywanych na serwerze .$id.$_FILES['Plik']['name']

Jak zmodyfikować ten kod zeby sprzęrzyć te dane ?
  1. <?php
  2. // definicja funkcji robiącej miniaturę zdjęcia
  3. function resizeImage($source, $max_x, $max_y, $save_image, $jpeg_quality)
  4. {
  5.  /*
  6. * source - obrazek jpeg
  7. * max_x - maksymalna szerokosc pomniejszonego obrazka
  8. * max_y - maksymalna dlugosc pomniejszonego obrazka
  9. * save_image - nazwa pliku do ktorego zostanie zapisany nowy obrazek
  10. * jpeg_quality - jakosc powstalego obrazu jpeg - jezeli bedzie inny to argument jest nie wazny (domyslnie 100)
  11. */
  12.  
  13. if(exif_imagetype($source) == IMAGETYPE_JPEG)
  14. {
  15.  $img_src = imagecreatefromjpeg($source);
  16. }
  17. elseif(exif_imagetype($source) == IMAGETYPE_GIF)
  18. {
  19.  $img_src = imagecreatefromgif($source);
  20. }
  21. elseif(exif_imagetype($source) == IMAGETYPE_PNG)
  22. {
  23.  $img_src = imagecreatefrompng($source);
  24. }
  25. else
  26. {
  27.  die('Wrong filetype! Accepted images: JPG/JPEG, GIF, PNG');
  28. }
  29.  
  30.  $image_x = imagesx($img_src);
  31.  $image_y = imagesy($img_src);
  32.  if($image_x > $image_y) // Landscape
  33.  {
  34. $ratio_x = ($image_x > $max_x) ? $max_x/$image_x : 1;
  35. $ratio_y = $ratio_x;
  36. $move = 'y';
  37.  }
  38.  else // Portrait
  39.  {
  40. $ratio_y = ($image_y > $max_y) ? $max_y/$image_y : 1;
  41. $ratio_x = $ratio_y;
  42. $move = 'x';
  43.  }
  44. $new_x = $image_x*$ratio_x;
  45. $new_y = $image_y*$ratio_y;
  46.  
  47. $move_x = ($move == "x") ? ($max_x-$new_x)/: 0;
  48. $move_y = ($move == "y") ? ($max_y-$new_y)/: 0;
  49. $new_img = imagecreatetruecolor($max_x, $max_y); //tworzy obrazek o identyfikatorze $new_img i rozmiarach $max_x i $max_y
  50. $background = imagecolorallocate($new_img, 255, 255, 255); //przypisuje kolor czarny (255, 255, 255) do obrazka $new_img
  51. imagefill($new_img, 0, 0, $background); //wypełnia obrazek $new_image przypisanym kolorem $background
  52. imagecopyresampled($new_img, $img_src, $move_x, $move_y, 0, 0, $new_x, $new_y, $image_x, $image_y);
  53.  
  54. if(exif_imagetype($save_image) == IMAGETYPE_JPEG) //tworzy zmniejszony obrazek $save_image w zależności od typu pliku
  55. {
  56.  imagejpeg($new_img, $save_image, $jpeg_quality);
  57. }
  58. elseif(exif_imagetype($save_image) == IMAGETYPE_GIF)
  59. {
  60.  imagegif($new_img, $save_image);
  61. }
  62. elseif(exif_imagetype($save_image) == IMAGETYPE_PNG)
  63. {
  64.  imagepng($new_img, $save_image);
  65. }
  66.  
  67.  echo '<img src="'.$save_image.'" border="1">'; //wyświetla zmniejszony obrazek $save_image
  68. }
  69. // koniec definicji funkcji robiącej miniaturę
  70. ?>
kornel-php
Katalog i nazwa pliku to zmienna $source

Czyli na początku skryptu:

  1. <?php
  2. $source = '../portal2006/uploads/'.$id.$_FILES['Plik']['name'];
  3. ?>



Chyba coś takiego winksmiley.jpg
grattz
Ja jeszcze wykombinowałem coś takiego. Nie wyskakuje błąd w skrypcie ale miniaturka sie nie tworzy sad.gif

  1. <?php
  2. $source = '../portal2006/uploads/'.$id.$_FILES['Plik']['name'];
  3.  $max_x = "60px";
  4.  $max_y = "60px";
  5.  $save_image = "miniaturka" .$id.$_FILES['Plik']['name'];
  6. ?>
dr_bonzo
Prosze uzupelnic tytul topika o odpowiedni tag ( szczegoly )
grattz
Mógłby mnie ktoś nakierować jak rozwiązać ten problem ?

Dodam jeszcze ze ten kod robiący miniaturke wklejam po linice:
  1. <?php
  2. if (move_uploaded_file($_FILES['Plik']['tmp_name'],'../portal2006/uploads/'.$id.$_FILES['Plik']['name']))
  3.  {
  4.  
  5.  info('Twój baner został zapisany.','ok');
  6.  
  7. >>>>>>>TUTAJ<<<<<<<<
  8.  
  9.  }
  10. ?>


Może to jest błędem. Dziwi mnie to ze skrypt mimo ze nie działa nie wywala żadnych błedów.
kornel-php
W instrukcji warunkowej (if) w pewnym miejscu masz przecinek, a chyba powinna być kropka...

Tyle, że w tedy powinno wywalić jakiś błąd składni...

Spróbuj, może się uda...
sagittariuspl
Cytat
info('Twój baner został zapisany.','ok');
powinno być za wykonanym kodem (najpierw wykonanie kodu, a potem informacja o sukcesie - choć zawsze będzie pokazywać pozytywny wynik, bo jest to źle napisane...)

Cytat
function resizeImage($source, $max_x, $max_y, $save_image, $jpeg_quality)
niestety nie widzę informacji o parametrze $jpeg_quality... może zadeklaruj jąkąś wartoś dla tej zmiennej
grattz
Cytat(kornel-php @ 25.01.2007, 18:11:40 ) *
W instrukcji warunkowej (if) w pewnym miejscu masz przecinek, a chyba powinna być kropka...

Musi być przecinek :] Jak daje kropkę to wywala bład Rkingsmiley.png
Poza tym to dotyczy uploadowania pliku - a to działa bez zarzutu. Dopiero robienie z niego miniatury nic nie daje.
Cytat
powinno być za wykonanym kodem (najpierw wykonanie kodu, a potem informacja o sukcesie - choć zawsze będzie pokazywać pozytywny wynik, bo jest to źle napisane...)
Znaczy to dotyczy uploadowania pliku i to wykonuje sie dobrze. Dopiero jak juz plik jest na serwerze to chce go pomniejszyć.I dlatego ten kod jest po tej informacji.

Cytat
niestety nie widzę informacji o parametrze $jpeg_quality... może zadeklaruj jąkąś wartoś dla tej zmiennej

Nie pisalem bo w skrypcie jest napisane:
  1. <?php
  2. * jpeg_quality - jakosc powstalego obrazu jpeg - jezeli bedzie inny to argument jest nie wazny (domyslnie 100)
  3. ?>

Ale jeszcze spróbuje coś przypisać. Tylko jeszcze nie wiem co i jak laugh.gif
sagittariuspl
właśnie tej linijki nie widziałem... sad.gif
jpeg_quality okreslasz w procentach - to jest stopien kompresji jpg'a (im mniej tym gorsza jakość)
grattz
Cytat(sagittariuspl @ 25.01.2007, 18:50:32 ) *
właśnie tej linijki nie widziałem... sad.gif
jpeg_quality okreslasz w procentach - to jest stopien kompresji jpg'a (im mniej tym gorsza jakość)

Jednak to nie to sadsmiley02.gif Przypisałem wartośc i dalej to samo. Nie wywala błędów i nie robi miniaturki.
sagittariuspl
może po prostu nie pobiera nazwy pliku odpowiednio?...
wywołaj funkcję ze stałymi wartościami, np. resizeImage('nazwapliku.jpg', 60, 60, 'zapisy.jpg', 100) oczywiście podając poprawne dane nazw pliku.

pisząc posta zauważyłem jeszcze coś ciekawego: może zamiast "60px" wpisz po prostu 60? tzn. zamiast wartości tekstowej - liczbę
grattz
Cytat(sagittariuspl @ 25.01.2007, 18:59:04 ) *
może po prostu nie pobiera nazwy pliku odpowiednio?...
wywołaj funkcję ze stałymi wartościami, np. resizeImage('nazwapliku.jpg', 60, 60, 'zapisy.jpg', 100) oczywiście podając poprawne dane nazw pliku.

pisząc posta zauważyłem jeszcze coś ciekawego: może zamiast "60px" wpisz po prostu 60? tzn. zamiast wartości tekstowej - liczbę

Napisałem tak:
  1. <?php
  2. $source = '../portal2006/uploads/16Sample2.jpg';
  3.  $max_x = "60";
  4.  $max_y = "60";
  5.  $save_image = miniaturka16Sample2.jpg;
  6.  $jpeg_quality = 88;
  7. ?>


Przy czym plik 16Sample2.jpg oczywiście znajdował sie juz w tym katalogu przed wykonaniem funkcji. I mimo to miniaturka sie nie utworzyła.

Myśle myśle i nie wiem co jest aarambo.gif Najgorsze jest to ze nie ma wykazu błędu.
sagittariuspl
a jaki masz ustawiony chmod na plik miniaturka16Sample2.jpg? skoro plik już był (rozumiem, że w poprzednim poście zrobiłeś literówke pisząć, że chodzi o plik 16Sample2.jpg) to go skasuj i spróbój jeszcze raz, a jeżeli nie masz 777 to tak ustaw i spróbuj kolejny raz. i sprawdź jeszcze chmod dla katalogu
grattz
Cytat(sagittariuspl @ 25.01.2007, 19:19:11 ) *
a jaki masz ustawiony chmod na plik miniaturka16Sample2.jpg? skoro plik już był (rozumiem, że w poprzednim poście zrobiłeś literówke pisząć, że chodzi o plik 16Sample2.jpg) to go skasuj i spróbój jeszcze raz, a jeżeli nie masz 777 to tak ustaw i spróbuj kolejny raz. i sprawdź jeszcze chmod dla katalogu

Znaczy według mnie to plik miniaturka16Sample2.jpg ma sie dopiero stworzyć z pliku 16Sample2.jpg
Cos zamotałem ? blink.gif

A co do chmod . Nie wiesz czasem jak to sie sprawdza pod Apache ? Bo ja serwer mam na dysku postawiony.
sagittariuspl
co do pliku to źle przeczytałem... blink.gif
zainteresuj się funkcją chmod w php -> http://www.php.net/manual/pl/function.chmod.php
grattz
Dzięki .Zmieniłem ale nic to nie daje.
Mógłby mi ktoś wkleić/wysłać na PM pełny kod w którym robi miniaturyzacje uploadowanego zdjecia ?

Ja chyba u siebie na kompie nie mam zainstalowanej biblioteki GD.[i]
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.