2015-03-27 13 views
7

Ich benutze ein PHP-Skript, das ein Bild hochlädt, dann erhält man die Dimensionen mit PHP's getImageSize() und erledigt dann die Bilder entsprechend der Bildausrichtung (Hoch- oder Querformat).PHP getimagesize() mischt Breite und Höhe

jedoch (PHP Version 5.4.12) auf einige JPG-Dateien es die Höhe und Breite bekommt, wie sie sind, und in einige (aufgenommen mit einem iPhone) es tauscht sie, die Portrait-Bilder denken, sind eigentlich Landschaft.
Es passiert nicht nur auf meinem lokalen Wampserver, sondern auch auf einem Remote-Server (mit einer anderen PHP-Version).

Hat jemand eine Ahnung, wie

1), dies zu reparieren oder
2) einen Weg, um das Problem finden?

+0

Wie arbeiten Sie mit dem Ergebnis von getimagesize? Sie erhalten immer einen größeren und einen kleineren Wert (außer für quadratische Bilder) und sollten entsprechend arbeiten. Zeigen Sie uns Ihren Code, der das Problem gibt –

+0

Ich habe ein gleiches Problem. Ich habe Wamp mit PHP 5.5. Es sieht aus wie ein Bug im eingebauten PHP-Interpreter. –

+0

Hat jemand eine Lösung dafür gefunden? Ich habe genau dasselbe Problem – MeV

Antwort

6

Einige Kameras enthalten ein Ausrichtungskennzeichen im Metadatenabschnitt der Datei. Dies ist so, dass das Gerät selbst es in der richtigen Orientierung jedes Mal zeigen kann, unabhängig von der Ausrichtung des Bildes in seinen Rohdaten.

Es scheint, dass Windows das Lesen dieses Orientierungs-Tags nicht unterstützt und stattdessen nur die Pixeldaten liest und unverändert anzeigt.

wäre eine Lösung, die entweder zur Orientierung Tag in der betroffenen Bildern Metadaten auf einer Pro-Bild-Basis oder

PHPs exif_read_data() Funktion die Ausrichtung ändern und richten Sie Ihr Bild entsprechend wie so zu lesen:

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

Referenzen:

+0

sein Wir sprechen über die Breite/Höhe nicht über die Ausrichtung. Nein? – MeV

+0

Die falsche Bildausrichtung würde zu einer Verwechslung von Breite und Höhe führen. –

+0

Danke für die Antwort. Ich habe das Image EXIF ​​überprüft, aber die Bildausrichtung ist 1, daher scheint es mir nicht falsch zu sein. – MeV