2016-06-03 14 views
0

Ich arbeite an einigen Galerie-Software, aber ich habe ein Problem, wo die ' Das Orientierungs-Flag in den EXIF-Daten nach einem Bild-Upload wird immer auf 1 gesetzt (was "nichts tut"), unabhängig von der Ausrichtung des Bildes. Das bedeutet, dass ich das Bild nicht in der richtigen Ausrichtung anzeigen kann.Upload JPEG-Bild über HTML-Formular und PHP-Skript scheint die Orientation-Flag in den EXIF-Daten auf 1 (oder stripping es vollständig)

Hier sind die wesentlichen Teile meines Upload-Formulars:

<form id="Upload" name="Upload" action="http://www.goosedalemodelflyingclub.co.uk/index.php" enctype="multipart/form-data" method="post"> 
... 
<div class="uploadbox"> 
<label>Choose photo to upload:<input id="file_upload1" type="file" name="file_upload1" accept="image/*"></label> 
<br> 
<label>Name of Photo: (1) <span id="new_msg_name1"></span><br><input type="text" class="p_name" size="60" maxlength="40" id="new_name1" name="new_name1" value=""></label> 
<br> 
<label>Description: 
    <span id="new_msg_desc1"></span><br> 
    <textarea id="new_desc1" name="new_desc1" class="p_desc" rows="4" cols="70" maxlength="250" style="width: auto; height: auto;"></textarea> 
</label> 
<br> 
<label>Who is able to view this picture: 
    <select id="albpic_visib_upload1" name="albpic_visib_upload1"> 
     <option value="O">Me only</option> 
     <option value="G">Forum only</option> 
     <option value="W">Everyone</option> 
    </select> 
</label> 
<br><br> 
<input type="submit" onclick="return validateUploadForm(this)" id="NewPix1" name="NewPix1" value="Upload Photos to Current Album">&nbsp;&nbsp; 
<a href="#"> 
    <input type="button" name="cncl" id="cncl" value="Cancel"> 
</a> 
<br> 
</div> 
... 
<input type="hidden" id="p" name="p" value="MyGallery"> 
<input type="hidden" id="override" name="override" value="Y"> 
<input type="hidden" id="albumid" name="albumid" value="54321"> 
<input type="hidden" id="gfunc" name="gfunc" value="NewPix1"> 
<input type="hidden" id="pix_this_upload" name="pix_this_upload" value="15"> 
<input type="hidden" id="user_id_passed" name="user_id_passed" value="12345"></div> 
</form> 

Ich habe eine Reihe von Abteilungen, die Klasse „Uploadbox“ mit einer Anzahl von Fotos zu ermöglichen, auf einmal hochgeladen werden (wie durch pix_this_upload gegeben, kann oder darf nicht 15). Die JavaScript-Funktion validateUploadForm() ist nicht relevant - sie prüft nur, ob die Felder korrekt ausgefüllt sind und teilt dem Benutzer mit, wenn etwas falsch ist.

Der entsprechende Abschnitt meines PHP-Skript ist wie folgt (einig Debug-Berichterstattung einschließlich mir zum Grunde gehen zu helfen):

$formfiles = $request->file("file_upload$ii"); 
$tempfile = $formfiles['tmp_name']; // Temporary name of file (uploaded as) 
... 
$uploaded = @move_uploaded_file($tempfile, $fullpath); // Move the uploaded file to its permanent home and rename appropriately 
... 
$exif = exif_read_data($fullpath); // Get EXIF data 
/*** DEBUG start ***/ 
$ff = $this->picsrootaddr; 
$ff .= "application_$pictureid.log"; 
$debug_r = fopen($ff, "w"); 
fwrite($debug_r, "$path_o\n"); 
$xxr = print_r(array_values($exif), true); 
fwrite($debug_r, "Debug 0: " . $xxr . "\n\n"); 
/*** DEBUG end for now ***/ 

if (isset($exif['Orientation'])) 
{ 
    $orientation = isset($exif['Orientation']); // Orientation 
    fwrite($debug_r, "Debug 1: $orientation\n"); 
} 
else 
{ 
    if (isset($exif['IDF0']['Orientation'])) 
    { 
     $orientation = $exif['IDF0']['Orientation']; // Orientation 
     fwrite($debug_r, "Debug 2: $orientation\n"); 
    } 
    else 
    { 
     $orientation = EXIF_NOTHING; // Leave image as-is 
     fwrite($debug_r, "Debug 3: $orientation\n"); 
    } 
} 

