Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Problem z miniaturkami (skrypt obraca zdjęcia)
Forum PHP.pl > Forum > Przedszkole
trifek
Witam serdecznie,
Mam taki skrypt:
  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ść 75)
  67. imagejpeg($thumb, $thumb_path, 75);
  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ść 75)
  81. imagepng($thumb, $thumb_path, 7);
  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 = 1024;
  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ść 75)
  121. imagejpeg($thumb, $thumb_path, 90);
  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ść 75)
  138. imagepng($thumb, $thumb_path, 7);
  139.  
  140. }
  141.  
  142. return $img_path;
  143. } else {
  144. echo"<center><b>Nie można dodać pliku!!</b> Błąd: " . $file . " </center> <br/>";
  145. }
  146. }
  147. }
  148. }


Wszystko działa w nim poprawnie, jednak w przypadku niektórych zdjęć PIONOWYCH - automatycznie obraca je na POZIOME.

Wie ktoś może dlaczego?
kapslokk
Pewnie te zdjęcia mają orientacje zapisaną w EXIF. Wygooglaj sobie "exif orientation"
trifek
niektóre mają.... zdjęcia są robione iPhonem i starą lustrzanką.... Na serwerze mam PHP7.

Wiesz może jak to poprawić?
kapslokk
Odczytać exif, przeskalować zdjęcie i obrócić zgodnie z tym co jest w exif.

http://stackoverflow.com/questions/7489742...ust-orientation
trifek
Nie mam tej funkcji w php (exif_read_data) sad.gif

Da się to może jakoś inaczej rozwiązać? Np. usunąć jakoś ten EXIF?
kapslokk
http://php.net/manual/en/exif.installation.php jesli jestes w stanie to zainstaluj.
Usunięcie exifu powoduje przekręcenie z pionowego na poziome.
Puszy
Miałem podobny problem przy wgrywaniu zdjęć, zdjęcia z dużą rozdzielczością podczas wyświetlania były obrócone o 90 stopni. Przy mniejszych rozdzielczościach (Full HD, HD) problem nie występował.
trifek
Czyli usunięcie exifu też nic nie da :/

Napiszę do firmy hostingowej - może mi to doinstalują.... smile.gif

