Seite 1 von 2

Exif Anzeige für angehangene Bilder

Verfasst: 17.06.2008 14:01
von Das Dee
Hi,

ich such mir einen Wolf, deshalb frage ich nun an dieser Stelle.

Gibt es bereits eine Lösung um Exif-Daten für die im Thread angehangen Bilder (z.B. unterhalb des Bildes) anzeigen zu lassen?

Bevor Fragen kommen. phpBB 3.0.1

Verfasst: 17.06.2008 14:07
von 4seven

Verfasst: 17.06.2008 14:11
von Das Dee
Danke, da ich aber wenig Ahnung von der Materie habe, suche ich halt nach einer fertigen Erweiterung für phpBB.

Es sei denn du bist in der Lage mir zu sagen wo ich welchen Codeschnipsel eintragen muss.. :wink:

Verfasst: 18.06.2008 12:40
von Das Dee
Moin,

also - ich versuche mich nun selber daran.
Ich werde erst einmal versuchen die Daten beim erstellen des Topics auszulesen (in der attachment.html).

Leider musste ich feststellen, das das ganze mit den dynamischen Verlinkungen nicht funktioniert.

ich habe testweise eine .php erstellt

Code: Alles auswählen

$image = 'url/download/file.php?id=1';
$exif = exif_read_data($image, 0 , true);
Fehlerausgabe:
Warning: exif_read_data(file.php?id=1'): file not supported in /url/test.php on line 2

Besteht die Möglichkeit dem System eine echte .jpg vorzugaukeln?

EDIT: hat sich erledigt. Es geht doch. Bild lag in einem nicht öffentlich zugänglichem Bereich, daher konnte das Script auch nicht darauf zugreifen.

Verfasst: 18.06.2008 17:42
von Das Dee
Hi,

nur zur Info - es hat geklappt.
Warscheinlich laienhaft, aber es funktioniert. 8)

Verfasst: 18.06.2008 18:49
von 4seven
Klasse, es wäre super, wenn du die Lösung hier präsentieren würdest :wink:

Verfasst: 18.06.2008 19:08
von Das Dee
Ich hatte es schon per PN weitergeleitet - so für die Snippets

Wie gesagt - es ist laienhaft :roll:

Ich hab aus oben genanntem Link den Code entliehen und folgendes daraus gemacht:


Suche in functions_content.php nach

Code: Alles auswählen

// Images
				case ATTACHMENT_CATEGORY_IMAGE:
					$l_downloaded_viewed = 'VIEWED_COUNT';
					$inline_link = append_sid("{$phpbb_root_path}download/file.$phpEx", 'id=' . $attachment['attach_id']);
					$download_link .= '&mode=view';
füge danach folgenden Code ein

Code: Alles auswählen

     // Versuch exif auszulesen -START-

        $image = $filename;
        if ($image != '') {
                $exif = exif_read_data($image, 0 , true);

                if(isset($exif["EXIF"]["DateTimeOriginal"])) {
                        $exif_date = str_replace(":","-",substr($exif["EXIF"]["DateTimeOriginal"], 0, 10));
                        $exif_time = substr($exif["EXIF"]["DateTimeOriginal"], 10);
                }

                if(isset($exif["EXIF"]["FNumber"])) {
                        list($num,$den) = explode("/",$exif["EXIF"]["FNumber"]);
                        $exif_aperture  = "F/" . ($num/$den);
                }

                if(isset($exif["EXIF"]["ExposureTime"])) {
                        list($num, $den) = explode("/", $exif["EXIF"]["ExposureTime"]);
                        if ($num!=1) {
                                $exif_exposure = "{$num}s";
                        } else {
                                $den = $den/$num;
                                $exif_exposure = "1/{$den}s";
                        }
                }

                if(isset($exif["EXIF"]["FocalLength"])) {
                        list($num, $den) = explode("/", $exif["EXIF"]["FocalLength"]);
                        $exif_focallength  = ($num/$den) . "mm";
                }

                if(isset($exif["EXIF"]["FocalLengthIn35mmFilm"])) {
                        $exif_focallength35 = $exif["EXIF"]["FocalLengthIn35mmFilm"];
                 }

                if(isset($exif["EXIF"]["ISOSpeedRatings"])) {
                       $exif_iso = $exif["EXIF"]["ISOSpeedRatings"];
                }
                if(isset($exif["EXIF"]["WhiteBalance"])) {
                        switch($exif["EXIF"]["WhiteBalance"]) {
                                case 0:
                                        $exif_whitebalance = "Auto";
                                        break;
                                case 1:
                                        $exif_whitebalance = "Daylight";
                                        break;
                                case 2:
                                        $exif_whitebalance = "Fluorescent";
                                        break;
                                case 3:
                                        $exif_whitebalance = "Incandescent";
                                        break;
                                case 4:
                                        $exif_whitebalance = "Flash";
                                        break;
                                case 9:
                                        $exif_whitebalance = "Fine Weather";
                                        break;
                                case 10:
                                        $exif_whitebalance = "Cloudy";
                                        break;
                                case 11:
                                        $exif_whitebalance = "Shade";
                                        break;
                                default:
                                        $exif_whitebalance = "";
                                        break;
                        }

                }
                if(isset($exif["EXIF"]["Flash"])) {
                        $exif_flash = (bindec($exif["EXIF"]["Flash"]) ? "On" : "Off");
                }
                 if(isset($exif["IFD0"]["Make"]) && isset($exif["IFD0"]["Model"])) {
                        $exif_make = ucwords(strtolower($exif["IFD0"]["Make"]));
                        $exif_model = ucwords($exif["IFD0"]["Model"]);
                }



        }


	$block_array += array(
			'FOCAL'	        	=> $exif_focallength,
			'ISO'      			=> $exif_iso,
			'APERTURE'			=> $exif_aperture,
			'EXPOSURE'		    => $exif_exposure,
			'WHITEB'			=> $exif_whitebalance,
			'FLASH'		    	=> $exif_flash,
   			'BUILT'		    	=> $exif_make,
   			'MODEL'		    	=> $exif_model,
   
		);
     
     // Versuch exif auszulesen -ENDE-