/*** DEBUG start ***/ 
fclose($debug_r); 
/*** DEBUG end ***/ 

Es ist ziemlich schwierig, den gesamten Code zu schreiben als ein Teil davon ist in einer Funktion, und es wird viel geprüft (is_uploaded_file, etc). Auch kann es bemerkenswert sein, dass die Seite phpBB3 verwendet, und dies blockiert den Zugriff auf die Superglobals in PHP, daher die Verwendung dieses $ Anfrageobjekts. Dies wird von phpBB3 selbst instanziiert, also muss ich es nur benutzen. Hier

ist ein Link zu einem Foto, das ich das Skript hochgeladen habe mit (zu einem Haltebereich bewegt, um nicht mit meinen Tests zu stören): http://www.goosedalemodelflyingclub.co.uk/gallery_aux/original/43/pic176_DSCF4678.JPG

Hier ist ein Link zu einem Skript online, dass ich gefunden, dass die EXIF-Daten angezeigt werden: http://regex.info/exif.cgi?imgurl=http%3A%2F%2Fwww.goosedalemodelflyingclub.co.uk%2Fgallery_aux%2Foriginal%2F43%2Fpic176_DSCF4678.JPG Beachten Sie, wie die EXIF-Daten die Ausrichtung nicht enthält und scheint in hohem Maße abgespeckte.

Dies ist eine EXIF-Protokolldatei von Debug-Code erzeugte ich die EXIF-Daten in eine Datei zu drucken hinzugefügt: http://www.goosedalemodelflyingclub.co.uk/gallery_aux/application_176.log Hinweis, wie die ‚Orientierung‘ Flag

ich das gleiche Bild hochgeladen, wie 1. berichtet wird direkt über hier FileZilla: http://www.goosedalemodelflyingclub.co.uk/stackoverflow/DSCF4678.JPG Hinweis, wie es zeigt mit der richtigen Ausrichtung (in Google Chrome, sowieso)

Und hier ist Bericht seines EXIF-Daten aus der gleichen Website: http://regex.info/exif.cgi?dummy=on&imgurl=http%3A%2F%2Fwww.goosedalemodelflyingclub.co.uk%2Fstackoverflow%2FDSCF4678.JPG

Irgendwo entlang der Linie werden die EXIF-Daten entfernt, was bedeutet, dass ich keine Chance habe, das Bild zu rotieren oder umzudrehen, damit es korrekt angezeigt wird.

Kann mir bitte jemand einen Steuer in die richtige Richtung geben? Ich habe dies zum Tode gegoogelt und dies hat unzählige Artikel, Tutorials und Fragen von denen alle wesentlichen zeigen, dass ich nicht falsch machen etwas aufgedreht.

PPS: Sieht aus wie eine ähnliche Frage hier, wenn nicht das gleiche, aber keine Antwort zur Verfügung gestellt: No orientation in exif data - PHP image upload - und es geht sowieso um iOS.

+0

whats '$ path_o'? sollte es nicht '$ fullpath 'sein? – cmorrissey

+0

Sie haben Recht - schlechtes C & P meinerseits. Es ist, weil dieses Bit in der Funktion ist, die ich erwähnte. Vielen Dank! –

+0

TLDR - verkürzen Sie die Beschreibung, und fügen Sie mehr Code – cmorrissey

Antwort

0

Die Antwort gefunden und danke an alle, die es sich angesehen haben. Das Problem bestand darin, die Dokumentation nicht ordnungsgemäß von mir gelesen zu haben.

In PHP, die ImageFlip() Methode gibt einen boolean zu sagen, ob es erfolgreich war oder nicht, und ändert das Bild als Parameter an Ort und Stelle übergeben: https://secure.php.net/manual/en/function.imageflip.php

die imagerotate() Methode gibt jedoch eine Ressource zu dem gedrehten Bild und verlässt das Original unverändert: https://secure.php.net/manual/en/functi ... rotate.php

der Fehler, den ich machte war, dass imagerotate denken() zurückgegeben einen Erfolg/Mißerfolg Boolean und modifiziert, um das Bild an Ort und Stelle wie ImageFlip() tut, aber das ist nicht der Fall.

Dachte es war es wert, dies zu veröffentlichen, falls jemand diese Frage entdeckt und wollte versuchen, sie zu beantworten, und auch um zu verhindern, dass jemand in die gleiche Falle gerät.

Der Fehler war in keinem meiner geposteten Code - es war woanders.