Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Generator miniaturek nie generuje poprawnie PNG
Forum PHP.pl > Forum > Przedszkole
northwest
Witam serdecznie,
Mam taki skrypt do generowania miniaturek plików graficznych:
  1. function upload_obrazka_miniaturka($file, $filetemp, $path, $newname, $wymiar) {
  2. if ($file != "") {
  3. if ($filetemp != "") {
  4. if (is_uploaded_file($filetemp)) {
  5. move_uploaded_file($filetemp, $path . "/" . $newname);
  6.  
  7. //////////////////////////////////
  8. if (preg_match("/php/", $file) || preg_match("/Php/", $file) || preg_match("/PHp/", $file) || preg_match("/PHP/", $file) || preg_match("/pHP/", $file) || preg_match("/phP/", $file) || preg_match("/pHp/", $file)) {
  9. unlink($path . "/" . $newname);
  10. return "BŁĘDNY PLIK - PROSZĘ SPRÓBOWAĆ PONOWNIE!!";
  11. exit();
  12. }
  13. $sizette = getimagesize($path . "/" . $newname);
  14. if($sizette['mime'] != "image/jpeg" && $sizette['mime'] != "image/jpg" && $sizette['mime'] != "image/png" && $sizette['mime'] != "image/png"){
  15. unlink($path . "/" . $newname);
  16. return "BŁĘDNY PLIK - PROSZĘ SPRÓBOWAĆ PONOWNIE!!";
  17. exit();
  18. }
  19. $rozm = filesize($path . "/" . $newname);
  20. if($rozm > 2500000){
  21. unlink($path . "/" . $newname);
  22. return "PLIK ZA DUŻY- PROSZĘ SPRÓBOWAĆ PONOWNIE!!";
  23. exit();
  24. }
  25. //////////////////////////////////
  26.  
  27. $file = strtolower($file);
  28. $nazwaobrazka = explode('.', $newname);
  29.  
  30. //Przypisujemy do zmiennej $img_path ścieżke do obrazka
  31. $img_path = $path . "/" . $newname;
  32.  
  33. //Tworzymy scieżkę do miniaturki
  34. $thumb_path = $path . "/mini_" . $nazwaobrazka['0'] . '.' . $nazwaobrazka['1'];
  35.  
  36. //ustalamy maksymalny dopuszczalny rozmiar miniatury
  37. $max_width = $max_height = $wymiar;
  38.  
  39. //Sprawdzamy czy obraz istnieje
  40. //if (!file_exists($img_path))
  41. // die('Plik obrazu nie istnieje');
  42. //Pobieramy informacjie o obrazie
  43. $img_attr = getimagesize($img_path);
  44.  
  45. //Sprawdzamy czy obraz jest wiekszy na szerokość czy na wysokość
  46. // i zmniejszamy odpowiednio rozmiar
  47. // $img_attr[0] - szerokosc, $img_attr[1] - wysokość
  48. if ($img_attr[0] > $img_attr[1]) {
  49. $scale = $img_attr[0] / $max_width;
  50. } else {
  51. $scale = $img_attr[1] / $max_height;
  52. }
  53.  
  54. //Tworzymy obraz miniaturki
  55. $w = floor($img_attr[0] / $scale);
  56. $h = floor($img_attr[1] / $scale);
  57. $thumb = imagecreatetruecolor($w, $h);
  58.  
  59.  
  60. if($nazwaobrazka['1'] == "jpg" || $nazwaobrazka['1'] == "jpeg"){
  61. //Kopiujemy obraz pomniejszajac go,
  62. imagecopyresampled($thumb, imagecreatefromjpeg($img_path), 0, 0, 0, 0, $w, $h, $img_attr[0], $img_attr[1]);
  63.  
  64. //Zapisujemy do pliku (jakość 85)
  65. imagejpeg($thumb, $thumb_path, 85);
  66. }
  67. /////////////////
  68.  
  69. if($nazwaobrazka['1'] == "png"){
  70. //Kopiujemy obraz pomniejszajac go,
  71. imagecopyresampled($thumb, imagecreatefrompng($img_path), 0, 0, 0, 0, $w, $h, $img_attr[0], $img_attr[1]);
  72.  
  73. //Zapisujemy do pliku (jakość 85)
  74. imagepng($thumb, $thumb_path, 85);
  75. }
  76.  
  77.  
  78. $nazwaobrazka = explode('.', $newname);
  79.  
  80. //Przypisujemy do zmiennej $img_path ścieżke do obrazka
  81. $img_path = $path . "/" . $newname;
  82.  
  83. //Tworzymy scieżkę do miniaturki
  84. $thumb_path = $path . "" . $nazwaobrazka['0'] . '.' . $nazwaobrazka['1'];
  85.  
  86. //ustalamy maksymalny dopuszczalny rozmiar miniatury
  87. $max_width = $max_height = 800;
  88.  
  89. //Sprawdzamy czy obraz istnieje
  90. //if (!file_exists($img_path))
  91. // die('Plik obrazu nie istnieje');
  92. //Pobieramy informacjie o obrazie
  93. $img_attr = getimagesize($img_path);
  94.  
  95. //Sprawdzamy czy obraz jest wiekszy na szerokość czy na wysokość
  96. // i zmniejszamy odpowiednio rozmiar
  97. // $img_attr[0] - szerokosc, $img_attr[1] - wysokość
  98. if ($img_attr[0] > $img_attr[1]) {
  99. $scale = $img_attr[0] / $max_width;
  100. } else {
  101. $scale = $img_attr[1] / $max_height;
  102. }
  103.  
  104. //Tworzymy obraz miniaturki
  105. $w = floor($img_attr[0] / $scale);
  106. $h = floor($img_attr[1] / $scale);
  107. $thumb = imagecreatetruecolor($w, $h);
  108.  
  109.  
  110.  
  111. if($nazwaobrazka['1'] == "jpg" || $nazwaobrazka['1'] == "jpeg"){
  112. //Kopiujemy obraz pomniejszajac go,
  113. imagecopyresampled($thumb, imagecreatefromjpeg($img_path), 0, 0, 0, 0, $w, $h, $img_attr[0], $img_attr[1]);
  114.  
  115. //Zapisujemy do pliku (jakość 85)
  116. imagejpeg($thumb, $thumb_path, 85);
  117. }
  118.  
  119.  
  120.  
  121. if($nazwaobrazka['1'] == "png"){
  122.  
  123. //Kopiujemy obraz pomniejszajac go,
  124. imagecopyresampled($thumb, imagecreatefrompng($img_path), 0, 0, 0, 0, $w, $h, $img_attr[0], $img_attr[1]);
  125.  
  126. //Zapisujemy do pliku (jakość 85)
  127. imagepng($thumb, $thumb_path, 85);
  128.  
  129. }
  130.  
  131. /////////////////
  132.  
  133. return $img_path;
  134. } else {
  135. echo"<center><b>Nie można dodać pliku!!</b> Błąd: " . $file . " </center> <br/>";
  136. }
  137. }
  138. }
  139. }