Und ergänze die attachment.html mit z.B.

Code: Alles auswählen

<dd>-->ISO: {_file.ISO}<--</dd>
<dd>-->Brennweite: {_file.FOCAL}<--</dd>
<dd>-->Blende: {_file.APERTURE}<--</dd>
<dd>-->Zeit: {_file.EXPOSURE}<--</dd>
<dd>-->WB: {_file.WHITEB}<--</dd>
<dd>-->Blitz: {_file.FLASH}<--</dd>
<dd>-->Hersteller: {_file.MAKE}<--</dd>
<dd>-->Modell: {_file.MODEL}<--</dd>

zwischen

Code: Alles auswählen

<!-- IF _file.S_IMAGE -->
		<dl class="file">

			<dt class="attach-image"><img src="{_file.U_INLINE_LINK}" alt="{_file.DOWNLOAD_NAME}"  /></dt>

			<!-- IF _file.COMMENT --><dd><em>{_file.COMMENT}</em></dd><!-- ENDIF -->
			<dd>{_file.DOWNLOAD_NAME} ({_file.FILESIZE} {_file.SIZE_LANG}) {_file.L_DOWNLOAD_COUNT}</dd>
und

Code: Alles auswählen

		</dl>
		<!-- ENDIF -->
Wie gesagt - es ist laienhaft. Vielleicht sollte das auslesen der Daten schon beim Upload passieren und die entsprechenden Daten in der DB gespeichert werden. Da ich davon noch weniger Ahnung habe als von PHP ist dies aber eine einfache unkomplizierte Lösung.

Verfasst: 18.06.2008 19:12
von 4seven
Ich finde es überhaupt erstmal genial, das du das hinbekommen hast :grin:

Verfasst: 18.06.2008 19:16
von Das Dee
... ich arbeite erst seid vorgestern mit phpbb ...

Es hat mich den halben Tag gekostet um rauszufinden, wo die Variablen liegen.

Der Rest hat sich dann von allein ergeben - war ja nur copy&paste.

Verfasst: 19.06.2008 02:44
von Das Dee
Es gibt noch das eine oder andere Problem.

Flash -> zeigt On an obwohl ausgeschaltet
$exif_focallength35 -> braucht (glaub ich) kein Mensch

Wenn man die attachment.html mit einer Tabelle ausstattet (und ohne Theme CSS arbeitet) und der entsprechende Wert leer ist, wird die Tabelle zerschossen. Die Werte sollten also mit z.B. "nicht verfügbar" gefüllt werden...

Z.Z. sieht es so aus:

KLICK (Link nur vorläufig nutzbar)

Man sagte mir das aus den Schnipseln wohl besser ein Mod gemacht werden sollte - wer also Lust hat meine vorhandenen Schnipsel zu verarbeiten - bitte :wink: