Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Dynamiczne tworzenie miniatur
Forum PHP.pl > Forum > Przedszkole
Hubi.pl
Witam,
w jaki sposób zrobic tworzenie miniaturek np. 40x50px odrazu po wybraniu pliku w FileField??

coś podobnego jest np. podczas ładowania obrazków w allegro winksmiley.jpg

Z góry dzieki za pomoc winksmiley.jpg

Pozdrawiam
Pigula
moze to Ci pomoze
Hubi.pl
całkiem fajna funkcja i bardzo przejrzysta winksmiley.jpg
tylko jak ja teraz wykorzystac, aby odrazu po wybraniu pliku nastapiła konwersja do miniaturki, a reszta formularza pozostała na miejscu?

pzdr.
tiraeth
  1. <?php
  2. function resizeImage($source, $max_x, $max_y, $save_image, $jpeg_quality = 100)
  3. {
  4.  /*
  5. * source - obrazek jpeg
  6. * max_x - maksymalna szerokosc pomniejszonego obrazka
  7. * max_y - maksymalna dlugosc pomniejszonego obrazka
  8. * save_image - nazwa pliku do ktorego zostanie zapisany nowy obrazek
  9. * jpeg_quality - jakosc powstalego obrazu jpeg - jezeli bedzie inny to argument jest nie wazny (domyslnie 100)
  10. */
  11.  
  12. if(exif_imagetype($source) == IMAGETYPE_JPEG)
  13. {
  14.  $img_src = imagecreatefromjpeg($source);
  15. }
  16. elseif(exif_imagetype($source) == IMAGETYPE_GIF)
  17. {
  18.  $img_src = imagecreatefromgif($source);
  19. }
  20. elseif(exif_imagetype($source) == IMAGETYPE_PNG)
  21. {
  22.  $img_src = imagecreatefrompng($source);
  23. }
  24. else
  25. {
  26.  die('Wrong filetype! Accepted images: JPG/JPEG, GIF, PNG');
  27. }
  28.  
  29.  $image_x = imagesx($img_src);
  30.  $image_y = imagesy($img_src);
  31.  if($image_x > $image_y) // Landscape
  32.  {
  33. $ratio_x = ($image_x > $max_x) ? $max_x/$image_x : 1;
  34. $ratio_y = $ratio_x;
  35. $move = 'y';
  36.  }
  37.  else // Portrait
  38.  {
  39. $ratio_y = ($image_y > $max_y) ? $max_y/$image_y : 1;
  40. $ratio_x = $ratio_y;
  41. $move = 'x';
  42.  }
  43. $new_x = $image_x*$ratio_x;
  44. $new_y = $image_y*$ratio_y;
  45.  
  46. $move_x = ($move == &#092;"x\") ? ($max_x-$new_x)/2 : 0;
  47. $move_y = ($move == &#092;"y\") ? ($max_y-$new_y)/2 : 0;
  48.  
  49. $new_img = imagecreatetruecolor($max_x, $max_y);
  50. $background = imagecolorallocate($new_img, 255, 255, 255);
  51. imagefill($new_img, 0, 0, $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)
  55. {
  56.  imagejpeg($new_img, $save_image, 100);
  57.  return true;
  58. }
  59. elseif(exif_imagetype($save_image) == IMAGETYPE_GIF)
  60. {
  61.  imagegif($new_img, $save_image);
  62.  return true;
  63. }
  64. elseif(exif_imagetype($save_image) == IMAGETYPE_PNG)
  65. {
  66.  imagepng($new_img, $save_image);
  67.  return true;
  68. }
  69. else
  70. {
  71.  return false;
  72. }
  73. }
  74. ?>
  75.  
  76. # Wykorzystanie
  77.  
  78. if(resizeImage($_FILES['obrazek']['tmp_name'], MAX_WYMIAR_X, MAX_WYMIAR_Y, $_FILES['obrazek']['name'], JAKOSC_JPEG))
  79. {
  80.  # Pomniejszono obrazek
  81. }
  82. else
  83. {
  84.  # Nie pomniejszono obrazka
  85. }

Teraz funkcja zwraca TRUE lub FALSE w zależności od tego czy obrazek został pomniejszony.
Hubi.pl
hmm....
dodałęm funkcje do pliku function.php
a w skrypcie z dodawaniem dopisałem:

  1. <?if(resizeImage($_FILES['obrazek']['tmp_name'], 40, 50, $_FILES['obrazek']['name'], 100))
  2. {
  3.  echo (&#092;"obrazek gotowy\");# Pomniejszono obrazek
  4. }
  5. else
  6. {
  7.  echo (&#092;"obrazek <b>NIE</b> gotowy\");# Nie pomniejszono obrazka
  8. }
  9. ?>


stworzyłem browsera:
  1. <input name="obrazek" type="file" id="obrazek">


i wyrzuca taki błąd:
Cytat
Fatal error: Call to undefined function exif_imagetype() in \exp\function.php on line 26


linia 26 to:
  1. <? if(exif_imagetype($source) == IMAGETYPE_JPEG)
  2. {
  3.  $img_src = imagecreatefromjpeg($source);
  4. }?>


Co jest źle zrobione? jak to naprawić? sadsmiley02.gif
tiraeth
W konfiguracji php musisz ustawić exif--enabled czy cos takiego... napisane jest w tamtym temacie (w tym co podał Pigula).
Hubi.pl
w php.ini mam tylko:
Cytat
[exif]
; Exif UNICODE user comments are handled as UCS-2BE/UCS-2LE and JIS as JIS.
; With mbstring support this will automatically be converted into the encoding
; given by corresponding encode setting. When empty mbstring.internal_encoding
; is used. For the decode settings you can distinguish between motorola and
; intel byte order. A decode setting cannot be empty.
;exif.encode_unicode = ISO-8859-15
;exif.decode_unicode_motorola = UCS-2BE
;exif.decode_unicode_intel    = UCS-2LE
;exif.encode_jis =
;exif.decode_jis_motorola = JIS
;exif.decode_jis_intel    = JIS

i tutaj dopisac enable czy jak?tongue.gif

próbowąłem równiez z ta druga fukcja, która exifa nie wymaga ale wtedy cały czas zwraca:
Cytat
Wrong filetype! Accepted images: JPG/JPEG, GIF, PNG


What's wrong sadsmiley02.gif questionmark.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.