Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] Tworzeni miniatur.. złe tworzenie
Forum PHP.pl > Forum > Przedszkole
fredzio90
otóż przeglądnełem tutejsze ofrum i natrafiłem się na ciekawą funkcje która tworzy mi miniaturki pliki... otoż mam tak:

Formularz:

  1. <tr>
  2. <td align="right" class="uni_01">Screen: UPLOAD <input class="poll" type="radio" name="itype1" value="upload"></td>
  3. <td>
  4. <input type="file" name="plik1" size="35">
  5. </td>
  6. </tr>
  7. <tr>
  8. <td align="right" class="uni_01">Wymiary</td>
  9. <td><input type="text" name="thumb_x" size="2" value="'.$thumb_x.'"><b>X</b> <input type="text" name="thumb_y" size="2" value="'.$thumb_y.'"><b>Y</b></td>
  10. </tr>
  11. <tr>
  12. <td align="right" class="uni_01">Jakosc</td>
  13. <td><input type="text" name="qual" size="3" value="'.$qual.'"> 0-100</td>
  14. </tr>


Funkcja dodająca rzeczy inne do bazy:

Kod
Globale: $thumb_x, $thumb_y, $plik1, $plik1_name, $qual


i kod wysylajacy na server i tworzący miniature:

  1. <?php
  2. if($itype1=='upload') {
  3.  
  4. move_uploaded_file($plik1, "uploads/gal_mod/normal/".$plik1_name);
  5. chmod("uploads/gal_mod/normal/".$plik1_name, 0777);
  6. $id = mysql_insert_id();
  7. $pliczek="uploads/gal_mod/normal/".$plik1_name;
  8. $pthumb="uploads/gal_mod/mini/tn_".$id.$plik1_name;
  9. resizeImage($pliczek, $thumb_x, $thumb_y, $pthumb, $qual);
  10.  
  11.  
  12.  $query = "UPDATE $thumb_tbl SET norm='$pliczek', thumb='$pthumb' WHERE id='$id'";
  13.  $result = mysql_query($query);
  14.  
  15. }
  16. ?>


i funkcja resizeImage:

  1. <?php
  2. function imgType($name)
  3. {
  4.  if(substr($name, -4, 4) == '.jpg' || substr($name, -4, 4) == 'jpeg')
  5.  {
  6. return "IMAGETYPE_JPEG";
  7.  }
  8.  elseif(substr($name, -4, 4) == '.gif')
  9.  {
  10. return "IMAGETYPE_GIF";
  11.  }
  12.  elseif(substr($name, -4, 4) == '.png')
  13.  {
  14. return "IMAGETYPE_PNG";
  15.  }
  16. }
  17.  
  18. function resizeImage($source, $max_x, $max_y, $save_image, $jpeg_quality = 100)
  19. {
  20.  /*
  21. * source - obrazek jpeg
  22. * max_x - maksymalna szerokosc pomniejszonego obrazka
  23. * max_y - maksymalna dlugosc pomniejszonego obrazka
  24. * save_image - nazwa pliku do ktorego zostanie zapisany nowy obrazek
  25. * jpeg_quality - jakosc powstalego obrazu jpeg - jezeli bedzie inny to argument jest nie wazny (domyslnie 100)
  26. */
  27.  
  28. if(imgType($source) == "IMAGETYPE_JPEG")
  29. {
  30.  $img_src = imagecreatefromjpeg($source);
  31. }
  32. elseif(imgType($source) == "IMAGETYPE_GIF")
  33. {
  34.  $img_src = imagecreatefromgif($source);
  35. }
  36. elseif(imgType($source) == "IMAGETYPE_PNG")
  37. {
  38.  $img_src = imagecreatefrompng($source);
  39. }
  40. else
  41. {
  42.  die('<br>Zły typ plików. Akceptowane: JPG/JPEG, GIF, PNG');
  43. }
  44.  
  45.  $image_x = imagesx($img_src);
  46.  $image_y = imagesy($img_src);
  47.  if($image_x > $image_y) // Landscape
  48.  {
  49. $ratio_x = ($image_x > $max_x) ? $max_x/$image_x : 1;
  50. $ratio_y = $ratio_x;
  51. $move = 'y';
  52.  }
  53.  else // Portrait
  54.  {
  55. $ratio_y = ($image_y > $max_y) ? $max_y/$image_y : 1;
  56. $ratio_x = $ratio_y;
  57. $move = 'x';
  58.  }
  59. $new_x = $image_x*$ratio_x;
  60. $new_y = $image_y*$ratio_y;
  61.  
  62. $move_x = ($move == "x") ? ($max_x-$new_x)/: 0;
  63. $move_y = ($move == "y") ? ($max_y-$new_y)/: 0;
  64.  
  65. $new_img = imagecreatetruecolor($max_x, $max_y);
  66. $background = imagecolorallocate($new_img, 255, 255, 255);
  67. imagefill($new_img, 0, 0, $background);
  68. imagecopyresampled($new_img, $img_src, $move_x, $move_y, 0, 0, $new_x, $new_y, $image_x, $image_y);
  69.  
  70. if(imgType($save_image) == "IMAGETYPE_JPEG")
  71. {
  72.  imagejpeg($new_img, $save_image, 100);
  73. }
  74. elseif(imgType($save_image) == "IMAGETYPE_GIF")
  75. {
  76.  imagegif($new_img, $save_image);
  77. }
  78. elseif(imgType($save_image) == "IMAGETYPE_PNG")
  79. {
  80.  imagepng($new_img, $save_image);
  81. }
  82.  
  83. }
  84. ?>



i mój problem polega na tym że jak podam jakiś plik wysle wszysko ok ale miniature tworzy z 2 paskami...

proszę, wysyłam taki obrazek:

http://img476.imageshack.us/img476/4362/je...carthy14ef5.jpg

ustawiam rozmiary na 300x300 i "wychodzi" mi tkaie coś: ( u góry i na dole obrazka jest pasek biały )

http://img391.imageshack.us/my.php?image=t...carthy14vk0.jpg

i niestety nei wiem jak to można naprawić questionmark.gif


-------------------------
na forum jest więcej BBCode
niż tylko [ code ], tym razem poprawiłem
na przyszłość proszę pamiętać
~Cienki1980

------------------------

fredzio90: nie znałem ze znacznik html nie dodaje tych \ przed ".. bede wiedział na przyszłość
Kicok
Dodaje białe paski bo tak ten skrypt został napisany (i to nie jest żaden błąd). Zapobiega to "rozciąganiu się" obrazów podczas gdy stosunek wysokości do szerokości oryginału jest inny, niż stosunek wysokości do szerokości miniaturki.

Jeśli ci się to nie podoba to przemyśl wszystkie obliczenia matematyczne, które tam są wykonywane i przerób sobie skrypt tak, żeby jednak te miniaturki "rozciągał".
Ewentualnie można zamiast białego koloru dać przezroczysty.
fredzio90
rozumiem że trzeba mienić ta linijke:

  1. <?php
  2. $background = imagecolorallocate($new_img, 255, 255, 255);
  3. ?>


255 - kolor biały.. a jak można mienić na transparent questionmark.gif
zrobiłem tak i działa o tako:

  1. <?php
  2. imageColorTransparent($new_img, $background);
  3. ?>
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.