2015-03-27 6 views
7

Używam skryptu PHP, który przesyła obraz, a następnie pobiera wymiary za pomocą getImageSize() PHP, a następnie robi zdjęcia, zgodnie z orientacją obrazu (portret lub krajobraz).PHP getimagesize() miesza szerokość i wysokość

Jednak (PHP w wersji 5.4.12) na niektóre .jpg robi wysokość i szerokość, ponieważ są one, w niektóre (wzięte z iPhone) to zamienia je, myśląc, zdjęcia portretowe są rzeczywiście krajobraz.
Dzieje się tak nie tylko na moim lokalnym Wampserze, ale także na zdalnym serwerze (z inną wersją PHP).

Czy ktoś pojęcia jak

1) naprawy tego czy
2) znaleźć sposób wokół tego problemu?

+0

W jaki sposób pracujesz nad wynikiem getimagesize? Zawsze uzyskujesz większą i mniejszą wartość (z wyjątkiem kwadratowych obrazów) i powinna ona działać poprawnie. Pokaż nam swój kod, który daje problem. –

+0

Mam ten sam problem. Mam Wamp z PHP 5.5. Wygląda jak błąd w interpretacji PHP. –

+0

Ktoś znalazł rozwiązanie tego problemu? Mam dokładnie ten sam problem: – MeV

Odpowiedz

6

Niektóre kamery zawierają znacznik orientacji w sekcji metadanych samego pliku. Dzięki temu samo urządzenie może wyświetlać je we właściwej orientacji za każdym razem, niezależnie od orientacji obrazu w jego nieprzetworzonych danych.

Wygląda na to, że system Windows nie obsługuje czytania tego znacznika orientacji, a zamiast tego odczytuje dane piksela i wyświetla je tak, jak jest.

Rozwiązaniem byłoby albo zmienić znacznik orientacji w metadanych dotknięty Pictures na podstawie za obraz lub exif_read_data() funkcja

używać PHP do zapoznania się z orientacji i orientować obraz odpowiednio tak:

<?php 
$image = imagecreatefromstring(file_get_contents($_FILES['image_upload']['tmp_name'])); 
$exif = exif_read_data($_FILES['image_upload']['tmp_name']); 
if(!empty($exif['Orientation'])) { 
    switch($exif['Orientation']) { 
     case 8: 
      $image = imagerotate($image,90,0); 
      break; 
     case 3: 
      $image = imagerotate($image,180,0); 
      break; 
     case 6: 
      $image = imagerotate($image,-90,0); 
      break; 
    } 
} 
// $image now contains a resource with the image oriented correctly 
?> 

Referencje:

+0

Mówimy o szerokości/wysokości, nie o orientacji. Nie? – MeV

+0

Niepoprawna orientacja obrazu spowodowałaby pomylenie szerokości/wysokości. –

+0

Dzięki za odpowiedź. Sprawdziłem EXIF ​​z obrazka, ale orientacja obrazu wynosi 1, więc nie wydaje mi się to złe. – MeV