Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]Obracające się obrazki
bmati666
post
Post #1





Grupa: Zarejestrowani
Postów: 57
Pomógł: 1
Dołączył: 12.02.2016

Ostrzeżenie: (0%)
-----


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ć.
Go to the top of the page
+Quote Post
kapslokk
post
Post #2





Grupa: Zarejestrowani
Postów: 965
Pomógł: 285
Dołączył: 19.06.2015
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


http://stackoverflow.com/questions/7489742...ust-orientation
Go to the top of the page
+Quote Post
Pyton_000
post
Post #3





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

Ostrzeżenie: (0%)
-----


To przez tag w EXIF np:

Orientation: BottomRight

Niektóre przeglądarki go interpretują i wyświetlają ok a inne nie.
Go to the top of the page
+Quote Post
bmati666
post
Post #4





Grupa: Zarejestrowani
Postów: 57
Pomógł: 1
Dołączył: 12.02.2016

Ostrzeżenie: (0%)
-----


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ć?

Ten post edytował bmati666 12.02.2016, 10:41:39
Go to the top of the page
+Quote Post
kapslokk
post
Post #5





Grupa: Zarejestrowani
Postów: 965
Pomógł: 285
Dołączył: 19.06.2015
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


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'];


Ten post edytował kapslokk 12.02.2016, 10:45:47
Go to the top of the page
+Quote Post
bmati666
post
Post #6





Grupa: Zarejestrowani
Postów: 57
Pomógł: 1
Dołączył: 12.02.2016

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
kapslokk
post
Post #7





Grupa: Zarejestrowani
Postów: 965
Pomógł: 285
Dołączył: 19.06.2015
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Spróbuj jeszcze zamienić
$orientation = $exif['IFD0']['Orientation'];
na
$orientation = $exif['Orientation'];
NIe na każdym serwerze jest imagick (IMG:style_emoticons/default/smile.gif)

Ten post edytował kapslokk 12.02.2016, 11:02:47
Go to the top of the page
+Quote Post
bmati666
post
Post #8





Grupa: Zarejestrowani
Postów: 57
Pomógł: 1
Dołączył: 12.02.2016

Ostrzeżenie: (0%)
-----


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);


Ten post edytował bmati666 13.02.2016, 00:04:04
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 23.08.2025 - 20:11