Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Problem ze skryptem tworzącym miniaturki zdjęć.
Forum PHP.pl > Forum > Przedszkole
komornik
Witam, mam nadzieję, że w dobrym dziale umieszczam swoje pytanie. Mam taki problem: Napisałem po części trochę przerobiłem skrypt dodający zdjęcie (powiedzmy do galerii) i tworzący miniaturkę. Wszystko byłoby dobrze gdyby nie to, że skrypt tworzy miniaturki w okrutnie złej jakości (pikseoloza). Nie mam pojęcia gdzie popełniłem błąd.. przeszukałem manuala i nic konstruktywnego nie znalazłem dlatego zwracam się z prośbą do was o jakieś sugestię ew pomoc.

Poniżej mój skrypt:

  1.  
  2. function add_photo() {
  3.  
  4. if(empty($_POST['zdj_opis']) ) {
  5. echo '<div class="error"><img src="images/ico/del.png" alt="Błąd!" > Proszę podać opis zdjęcia. </div>';
  6. return;
  7. }
  8.  
  9. if(empty($_FILES['zdjecie']['name'])) {
  10. echo '<div class="error"><img src="images/ico/del.png" alt="Błąd!" > Proszę dodać zdjęcie. </div>';
  11. return;
  12. }
  13. else {
  14.  
  15. //Rozmiar miniaturki
  16. define('MIN_X', 155);
  17. define('MIN_Y', 100);
  18.  
  19. //Maksymalny format zdjęcia
  20. define('MAX_X', 1024);
  21. define('MAX_Y', 768);
  22.  
  23. $nazwa = 'images/galeria/'.$_FILES['zdjecie']['name'];
  24. while(file_exists($nazwa)) $nazwa = 'images/galeria/'.substr(md5(microtime()), 0, 5).'_'.$_FILES['zdjecie']['name'];
  25.  
  26. if ($_FILES['zdjecie']['type']=='image/jpeg') {
  27. $staryObrazek = imagecreatefromjpeg($_FILES['zdjecie']['tmp_name']);
  28. }
  29. if ($_FILES['zdjecie']['type']=='image/png') {
  30. $staryObrazek = imagecreatefrompng($_FILES['zdjecie']['tmp_name']);
  31. }
  32. if ($_FILES['zdjecie']['type']=='image/gif') {
  33. $staryObrazek = imagecreatefromgif($_FILES['zdjecie']['tmp_name']);
  34. }
  35. list($width, $height) = getimagesize($_FILES['zdjecie']['tmp_name']);
  36. $wymiar = $height/$width;
  37. $widthN = $width;
  38. $heightN = $height;
  39. if ($width>$height) {
  40. if ($width>MAX_X) {
  41. $widthN = MAX_X;
  42. $heightN = $widthN*$wymiar;
  43. }
  44. } else {
  45. if ($height>MAX_Y) {
  46. $heightN = MAX_Y;
  47. $widthN = $heightN/$wymiar;
  48. }
  49. }
  50. $nowyObrazek = imagecreatetruecolor($widthN, $heightN);
  51. imagecopyresized($nowyObrazek, $staryObrazek, 0, 0, 0, 0, $widthN, $heightN, $width, $height);
  52. if (!@imagejpeg($nowyObrazek, $nazwa)) {
  53. imagedestroy($nowyObrazek);
  54. imagedestroy($staryObrazek);
  55. echo '<div class="error">Nie można zapisać zdjęcia</div>';
  56. return;
  57. }
  58. imagedestroy($nowyObrazek);
  59.  
  60. // miniaturka
  61. if ($width>$height) {
  62. $widthN = MIN_X;
  63. $heightN = $widthN*$wymiar;
  64. } else {
  65. $heightN = MIN_Y;
  66. $widthN = $heightN/$wymiar;
  67. }
  68. $miniaturka = imagecreatetruecolor($widthN, $heightN);
  69. imagecopyresized($miniaturka, $staryObrazek, 0, 0, 0, 0, $widthN, $heightN, $width, $height);
  70. if (!@imagejpeg($miniaturka, 'images/galeria/mini_'.basename($nazwa))) {
  71. imagedestroy($miniaturka);
  72. imagedestroy($staryObrazek);
  73. echo '<div class="error">Nie można zapisać miniatruki zdjęcia</div>';
  74. return;
  75. }
  76. imagedestroy($miniaturka);
  77. imagedestroy($staryObrazek);
  78.  
  79.  
  80. $zdj_plik = basename($nazwa);
  81. $album_id = strip_tags(htmlspecialchars($_POST["album_id"]));
  82. $zdj_opis = strip_tags(htmlspecialchars($_POST["zdj_opis"]));
  83.  
  84. $lacz = lacz_bd();
  85. $wynik = $lacz->query("INSERT INTO galeria VALUES ('', '$album_id', '$zdj_plik', CURRENT_TIMESTAMP(0), '$zdj_opis')");
  86. if (!$wynik)
  87. throw new Exception('<div class="error"><img src="images/ico/del.png" alt="Błąd!" > Nie dodano zdjęcia. </div>');
  88. else
  89. echo '<div class="ok"><img src="images/ico/ok.png" alt="OK!" > Pomyślnie dodano nowe zdjęcie. </div><br />';
  90. }
  91. }
thek
Nie używaj imagecopyresized, tylko imagecopyresampled, poza tym przy zapisie zwróć uwagę na jeden z parametrów imagejpeg, który określa stopień kompresji.
komornik
aaaaaaaaaaaa jak mogłem to przegapić! dziękuję za sugestię i pomoc! smile.gif pozdrawiam,

temat do zamknięcia
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.