Ale nie generuje mi miniaturki.... Wie ktoś może dlaczego?
Pliki jpg generuje poprawnie - problem jest tylko z PNG.


Bardzo proszę o pomoc,
Northwest
trueblue
Dla png stopień kompresji musi zawierać się w zakresie 0-9.
northwest
Dziękuję, poprawiłem skrypt na taki:

  1. function upload_obrazka_miniaturka($file, $filetemp, $path, $newname, $wymiar) {
  2. if ($file != "") {
  3. if ($filetemp != "") {
  4. if (is_uploaded_file($filetemp)) {
  5. move_uploaded_file($filetemp, $path . "/" . $newname);
  6.  
  7. //////////////////////////////////
  8. if (preg_match("/php/", $file) || preg_match("/Php/", $file) || preg_match("/PHp/", $file) || preg_match("/PHP/", $file) || preg_match("/pHP/", $file) || preg_match("/phP/", $file) || preg_match("/pHp/", $file)) {
  9. unlink($path . "/" . $newname);
  10. return "BŁĘDNY PLIK - PROSZĘ SPRÓBOWAĆ PONOWNIE!!";
  11. exit();
  12. }
  13. $sizette = getimagesize($path . "/" . $newname);
  14. if($sizette['mime'] != "image/jpeg" && $sizette['mime'] != "image/jpg" && $sizette['mime'] != "image/png" && $sizette['mime'] != "image/png"){
  15. unlink($path . "/" . $newname);
  16. return "BŁĘDNY PLIK - PROSZĘ SPRÓBOWAĆ PONOWNIE!!";
  17. exit();
  18. }
  19. $rozm = filesize($path . "/" . $newname);
  20. if($rozm > 2500000){
  21. unlink($path . "/" . $newname);
  22. return "PLIK ZA DUŻY- PROSZĘ SPRÓBOWAĆ PONOWNIE!!";
  23. exit();
  24. }
  25. //////////////////////////////////
  26.  
  27. $file = strtolower($file);
  28. $nazwaobrazka = explode('.', $newname);
  29.  
  30. //Przypisujemy do zmiennej $img_path ścieżke do obrazka
  31. $img_path = $path . "/" . $newname;
  32.  
  33. //Tworzymy scieżkę do miniaturki
  34. $thumb_path = $path . "/mini_" . $nazwaobrazka['0'] . '.' . $nazwaobrazka['1'];
  35.  
  36. //ustalamy maksymalny dopuszczalny rozmiar miniatury
  37. $max_width = $max_height = $wymiar;
  38.  
  39. //Sprawdzamy czy obraz istnieje
  40. //if (!file_exists($img_path))
  41. // die('Plik obrazu nie istnieje');
  42. //Pobieramy informacjie o obrazie
  43. $img_attr = getimagesize($img_path);
  44.  
  45. //Sprawdzamy czy obraz jest wiekszy na szerokość czy na wysokość
  46. // i zmniejszamy odpowiednio rozmiar
  47. // $img_attr[0] - szerokosc, $img_attr[1] - wysokość
  48. if ($img_attr[0] > $img_attr[1]) {
  49. $scale = $img_attr[0] / $max_width;
  50. } else {
  51. $scale = $img_attr[1] / $max_height;
  52. }
  53.  
  54. //Tworzymy obraz miniaturki
  55. $w = floor($img_attr[0] / $scale);
  56. $h = floor($img_attr[1] / $scale);
  57. $thumb = imagecreatetruecolor($w, $h);
  58.  
  59.  
  60. if($nazwaobrazka['1'] == "jpg" || $nazwaobrazka['1'] == "jpeg"){
  61. //Kopiujemy obraz pomniejszajac go,
  62. imagecopyresampled($thumb, imagecreatefromjpeg($img_path), 0, 0, 0, 0, $w, $h, $img_attr[0], $img_attr[1]);
  63.  
  64. //Zapisujemy do pliku (jakość 85)
  65. imagejpeg($thumb, $thumb_path, 85);
  66. }
  67. /////////////////
  68.  
  69. if($nazwaobrazka['1'] == "png"){
  70.  
  71. imagesavealpha($thumb, true);
  72. $color = imagecolorallocatealpha($thumb,0x00,0x00,0x00,127);
  73. imagefill($thumb, 0, 0, $color);
  74.  
  75. //Kopiujemy obraz pomniejszajac go,
  76. imagecopyresampled($thumb, imagecreatefrompng($img_path), 0, 0, 0, 0, $w, $h, $img_attr[0], $img_attr[1]);
  77.  
  78. //Zapisujemy do pliku (jakość 85)
  79. imagepng($thumb, $thumb_path, 9);
  80. }
  81.  
  82.  
  83. $nazwaobrazka = explode('.', $newname);
  84.  
  85. //Przypisujemy do zmiennej $img_path ścieżke do obrazka
  86. $img_path = $path . "/" . $newname;
  87.  
  88. //Tworzymy scieżkę do miniaturki
  89. $thumb_path = $path . "" . $nazwaobrazka['0'] . '.' . $nazwaobrazka['1'];
  90.  
  91. //ustalamy maksymalny dopuszczalny rozmiar miniatury
  92. $max_width = $max_height = 800;
  93.  
  94. //Sprawdzamy czy obraz istnieje
  95. //if (!file_exists($img_path))
  96. // die('Plik obrazu nie istnieje');
  97. //Pobieramy informacjie o obrazie
  98. $img_attr = getimagesize($img_path);
  99.  
  100. //Sprawdzamy czy obraz jest wiekszy na szerokość czy na wysokość
  101. // i zmniejszamy odpowiednio rozmiar
  102. // $img_attr[0] - szerokosc, $img_attr[1] - wysokość
  103. if ($img_attr[0] > $img_attr[1]) {
  104. $scale = $img_attr[0] / $max_width;
  105. } else {
  106. $scale = $img_attr[1] / $max_height;
  107. }
  108.  
  109. //Tworzymy obraz miniaturki
  110. $w = floor($img_attr[0] / $scale);
  111. $h = floor($img_attr[1] / $scale);
  112. $thumb = imagecreatetruecolor($w, $h);
  113.  
  114.  
  115.  
  116. if($nazwaobrazka['1'] == "jpg" || $nazwaobrazka['1'] == "jpeg"){
  117. //Kopiujemy obraz pomniejszajac go,
  118. imagecopyresampled($thumb, imagecreatefromjpeg($img_path), 0, 0, 0, 0, $w, $h, $img_attr[0], $img_attr[1]);
  119.  
  120. //Zapisujemy do pliku (jakość 85)
  121. imagejpeg($thumb, $thumb_path, 85);
  122. }
  123.  
  124.  
  125.  
  126. if($nazwaobrazka['1'] == "png"){
  127.  
  128.  
  129. imagesavealpha($thumb, true);
  130. $color = imagecolorallocatealpha($thumb,0x00,0x00,0x00,127);
  131. imagefill($thumb, 0, 0, $color);
  132.  
  133. //Kopiujemy obraz pomniejszajac go,
  134. imagecopyresampled($thumb, imagecreatefrompng($img_path), 0, 0, 0, 0, $w, $h, $img_attr[0], $img_attr[1]);
  135.  
  136. //Zapisujemy do pliku (jakość 85)
  137. imagepng($thumb, $thumb_path, 9);
  138.  
  139. }
  140.  
  141. /////////////////
  142. echo $img_path;
  143. return $img_path;
  144. } else {
  145. echo"<center><b>Nie można dodać pliku!!</b> Błąd: " . $file . " </center> <br/>";
  146. }
  147. }
  148. }
  149. }



I zamiast przeźroczystości/ normalnych PNG generuje mi całe czarne obrazki sad.gif
trueblue
Spróbuj tak:
  1. imagealphablending($thumb,false);
  2. $color=imagecolorallocatealpha($thumb,0,0,0,127);
  3. imagefill($thumb,0,0,$color);
  4. imagesavealpha($thumb,true);
  5.  
  6. //Kopiujemy obraz pomniejszajac go,
  7. imagecopyresampled($t........
northwest
działa, dziękuję smile.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.