Finalnie ten kod powinien wyglądać tak:

  1. function removeExif2($filename, $new)
  2. {
  3. $exif = exif_read_data($filename);
  4. if (!empty($exif['Orientation'])) {
  5. $image = imagecreatefromjpeg($filename);
  6. switch ($exif['Orientation']) {
  7. case 3:
  8. $image = imagerotate($image, 180, 0);
  9. break;
  10.  
  11. case 6:
  12. $image = imagerotate($image, -90, 0);
  13. break;
  14.  
  15. case 8:
  16. $image = imagerotate($image, 90, 0);
  17. break;
  18. }
  19.  
  20. imagejpeg($image, $filename, 90);
  21. }
  22. }
  23.  
  24.  
  25. function upload_obrazka_miniaturka($file, $filetemp, $path, $newname, $wymiar) {
  26. if ($file != "") {
  27. if ($filetemp != "") {
  28. if (is_uploaded_file($filetemp)) {
  29. move_uploaded_file($filetemp, $path . "/" . $newname);
  30.  
  31. //////////////////////////////////
  32. 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)) {
  33. unlink($path . "/" . $newname);
  34. return "Błędny plik - Proszę wybrać inny";
  35. exit();
  36. }
  37. $sizette = getimagesize($path . "/" . $newname);
  38. if ($sizette['mime'] != "image/jpeg" && $sizette['mime'] != "image/jpg" && $sizette['mime'] != "image/png") {
  39. unlink($path . "/" . $newname);
  40. return "Błędny plik - Proszę wybrać inny";
  41. exit();
  42. }
  43. $rozm = filesize($path . "/" . $newname);
  44. if ($rozm > 500000000) {
  45. unlink($path . "/" . $newname);
  46. return "Plik za duży- Proszę wybrać inny";
  47. exit();
  48. }
  49. //////////////////////////////////
  50. removeExif($path . "/" . $newname, $path . "/" . $newname);
  51.  
  52.  
  53.  
  54. $file = strtolower($file);
  55. $nazwaobrazka = explode('.', $newname);
  56.  
  57. //Przypisujemy do zmiennej $img_path ścieżke do obrazka
  58. $img_path = $path . "/" . $newname;
  59.  
  60.  
  61.  
  62.  
  63. //Tworzymy scieżkę do miniaturki
  64. $thumb_path = $path . "/mini_" . $nazwaobrazka['0'] . '.' . $nazwaobrazka['1'];
  65.  
  66. //ustalamy maksymalny dopuszczalny rozmiar miniatury
  67. $max_width = $max_height = $wymiar;
  68.  
  69. //Sprawdzamy czy obraz istnieje
  70. //if (!file_exists($img_path))
  71. // die('Plik obrazu nie istnieje');
  72. //Pobieramy informacjie o obrazie
  73. $img_attr = getimagesize($img_path);
  74.  
  75. //Sprawdzamy czy obraz jest wiekszy na szerokość czy na wysokość
  76. // i zmniejszamy odpowiednio rozmiar
  77. // $img_attr[0] - szerokosc, $img_attr[1] - wysokość
  78. if ($img_attr[0] > $img_attr[1]) {
  79. $scale = $img_attr[0] / $max_width;
  80. } else {
  81. $scale = $img_attr[1] / $max_height;
  82. }
  83.  
  84. //Tworzymy obraz miniaturki
  85. $w = floor($img_attr[0] / $scale);
  86. $h = floor($img_attr[1] / $scale);
  87. $thumb = imagecreatetruecolor($w, $h);
  88.  
  89. //Kopiujemy obraz pomniejszajac go,
  90. imagecopyresampled($thumb, imagecreatefromjpeg($img_path), 0, 0, 0, 0, $w, $h, $img_attr[0], $img_attr[1]);
  91.  
  92. if($nazwaobrazka['1'] == "jpg" || $nazwaobrazka['1'] == "jpeg"){
  93. //Kopiujemy obraz pomniejszajac go,
  94. imagecopyresampled($thumb, imagecreatefromjpeg($img_path), 0, 0, 0, 0, $w, $h, $img_attr[0], $img_attr[1]);
  95.  
  96. //Zapisujemy do pliku (jakość 75)
  97. imagejpeg($thumb, $thumb_path, 75);
  98. }
  99.  
  100. if($nazwaobrazka['1'] == "png"){
  101.  
  102. imagealphablending($thumb,false);
  103. $color=imagecolorallocatealpha($thumb,0,0,0,127);
  104. imagefill($thumb,0,0,$color);
  105. imagesavealpha($thumb,true);
  106.  
  107. //Kopiujemy obraz pomniejszajac go,
  108. imagecopyresampled($thumb, imagecreatefrompng($img_path), 0, 0, 0, 0, $w, $h, $img_attr[0], $img_attr[1]);
  109.  
  110. //Zapisujemy do pliku (jakość 75)
  111. imagepng($thumb, $thumb_path, 7);
  112. }
  113.  
  114. /////////////////
  115. $nazwaobrazka = explode('.', $newname);
  116.  
  117. //Przypisujemy do zmiennej $img_path ścieżke do obrazka
  118. $img_path = $path . "/" . $newname;
  119.  
  120. //Tworzymy scieżkę do miniaturki
  121. $thumb_path = $path . "" . $nazwaobrazka['0'] . '.' . $nazwaobrazka['1'];
  122.  
  123. //ustalamy maksymalny dopuszczalny rozmiar miniatury
  124. $max_width = $max_height = 1600;
  125.  
  126. //Sprawdzamy czy obraz istnieje
  127. //if (!file_exists($img_path))
  128. // die('Plik obrazu nie istnieje');
  129. //Pobieramy informacjie o obrazie
  130. $img_attr = getimagesize($img_path);
  131.  
  132. //Sprawdzamy czy obraz jest wiekszy na szerokość czy na wysokość
  133. // i zmniejszamy odpowiednio rozmiar
  134. // $img_attr[0] - szerokosc, $img_attr[1] - wysokość
  135. if ($img_attr[0] > $img_attr[1]) {
  136. $scale = $img_attr[0] / $max_width;
  137. } else {
  138. $scale = $img_attr[1] / $max_height;
  139. }
  140.  
  141. //Tworzymy obraz miniaturki
  142. $w = floor($img_attr[0] / $scale);
  143. $h = floor($img_attr[1] / $scale);
  144. $thumb = imagecreatetruecolor($w, $h);
  145.  
  146. if($nazwaobrazka['1'] == "jpg" || $nazwaobrazka['1'] == "jpeg"){
  147. //Kopiujemy obraz pomniejszajac go,
  148. imagecopyresampled($thumb, imagecreatefromjpeg($img_path), 0, 0, 0, 0, $w, $h, $img_attr[0], $img_attr[1]);
  149.  
  150. //Zapisujemy do pliku (jakość 75)
  151. imagejpeg($thumb, $thumb_path, 90);
  152. }
  153.  
  154.  
  155.  
  156. if($nazwaobrazka['1'] == "png"){
  157.  
  158.  
  159. imagealphablending($thumb,false);
  160. $color=imagecolorallocatealpha($thumb,0,0,0,127);
  161. imagefill($thumb,0,0,$color);
  162. imagesavealpha($thumb,true);
  163.  
  164. //Kopiujemy obraz pomniejszajac go,
  165. imagecopyresampled($thumb, imagecreatefrompng($img_path), 0, 0, 0, 0, $w, $h, $img_attr[0], $img_attr[1]);
  166.  
  167. //Zapisujemy do pliku (jakość 75)
  168. imagepng($thumb, $thumb_path, 7);
  169.  
  170. }
  171.  
  172. return $img_path;
  173. } else {
  174. echo"<center><b>Nie można dodać pliku!!</b> Błąd: " . $file . " </center> <br/>";
  175. }
  176. }
  177. }
  178. }


questionmark.gif 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.