Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Dziwna jakość zdjęcia po zmniejszeniu
Forum PHP.pl > Forum > Przedszkole
trifek
Witam serdecznie,
Mam takie zdjęcie: http://serwer1356363.home.pl/pub/a.jpg
Po zmniejszeniu w PHP wychodzi mi coś takiego: http://serwer1356363.home.pl/pub/38603bckl...y4058618838.jpg

Wie ktoś może dlaczego kanapa "wyblakła"?:/
ostrylg
A jakiej biblioteki używasz?
trifek
Używam takiej funkcji:
  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ę wybrać inny";
  11. exit();
  12. }
  13. $sizette = getimagesize($path . "/" . $newname);
  14. if ($sizette['mime'] != "image/jpeg" && $sizette['mime'] != "image/jpg" && $sizette['mime'] != "image/png") {
  15. unlink($path . "/" . $newname);
  16. return "Błędny plik - Proszę wybrać inny";
  17. exit();
  18. }
  19. $rozm = filesize($path . "/" . $newname);
  20. if ($rozm > 500000000) {
  21. unlink($path . "/" . $newname);
  22. return "Plik za duży- Proszę wybrać inny";
  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. //Kopiujemy obraz pomniejszajac go,
  60. imagecopyresampled($thumb, imagecreatefromjpeg($img_path), 0, 0, 0, 0, $w, $h, $img_attr[0], $img_attr[1]);
  61.  
  62. if($nazwaobrazka['1'] == "jpg" || $nazwaobrazka['1'] == "jpeg"){
  63. //Kopiujemy obraz pomniejszajac go,
  64. imagecopyresampled($thumb, imagecreatefromjpeg($img_path), 0, 0, 0, 0, $w, $h, $img_attr[0], $img_attr[1]);
  65.  
  66. //Zapisujemy do pliku (jakość 100)
  67. imagejpeg($thumb, $thumb_path, 100);
  68. }
  69.  
  70. if($nazwaobrazka['1'] == "png"){
  71.  
  72. imagealphablending($thumb,false);
  73. $color=imagecolorallocatealpha($thumb,0,0,0,127);
  74. imagefill($thumb,0,0,$color);
  75. imagesavealpha($thumb,true);
  76.  
  77. //Kopiujemy obraz pomniejszajac go,
  78. imagecopyresampled($thumb, imagecreatefrompng($img_path), 0, 0, 0, 0, $w, $h, $img_attr[0], $img_attr[1]);
  79.  
  80. //Zapisujemy do pliku (jakość 100)
  81. imagepng($thumb, $thumb_path);
  82. }
  83.  
  84. /////////////////
  85. $nazwaobrazka = explode('.', $newname);
  86.  
  87. //Przypisujemy do zmiennej $img_path ścieżke do obrazka
  88. $img_path = $path . "/" . $newname;
  89.  
  90. //Tworzymy scieżkę do miniaturki
  91. $thumb_path = $path . "" . $nazwaobrazka['0'] . '.' . $nazwaobrazka['1'];
  92.  
  93. //ustalamy maksymalny dopuszczalny rozmiar miniatury
  94. $max_width = $max_height = 800;
  95.  
  96. //Sprawdzamy czy obraz istnieje
  97. //if (!file_exists($img_path))
  98. // die('Plik obrazu nie istnieje');
  99. //Pobieramy informacjie o obrazie
  100. $img_attr = getimagesize($img_path);
  101.  
  102. //Sprawdzamy czy obraz jest wiekszy na szerokość czy na wysokość
  103. // i zmniejszamy odpowiednio rozmiar
  104. // $img_attr[0] - szerokosc, $img_attr[1] - wysokość
  105. if ($img_attr[0] > $img_attr[1]) {
  106. $scale = $img_attr[0] / $max_width;
  107. } else {
  108. $scale = $img_attr[1] / $max_height;
  109. }
  110.  
  111. //Tworzymy obraz miniaturki
  112. $w = floor($img_attr[0] / $scale);
  113. $h = floor($img_attr[1] / $scale);
  114. $thumb = imagecreatetruecolor($w, $h);
  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ść 100)
  121. imagejpeg($thumb, $thumb_path, 100);
  122. }
  123.  
  124.  
  125.  
  126. if($nazwaobrazka['1'] == "png"){
  127.  
  128.  
  129. imagealphablending($thumb,false);
  130. $color=imagecolorallocatealpha($thumb,0,0,0,127);
  131. imagefill($thumb,0,0,$color);
  132. imagesavealpha($thumb,true);
  133.  
  134. //Kopiujemy obraz pomniejszajac go,
  135. imagecopyresampled($thumb, imagecreatefrompng($img_path), 0, 0, 0, 0, $w, $h, $img_attr[0], $img_attr[1]);
  136.  
  137. //Zapisujemy do pliku (jakość 100)
  138. imagepng($thumb, $thumb_path);
  139.  
  140. }
  141.  
  142. /////////////////
  143.  
  144. return $img_path;
  145. } else {
  146. echo"<center><b>Nie można dodać pliku!!</b> Błąd: " . $file . " </center> <br/>";
  147. }
  148. }
  149. }
  150. }
trueblue
Prawdopodobnie zdjęcie ma osadzony profil kolorów, którego biblioteka GD nie bierze pod uwagę.
trifek
a jak to sprawdzić/zmienić?
trueblue
Wczytaj zdjęcie do jakiegoś programu graficznego. Jeśli ten program potrafi odczytywać profil kolorów, to zapisz ponownie jako nowy plik. Potem sprawdź skalowanie.

GD nie odczytuje profili, Imagick chyba potrafi. http://stackoverflow.com/questions/5773032...resizing-images
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.