Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Obracające się obrazki
Forum PHP.pl > Forum > Przedszkole
bmati666
Witam, dodałem upload obrazków na stronie, ale przy dużej rozdzielczości np. 2448x3264 po wyświetleniu na stronie zdjęcie jest obrócone o 90 stopni w lewo, gdy kliknę PPM "Otwórz grafikę w nowej karcie" zdjęcie jest prosto. Dodam, że próbowałem upload'ów z różnych poradników i za każdym razem jest to samo, nawet gdy ręcznie dodam obraz na serwer i wyświetle. Próbowałem też zmniejszać zdjęcie ale wtedy zmniejszone zdjęcie od razu zapisuje się przekręcone. Może ktoś miał podobny problem i udało mu się go rozwiązać.
Pyton_000
To przez tag w EXIF np:

Orientation: BottomRight

Niektóre przeglądarki go interpretują i wyświetlają ok a inne nie.
bmati666
Dzięki wielkie, od wczoraj nawet nie wiedziałem jak mam tego szukać.

Mam jeszcze pytanie, znalazłem taki kod:

CODE
function resample($jpgFile, $thumbFile, $width, $orientation) {
// Get new dimensions
list($width_orig, $height_orig) = getimagesize($jpgFile);
$height = (int) (($width / $width_orig) * $height_orig);
// Resample
$image_p = imagecreatetruecolor($width, $height);
$image = imagecreatefromjpeg($jpgFile);
imagecopyresampled($image_p, $image, 0, 0, 0, 0, $width, $height, $width_orig, $height_orig);
// Fix Orientation
switch($orientation) {
case 3:
$image_p = imagerotate($image_p, 180, 0);
break;
case 6:
$image_p = imagerotate($image_p, -90, 0);
break;
case 8:
$image_p = imagerotate($image_p, 90, 0);
break;
}
// Output
imagejpeg($image_p, $thumbFile, 90);
}


i nie wiem o co chodzi z tym orientation, co tam wstawić?
Jak tego użyć?
kapslokk
Orientacje odczytaną z exif.
W linku, który wyżej CI podałem w pierwszym poscie jest przykład jak to wyciągnąć:
  1. $exif = exif_read_data($upload_path . $newfilename);
  2. $ort = $exif['IFD0']['Orientation'];
bmati666
Mam coś takiego:
  1. $jpgFile = 'uploads/img.jpg';
  2. $thumbFile = 'uploads/img.jpg';
  3. $width = 1024;
  4. $exif = exif_read_data($jpgFile . $thumbFile);
  5. $orientation = $exif['IFD0']['Orientation'];
  6.  
  7. function resample($jpgFile, $thumbFile, $width, $orientation) {
  8. // Get new dimensions
  9. list($width_orig, $height_orig) = getimagesize($jpgFile);
  10. $height = (int) (($width / $width_orig) * $height_orig);
  11. // Resample
  12. $image_p = imagecreatetruecolor($width, $height);
  13. $image = imagecreatefromjpeg($jpgFile);
  14. imagecopyresampled($image_p, $image, 0, 0, 0, 0, $width, $height, $width_orig, $height_orig);
  15. // Fix Orientation
  16. switch($orientation) {
  17. case 3:
  18. $image_p = imagerotate($image_p, 180, 0);
  19. break;
  20. case 6:
  21. $image_p = imagerotate($image_p, -90, 0);
  22. break;
  23. case 8:
  24. $image_p = imagerotate($image_p, 90, 0);
  25. break;
  26. }
  27. // Output
  28. imagejpeg($image_p, $thumbFile, 90);
  29. }
  30.  
  31.  
  32. resample($jpgFile, $thumbFile, $width, $orientation);


Obrazek się zmniejsza, ale nadal jest przekręcony więc chyba coś robie źle

Ok, problem rozwiązany. Użyłem tego: http://php.net/manual/en/imagick.getimageorientation.php
Jeszcze raz wielkie dzięki za pomoc.
kapslokk
Spróbuj jeszcze zamienić
$orientation = $exif['IFD0']['Orientation'];
na
$orientation = $exif['Orientation'];
NIe na każdym serwerze jest imagick smile.gif
bmati666
Zamieniłem to
  1. $exif = exif_read_data($jpgFile . $thumbFile);
  2. $orientation = $exif['IFD0']['Orientation'];


na to

  1. $exif = exif_read_data($jpgFile);
  2. $orientation = $exif['Orientation'];


Teraz wszystko działa, jakby ktoś potrzebwał daję cały działający kod

  1. $jpgFile = 'uploads/img.jpg';
  2. $thumbFile = 'uploads/img.jpg';
  3. $width = 1024;
  4. $exif = exif_read_data($jpgFile);
  5. $orientation = $exif['Orientation'];
  6.  
  7. function resample($jpgFile, $thumbFile, $width, $orientation) {
  8. // Get new dimensions
  9. list($width_orig, $height_orig) = getimagesize($jpgFile);
  10. $height = (int) (($width / $width_orig) * $height_orig);
  11. // Resample
  12. $image_p = imagecreatetruecolor($width, $height);
  13. $image = imagecreatefromjpeg($jpgFile);
  14. imagecopyresampled($image_p, $image, 0, 0, 0, 0, $width, $height, $width_orig, $height_orig);
  15. // Fix Orientation
  16. switch($orientation) {
  17. case 3:
  18. $image_p = imagerotate($image_p, 180, 0);
  19. break;
  20. case 6:
  21. $image_p = imagerotate($image_p, -90, 0);
  22. break;
  23. case 8:
  24. $image_p = imagerotate($image_p, 90, 0);
  25. break;
  26. }
  27. // Output
  28. imagejpeg($image_p, $thumbFile, 90);
  29. }
  30.  
  31.  
  32. resample($jpgFile, $thumbFile, $width, $orientation);
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.