2015-03-27 7 views
7

Io uso uno script PHP che carica un'immagine, quindi ottiene le dimensioni con getImageSize() di PHP e quindi fa le cose all'immagine secondo l'orientamento delle immagini (verticale o orizzontale).PHP getimagesize() mescola larghezza e altezza

Tuttavia (PHP versione 5.4.12) sulla alcuni .jpg file diventa l'altezza e la larghezza sono, e in qualche (scattate con un iPhone) li scambia, pensando i ritratti sono in realtà paesaggio.
Non si verifica solo sul mio Wampserver locale, ma anche su un server remoto (con una versione PHP diversa).

Qualcuno ha idea di come

1) per riparare questo o
2) trovare un modo per aggirare il problema?

+0

Come stai lavorando con il risultato di getimagesize? Ottieni sempre un valore più grande e più piccolo (ad eccezione delle immagini quadrate) e dovrebbe funzionare di conseguenza. Mostraci il tuo codice, che dà il problema –

+0

Ho lo stesso problema. Ho Wamp con PHP 5.5. Sembra un bug nell'interpretazione PHP integrata. –

+0

Qualcuno ha trovato una soluzione per questo? Ho esattamente lo stesso problema – MeV

risposta

6

Alcune fotocamere includono un tag di orientamento all'interno della sezione dei metadati del file stesso. Questo è così il dispositivo stesso può mostrarlo con l'orientamento corretto ogni volta, indipendentemente dall'orientamento dell'immagine nei suoi dati grezzi.

Sembra che Windows non supporti la lettura di questo tag di orientamento e invece legge solo i dati dei pixel e li visualizza così com'è.

Una soluzione potrebbe essere quella di cambiare sia il tag di orientamento nei metadati immagini afflitti su una base per-immagine, funzione OR

Utilizzo di PHP exif_read_data() di leggere l'orientamento e orientare la vostra immagine di conseguenza in questo modo:

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

Riferimenti:

+0

Stiamo parlando della larghezza/altezza non circa l'orientamento. no? – MeV

+0

Se l'orientamento dell'immagine è sbagliato, la larghezza/altezza si confondono. –

+0

Grazie per la risposta. Ho controllato l'immagine EXIF ​​ma l'orientamento dell'immagine è 1, quindi non sembra essere sbagliato per me. – MeV