PSD-Tutorials.de
Forum für Design, Fotografie & Bildbearbeitung
Tutkit
Agentur
Hilfe
Kontakt
Start
Forum
Aktuelles
Besonderer Inhalt
Foren durchsuchen
Tutorials
News
Anmelden
Kostenlos registrieren
Aktuelles
Suche
Suche
Nur Titel durchsuchen
Von:
Menü
Anmelden
Kostenlos registrieren
App installieren
Installieren
JavaScript ist deaktiviert. Für eine bessere Darstellung aktiviere bitte JavaScript in deinem Browser, bevor du fortfährst.
Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden.
Du solltest ein Upgrade durchführen oder einen
alternativen Browser
verwenden.
Antworten auf deine Fragen:
Neues Thema erstellen
Start
Forum
Sonstiges
Webdesign, Webentwicklung & Programmierung
PHP, Javascript, jQuery, Ajax, nodeJS, MySQL...
Thums aus Bildern erstellen und dann per jquery auslesen
Beitrag
<blockquote data-quote="Konzertjunkie" data-source="post: 1596292" data-attributes="member: 261332"><p><strong>AW: Thums aus Bildern erstellen und dann per jquery auslesen</strong></p><p></p><p>Hier die Dukumentation von pixlie <img src="/styles/default/xenforo/smilies/zwinker.gif" class="smilie" loading="lazy" alt=";)" title="Wink ;)" data-shortname=";)" /> </p><p>[CODE]<?php</p><p> ob_start();</p><p> clearstatcache();</p><p> @ini_set("max_execution_time", 300);</p><p> /*</p><p> Pixlie ist Donationware und wird unter der MIT Lizenz zur Verfuegung gestellt.</p><p></p><p> Donationware:</p><p></p><p> Bei der Donationware (von engl. "donation": Spende) handelt es sich um kostenlose</p><p> Software, wobei der Autor um eine Spende in beliebiger Hoehe bittet, um die durch</p><p> Weiterentwicklung oder Verbreitung der Software entstehenden Kosten zu</p><p> kompensieren (zum Beispiel Server-Kosten).</p><p> Wenn das eingesetzte Programm die Erwartungen erfuellt, und man es regelmaessig</p><p> im Einsatz hat, solle man eine dementsprechende Verguetung in Erwaegung ziehen.</p><p></p><p> MIT Lizenz (Deutsche Uebersetzung)</p><p></p><p> Copyright (c) 2008 Steffen Hagdorn</p><p></p><p> Hiermit wird unentgeltlich, jeder Person, die eine Kopie der Software</p><p> und der zugehoerigen Dokumentationen (die "Software") erhaelt, die Erlaubnis</p><p> erteilt, uneingeschraenkt zu benutzen, inklusive und ohne Ausnahme, dem Recht,</p><p> sie zu verwenden, kopieren, aendern, fusionieren, verlegen, verbreiten,</p><p> unterlizenzieren und/oder zu verkaufen, und Personen, die diese Software</p><p> erhalten, diese Rechte zu geben, unter den folgenden Bedingungen:</p><p></p><p> Der obige Urheberrechtsvermerk und dieser Erlaubnisvermerk sind in alle</p><p> Kopien oder Teilkopien der Software beizulegen.</p><p></p><p> DIE SOFTWARE WIRD OHNE JEDE AUSDRUeCKLICHE ODER IMPLIZIERTE GARANTIE</p><p> BEREITGESTELLT, EINSCHIESSLICH DER GARANTIE ZUR BENUTZUNG FUeR DEN</p><p> VORGESEHENEN ODER EINEM BESTIMMTEN ZWECK SOWIE JEGLICHER</p><p> RECHTSVERLETZUNG, JEDOCH NICHT DARAUF BESCHRAeNKT. IN KEINEM</p><p> FALL SIND DIE AUTOREN ODER COPYRIGHTINHABER FUeR JEGLICHEN SCHADEN</p><p> ODER SONSTIGE ANSPRUCH HAFTBAR ZU MACHEN, OB INFOLGE DER ERFUeLLUNG</p><p> VON EINEM VERTRAG, EINEM DELIKT ODER ANDERS IM ZUSAMMENHANG MIT</p><p> DER BENUTZUNG ODER SONSTIGE VERWENDUNG DER SOFTWARE ENTSTANDEN.</p><p></p><p></p><p> Inhalt / Aufbau:</p><p> ------------------------------------------------------</p><p> 1. Konfiguration</p><p> - 1.1 Bildgroessen</p><p> - 1.2 Sortierung</p><p> - 1.3 Sonstige Einstellungen</p><p> - 1.4 Systemkonfiguration</p><p> 2. Sprachausgaben</p><p> 3. Fehlerbehandlung</p><p> 4. Umgebungs- und Installationspruefung</p><p> 5. Entgegennehmen der Query-Variable</p><p> 6. Auf Hackerangriffe pruefen</p><p> 7. Umwandlung in UTF-8</p><p> 8. Verarbeitung eine Fotos</p><p> - 8.1 Angeforderte Bildgroesse der Query Variable pruefen</p><p> - 8.2 Cache Dateinamen und Dateipfade generieren</p><p> - 8.3 Pruefen ob Datei schon im Cache liegt</p><p> - 8.3.1 Berechne Bilder nach dem Typ "cut"</p><p> - 8.3.2 Berechne Bilder nach dem Typ "uncut"</p><p> - 8.3.3 Berechne Bilder nach dem Typ "bestfit"</p><p> - 8.4 Ausgabe des Bildes</p><p> 9. Verarbeitung eines Ordners</p><p> - 9.1 Weiche f¸r Ordner / Bild</p><p> - 9.2 JPG Grunddaten lesen</p><p> - 9.3 IPTC Metadaten lesen</p><p> - 9.4 EXIF Metadaten lesen</p><p> - 9.5 Ordner Grunddaten lesen</p><p> - 9.6 Sortierung der Datentabellen</p><p> - 9.7 Ausgabe via JSON</p><p></p><p></p><p> *************************************************************************************************</p><p> *************************************** 1. Konfiguration ****************************************</p><p> *************************************************************************************************</p><p></p><p></p><p> **************************************** 1.1 Bildgroessen *****************************************</p><p></p><p> Vordefinierte Standardbildgroessen:</p><p> s = small | cut | 75/75</p><p> t = thumbnail | uncut | max 100</p><p> m = medium | uncut | max 240</p><p> d = default | uncut | max 500 (default)</p><p> b = big | uncut | max 1024</p><p> o = original | none | original</p><p></p><p> Unterschied "cut" und "uncut":</p><p> Wird der Bildberechnungstyp "cut" verwendet, wird das Bild auf eine feste Hoehe und Breite</p><p> aus dem Originalbild ohne verzerren ausgeschnitten. Hierfuer die Groesse in Form</p><p> von "hoehe/breite" angegeben. Beispiel: Einstellung 100/50 | Originalbild 400/800 = Ausgabe 100/50</p><p></p><p> Beim Bildberechnungstyp "uncut" wird das Bild unter beibehaltung der Seitenlaengen auf die</p><p> gewuenschte Groesse angepasst. Es muss nur der Wert angegeben werden, wie lange eine Seitenlaenge</p><p> maximal sein darf. Beispiel: Einstellung 100 | Originalbild 400/800 = Ausgabe 50/100</p><p></p><p> Benutzung 'overwrite_cache':</p><p> Zum Testen ist es sinnvoll 'overwrite_cache' auf 'on' zu stellen. Bei jedem Seitenaufruf wird der</p><p> Cache wieder mit neuen Daten ueberschrieben! Diese Option ist unter 1.3 (Sonstige Einstellungen)</p><p> zu finden.</p><p> HINWEIS: DASS DER CACHE GENUTZT WIRD, MUSS DIESE EINSTELLUNG IM LIVE-BETRIEB WIEDER AUF 'off' STEHEN!</p><p></p><p> Frei definierbare Bildgroessen:</p><p> Nachfolgend koennen beliebig viele eigene Bildgroessen definiert werden. Die Bildabkuerzung s,t,m,d,b und o</p><p> sind schon vorbelegt! Das Kuerzel des Bildtyps darf nur ein Zeichen sein!</p><p></p><p> LEERE DEN CACHE-ORDER NACH DEM AeNDERN DIESER WERTE ODER VERWENDE 'overwrite_cache'!*/</p><p></p><p> $pixlie_imageconfig = array(</p><p> 'x' => array('type'=>'cut','size'=>'80,80'), //Beispiel fuer Zugeschnittenes Bild mit 120 x 90 Pixel</p><p> 'y' => array('type'=>'uncut','size'=>'600'), //Beispiel fuer ein in der Groesse angepasstes Bild mit max 600 Pixel</p><p> 'z' => array('type'=>'bestfit','size'=>'900,600') //Beispiel fuer ein in der Groesse angepasstes Bild mit max 900 x 600 Pixel, wobei die H?he dem zweiten Wert angepasst wird. Hochformat = H?he von Querformat. M?glich ist auch nur eine Gr?flenangabe.</p><p> );</p><p></p><p></p><p> /**************************************** 1.2 Sortierung ****************************************</p><p></p><p> Beispiele fuer die Sortierung:</p><p></p><p> 1. Sortiere zuerst absteigend nach dem Hochladezeitpunkt, danach absteigend nach dem Speicherdatum</p><p> des Originalfotos. Behandle beide Datumsangaben als Zahlen.</p><p> first: ctime, SORT_DESC, SORT_NUMERIC</p><p> second: mtime, SORT_DESC, SORT_NUMERIC</p><p></p><p> 2. Sortiere zuerst aufsteigend nach dem Dateinamen, danach absteigend nach dem IPTC Feld "Stadt".</p><p> Behandle beide Werte als Zeichenkette. Eine Liste der unterstuetzten IPTC Werte ist weiter unten</p><p> bei "$pixlie_iptc_codes" zu finden.</p><p> first: name , SORT_ASC, SORT_STRING</p><p> second: iptc_city, SORT_DESC, SORT_STRING</p><p></p><p> 3. Sortiere zuerst absteigend nach dem EXIF-Datum, danach aufsteigend nach Name.</p><p> Behandle beide Werte als Zeichenkette. Das EXIF-Datum muss als String angegeben werden, da</p><p> es keine numerische Zahl ist.</p><p> first: exif_exif_datetimeoriginal, SORT_DESC, SORT_STRING</p><p> second: name, SORT_ASC, SORT_STRING</p><p> */</p><p></p><p> $pixlie_sortconfig = array(</p><p> // name, ctime, mtime, atime oder jedes iptc bzw. exif Feld</p><p> 'sort_file_first_row'=>"ctime",</p><p> // absteigend: SORT_DESC, aufsteigend: SORT_ASC</p><p> 'sort_file_first_order'=>SORT_DESC,</p><p> // regul?r: SORT_REGULAR, numerisch: SORT_NUMERIC, alphanumerisch: SORT_STRING</p><p> // auf SORT_STRING setzen, wenn EXIF/IPTC Originaldatum (z.B. 'exif_exif_datetimeoriginal') verwendet wird</p><p> 'sort_file_first_type'=>SORT_NUMERIC,</p><p> // name, ctime, mtime, atime oder jedes iptc bzw. exif Feld</p><p> 'sort_file_second_row'=>'mtime',</p><p> // absteigend: SORT_DESC, aufsteigend: SORT_ASC</p><p> 'sort_file_second_order'=>SORT_DESC,</p><p> // SORT_REGULAR, SORT_NUMERIC, SORT_STRING</p><p> 'sort_file_second_type'=>SORT_NUMERIC,</p><p> // name, ctime, mtime, atime oder jedes iptc bzw. exif Feld</p><p> 'sort_dir_first_row'=>'name',</p><p> // absteigend: SORT_DESC, aufsteigend: SORT_ASC</p><p> 'sort_dir_first_order'=>SORT_ASC,</p><p> // SORT_REGULAR, SORT_NUMERIC, SORT_STRING</p><p> 'sort_dir_first_type'=>SORT_STRING,</p><p> // name, ctime, mtime, atime oder jedes iptc bzw. exif Feld</p><p> 'sort_dir_second_row'=>'ctime',</p><p> // absteigend: SORT_DESC, aufsteigend: SORT_ASC</p><p> 'sort_dir_second_order'=>SORT_DESC,</p><p> // SORT_REGULAR, SORT_NUMERIC, SORT_STRING</p><p> 'sort_dir_second_type'=>SORT_NUMERIC</p><p> );</p><p></p><p></p><p> /********************************** 1.3 Sonstige Einstellungen **********************************</p><p></p><p> WICHTIG: STELLEN SIE IM LIVE BETRIEB NACH DER ENTWICKLUNG 'overwrite_cache' AUF AUS!!!</p><p> Hinweis zu 'http_method': Viele Javascript Bibliotheken koennen Pixlie PATHINFO nicht umsetzen. */</p><p></p><p> $manual_subpath_var = 'bildpfad'; //Variable des manuellen Pfades</p><p> $pixlie_userconfig = array(</p><p> 'overwrite_cache' => 'off', //Cache bei jedem Aufruf neu erstellen: on = an, off = aus</p><p> 'pic_image_quality' => 90, //Bildqualitaet: 0 = schlechteste , 100 = beste</p><p> 'show_metadata_iptc' => 'on', //IPTC-Ausgabe: on = an, off = aus</p><p> 'show_metadata_exif' => 'on', //EXIF-Ausgabe: on = an, off = aus</p><p> 'dir_cache' => dirname(__FILE__).'/cache', //Pfad zum Cache Verzeichnis</p><p> 'dir_upload' => dirname(__FILE__).'/upload'.</p><p> ((isset($manual_subpath)&&$manual_subpath!='')?'/'.$manual_subpath:((isset($_GET[$manual_subpath_var])&&$_GET[$manual_subpath_var]!='')?'/'.$_GET[$manual_subpath_var]:'')), //Pfad zum Upload Verzeichnis</p><p> 'http_method' => 'GET', //Uebermittlungsmethode der Query-Variable: PATHINFO oder GET</p><p> 'http_var_name' => 'q', //Name der Query-Variablen die per http_method uebergeben wird</p><p> 'response_type' => 'php', //Art der Antwort: direkt = json, include = php</p><p> 'relative_path' => '', //Ist Strato Dein Hoster oder sollten die automatisch generierten Pfade nicht stimmen, trage hier den relativen Pfad ohne abschlieflenden Slash zur pixlie.php ein (z.B. '/pixlie')</p><p> 'use_dims' => false, //Wenn Du die Bildabmessungen in der Ausgabe ben?tigst, stelle diesen Wert auf true [ true | false ]. Standard: false</p><p> 'use_origfilename_as_save' => false, //Originaldateinamen beim Speichern anbieten? [ true | false ]. Auf false stellen, wenn keine Lightbox verwendet wird, da sonst das Bild als Download angeboten und nicht direkt angezeigt wird.</p><p> );</p><p></p><p> //Namen der IPTC Felder in der Tabelle "$pixlie_table_file"</p><p> $pixlie_iptc_codes = array(</p><p> '2#005'=>'iptc_object_name', //Name des Objektes</p><p> '2#007'=>'iptc_edit_status', //Der Bearbeitungsstatus</p><p> '2#010'=>'iptc_priority', //Die Prioritaet</p><p> '2#015'=>'iptc_category', //Die Kategorie</p><p> '2#020'=>'iptc_supplemental_category', //Zusaetzliche Kategorien wenn vorhanden</p><p> '2#025'=>'iptc_keywords', //Keywoerter fuer die Suche</p><p> '2#030'=>'iptc_release_date', //Datum des Bildes</p><p> '2#035'=>'iptc_release_time', //Uhrzeit des Bildes</p><p> '2#040'=>'iptc_special_instructions', //Besondere Hinweise zu dem Bild</p><p> '2#045'=>'iptc_reference_service', //Referenzen auf den Bilderservice</p><p> '2#047'=>'iptc_reference_date', //Referenzen auf das Datum (Bildarchiv)</p><p> '2#050'=>'iptc_reference_number', //Referenznummer fuer die Identifikation</p><p> '2#055'=>'iptc_created_date', //Datum des Fotos</p><p> '2#060'=>'iptc_created_time', //Uhrzeit des Fotos</p><p> '2#062'=>'iptc_digital_creation_date', //Datum des Fotos</p><p> '2#063'=>'iptc_digital_creation_time', //Uhrzeit des Fotos</p><p> '2#065'=>'iptc_originating_program', //Programm mit dem das Foto erstellt wurde</p><p> '2#070'=>'iptc_program_version', //Version des Programms</p><p> '2#080'=>'iptc_byline', //Name des Autors (Fotografen)</p><p> '2#085'=>'iptc_byline_title', //Titel des Fotografen</p><p> '2#090'=>'iptc_city', //Stadt</p><p> '2#092'=>'iptc_sublocation', //Lokation oder Ort</p><p> '2#095'=>'iptc_province_state', //Bundesland</p><p> '2#100'=>'iptc_country_code', //Laendercode nach [ISO 3166-1]</p><p> '2#101'=>'iptc_country', //Laendername</p><p> '2#105'=>'iptc_headline', //Titel des Fotos</p><p> '2#115'=>'iptc_source', //Quelle</p><p> '2#116'=>'iptc_copyright', //Copyright Text</p><p> '2#118'=>'iptc_contact', //Internetadresse</p><p> '2#120'=>'iptc_caption', //Beschreibung</p><p> '2#122'=>'iptc_caption_writer', //Autor der Beschreibung</p><p> '2#150'=>'iptc_content_preview', //Vorschau</p><p> '2#200'=>'iptc_custom_field_01', //Frei verwendbare Textfelder</p><p> '2#201'=>'iptc_custom_field_02', //Frei verwendbare Textfelder</p><p> '2#202'=>'iptc_custom_field_03', //Frei verwendbare Textfelder</p><p> '2#203'=>'iptc_custom_field_04', //Frei verwendbare Textfelder</p><p> '2#204'=>'iptc_custom_field_05', //Frei verwendbare Textfelder</p><p> '2#205'=>'iptc_custom_field_06', //Frei verwendbare Textfelder</p><p> '2#206'=>'iptc_custom_field_07', //Frei verwendbare Textfelder</p><p> '2#207'=>'iptc_custom_field_08', //Frei verwendbare Textfelder</p><p> '2#208'=>'iptc_custom_field_09', //Frei verwendbare Textfelder</p><p> '2#209'=>'iptc_custom_field_10', //Frei verwendbare Textfelder</p><p> '2#210'=>'iptc_custom_field_11', //Frei verwendbare Textfelder</p><p> '2#211'=>'iptc_custom_field_12', //Frei verwendbare Textfelder</p><p> '2#212'=>'iptc_custom_field_13', //Frei verwendbare Textfelder</p><p> '2#213'=>'iptc_custom_field_14', //Frei verwendbare Textfelder</p><p> '2#214'=>'iptc_custom_field_15', //Frei verwendbare Textfelder</p><p> '2#215'=>'iptc_custom_field_16', //Frei verwendbare Textfelder</p><p> '2#216'=>'iptc_custom_field_17', //Frei verwendbare Textfelder</p><p> '2#217'=>'iptc_custom_field_18', //Frei verwendbare Textfelder</p><p> '2#218'=>'iptc_custom_field_19', //Frei verwendbare Textfelder</p><p> '2#219'=>'iptc_custom_field_20', //Frei verwendbare Textfelder</p><p> '2#230'=>'iptc_document_notes', //Hinweise zu dem Dokument</p><p> '2#231'=>'iptc_document_history', //Historie des Dokumentes</p><p> '2#232'=>'iptc_exif_camera_info' //Binaere EXIF Kameradaten (nicht editierbar)</p><p> );</p><p></p><p></p><p> /*********************************** 1.4 Systemkonfiguration*************************************/</p><p></p><p> $pixlie_sysconfig = array(</p><p> 'php_req_vers' => '4.0.0', //erforderliche PHP Version</p><p> 'manual_subpath_var' => $manual_subpath_var //manuelle Pfad. Wird automatisch ¸bernommen.</p><p> );</p><p></p><p> /* Bitte aender diese Standardtisierten Bildwerte nicht. Eigene koennen weiter oben unter dem</p><p> Punkt 1.1 (Bildgroessen) erstellt werden. */</p><p> $pixlie_sys_imageconfig = array(</p><p> 's' => array('type'=>'cut', 'size'=>'75,75'),</p><p> 't' => array('type'=>'uncut','size'=>'100'),</p><p> 'm' => array('type'=>'uncut','size'=>'240'),</p><p> 'd' => array('type'=>'uncut','size'=>'500'),</p><p> 'b' => array('type'=>'uncut','size'=>'1024'),</p><p> 'o' => array('type'=>'none', 'size'=>'original'),</p><p> );</p><p></p><p> $pixlie_image_sizes = array_merge($pixlie_sys_imageconfig,$pixlie_imageconfig);</p><p> $pixlie_config = array_merge($pixlie_userconfig,$pixlie_sortconfig,$pixlie_sysconfig);</p><p></p><p> // PHP Remote Config</p><p> if(isset($response_type)){</p><p> switch($response_type){</p><p> case 'php': $pixlie_config['response_type'] = 'php';</p><p> break;</p><p> case 'json': $pixlie_config['response_type'] = 'json';</p><p> break;}}</p><p></p><p></p><p> /*************************************** 2. Sprachausgaben **************************************/</p><p></p><p> $pixlie_lang = array(</p><p> 'conf_cache_dir_read' => "Das Cache-Verzeichnis <b>".$pixlie_config['dir_cache']."</b> existiert nicht.",</p><p> 'conf_cache_dir_write' => "Cache-Verzeichnis <b>".$pixlie_config['dir_cache']."</b> ok. Pixlie benoetigt jedoch schreibenden Zugriff auf das Cache-Verzeichnis. Bitte das Recht 777 auf das Cache-Verzeichnis setzen.",</p><p> 'conf_upload_dir_read' => "Das Upload-Verzeichnis <b>".$pixlie_config['dir_upload']."</b> fuer die Bilder existiert nicht.",</p><p> 'conf_upload_dir_write' => "Upload-Verzeichnis <b>".$pixlie_config['dir_upload']."</b> ok. Pixlie benoetigt jedoch lesenden Zugriff auf das Upload-Verzeichnis. Bitte das Recht 755 auf das Upload-Verzeichnis setzen.",</p><p> 'conf_php_vers' => "Pixlie benoetigt mindestens PHP in der Version <b>".$pixlie_config['php_req_vers']."</b>.",</p><p> 'conf_http_method' => "Der Wert http_method <b>(".$pixlie_config['http_method'].")</b> in der Config hat einen falschen Wert.",</p><p> 'conf_xss_prot' => "Der XSS Schutz hat eine nicht gueltige Zeichenfolge in der Query erkannt.",</p><p> 'pic_fileexists_false' => "Das angeforderte Bild existiert nicht.",</p><p> 'pic_rendertype_false' => "Der hinterlegte Rendertyp existiert nicht.",</p><p> 'dir_opendir_false' => "Das angeforderte Verzeichnis kann nicht gelesen werden.",</p><p> 'exif_function_not_exist' => "Die Funktion <b>exif_read_data</b> konnte nicht gefunden werden. Bitte <b>show_metadata_exif</b> in der Pixlie-Konfiguration auf <b>'off'</b> stellen."</p><p> );</p><p></p><p></p><p> /************************************** 3. Fehlerbehandlung *************************************/</p><p></p><p> if(function_exists('pixlie_error')==false){</p><p> function pixlie_error($msg){</p><p> global $pixlie_config;</p><p> clearstatcache();</p><p> if ($pixlie_config['response_type'] == 'json') {</p><p> $pixlie_table_env['status'] = false;</p><p> $pixlie_table_env['errormsg'] = $msg;</p><p> die(json_encode(array('pixlie_table_env'=>$pixlie_table_env)));}</p><p> else{</p><p> die($msg);}}}</p><p></p><p></p><p> /***************************** 4. Umgebungs- und Installationspruefung ***************************/</p><p></p><p> // Windows oder *Nix</p><p> $bIsNix = (preg_match("/^([\/\\\\]|[a-zA-Z]:[\/\\\\])/", __FILE__)) ? false : true;</p><p></p><p> //cache check</p><p> if(!(is_dir($pixlie_config['dir_cache']))) {</p><p> pixlie_error($pixlie_lang['conf_cache_dir_read']);}</p><p> elseif(!(is_readable($pixlie_config['dir_cache'])) || !(is_writable($pixlie_config['dir_cache'])) || ($bIsNix && !(is_executable($pixlie_config['dir_cache'])))) {</p><p> pixlie_error($pixlie_lang['conf_cache_dir_write']);}</p><p></p><p> //upload check</p><p> if(!(is_dir($pixlie_config['dir_upload']))) {</p><p> pixlie_error($pixlie_lang['conf_upload_dir_read']);}</p><p> elseif(!(is_readable($pixlie_config['dir_upload'])) || ($bIsNix && !(is_executable($pixlie_config['dir_upload'])))) {</p><p> pixlie_error($pixlie_lang['conf_upload_dir_write']);}</p><p></p><p> //PHP version-check</p><p> if( phpversion() < $pixlie_config['php_req_vers'] ){</p><p> pixlie_error($pixlie_lang['conf_php_vers']);}</p><p></p><p></p><p> /****************************** 5. Entgegennehmen der Query-Variable ****************************/</p><p></p><p> switch ($pixlie_config['http_method']){</p><p> case 'GET': if(isset($_GET[$pixlie_config['http_var_name']])){</p><p> $pixlie_query = $_GET[$pixlie_config['http_var_name']];}</p><p> else{</p><p> $pixlie_query = '';}</p><p> break;</p><p> case 'PATHINFO': if(isset($_SERVER['PATH_INFO'])){</p><p> $pixlie_query = $_SERVER['PATH_INFO'];}</p><p> else{</p><p> $pixlie_query = '';}</p><p> break;</p><p> default: pixlie_error($pixlie_lang['conf_http_method']);</p><p> break;}</p><p></p><p></p><p> /********************************* 6. Auf Hackerangriffe pruefen *********************************/</p><p></p><p> //cross-site scripting (XSS-Schutz)</p><p> $pixlie_query = preg_replace('/\.\./','',$pixlie_query);</p><p> $pixlie_query = preg_replace('/\/\//','/',$pixlie_query);</p><p> if ((preg_match("/<[^>]*script*\"?[^>]*>/", $pixlie_query)) ||</p><p> (preg_match("/<[^>]*object*\"?[^>]*>/", $pixlie_query)) ||</p><p> (preg_match("/<[^>]*iframe*\"?[^>]*>/", $pixlie_query)) ||</p><p> (preg_match("/<[^>]*applet*\"?[^>]*>/", $pixlie_query)) ||</p><p> (preg_match("/<[^>]*meta*\"?[^>]*>/", $pixlie_query)) ||</p><p> (preg_match("/<[^>]*style*\"?[^>]*>/", $pixlie_query)) ||</p><p> (preg_match("/<[^>]*form*\"?[^>]*>/", $pixlie_query)) ||</p><p>// (preg_match("/\([^>]*\"?[^)]*\)/", $pixlie_query)) || // auskommentiert, um Dateinamen mit Klammern zu erlauben</p><p> (preg_match("/\"/", $pixlie_query))) {</p><p> pixlie_error($pixlie_lang['conf_xss_prot']);die();}</p><p></p><p></p><p> /************************************ 7. Umwandlung in UTF-8 ************************************/</p><p></p><p> $pixlie_query = utf8_decode($pixlie_query);</p><p></p><p></p><p> /*************************************************************************************************</p><p> ********************************* 8. Verarbeitung eines Fotos ***********************************</p><p> ************************************************************************************************/</p><p></p><p> if(preg_match('/(.jpg)$/i', $pixlie_query)){</p><p></p><p></p><p> /********************** 8.1 Angeforderte Bildgroesse der Query Variable pruefen ********************/</p><p></p><p> if(false !== preg_match('/.*_(.)(\....)/',$pixlie_query,$pixlie_reg_picsize)){</p><p> $pixlie_item_picsize = $pixlie_reg_picsize[1];</p><p> $pixlie_item_extension = $pixlie_reg_picsize[2];</p><p> $pixlie_query = preg_replace('/_'.$pixlie_item_picsize.$pixlie_item_extension.'/' ,</p><p> $pixlie_item_extension,$pixlie_query);}</p><p> else{</p><p> $pixlie_item_picsize = 'd';}</p><p></p><p></p><p> /************************ 8.2 Cache Dateinamen und Dateipfade generieren ************************/</p><p></p><p> $pixlie_item_path = $pixlie_config['dir_upload'].$pixlie_query;</p><p> $pixlie_cache_name = md5($pixlie_query).'_'.$pixlie_item_picsize.'.jpg';</p><p> $pixlie_cache_path = $pixlie_config['dir_cache'].'/'.$pixlie_cache_name;</p><p></p><p></p><p> /*************************** 8.3 Pruefen ob Datei schon im Cache liegt ***************************/</p><p></p><p> if(file_exists($pixlie_item_path)){</p><p> if((file_exists($pixlie_cache_path)==false)||($pixlie_config['overwrite_cache']=='on')){</p><p> switch ($pixlie_image_sizes[$pixlie_item_picsize]['type']){</p><p></p><p></p><p> /*************************** 8.3.1 Berechne Bilder nach dem Typ "cut" ***************************/</p><p></p><p> case 'cut':</p><p> $pixlie_render_size = explode(',',$pixlie_image_sizes[$pixlie_item_picsize]['size']);</p><p> @ini_set('memory_limit', '50M');</p><p> $src_img = imagecreatefromjpeg($pixlie_item_path);</p><p> if((imagesy($src_img) / imagesx($src_img) * $pixlie_render_size[0]) >$pixlie_render_size[1] ){</p><p> $src_w = imagesx($src_img);</p><p> $src_h = round((imagesx($src_img)/$pixlie_render_size[0])*$pixlie_render_size[1]);</p><p> $src_x = (imagesy($src_img)-$src_h) / 4;</p><p> $src_y = 0;}</p><p> else{</p><p> $src_h = imagesy($src_img);</p><p> $src_w = round((imagesy($src_img)/$pixlie_render_size[1])*$pixlie_render_size[0]);</p><p> $src_y = (imagesx($src_img)-$src_w) / 2;</p><p> $src_x = 0;}</p><p> $dst_img = imagecreatetruecolor($pixlie_render_size[0],$pixlie_render_size[1]);</p><p> imagecopyresampled($dst_img,$src_img,0,0,$src_y,$src_x,$pixlie_render_size[0],</p><p> $pixlie_render_size[1],$src_w,$src_h);</p><p> imagedestroy($src_img);</p><p> imagejpeg($dst_img, $pixlie_cache_path, $pixlie_config['pic_image_quality']);</p><p> imagedestroy($dst_img);</p><p> break;</p><p></p><p></p><p> /************************** 8.3.2 Berechne Bilder nach dem Typ "uncut" **************************/</p><p></p><p> case 'uncut':</p><p> $pixlie_render_size = $pixlie_image_sizes[$pixlie_item_picsize]['size'];</p><p> @ini_set('memory_limit', '50M');</p><p> $src_img = imagecreatefromjpeg($pixlie_item_path);</p><p> if(imagesx($src_img)==imagesy($src_img)){</p><p> $dst_w = $pixlie_render_size;</p><p> $dst_h = $pixlie_render_size;}</p><p> elseif (imagesx($src_img) > imagesy($src_img)){</p><p> $dst_w = round( $pixlie_render_size / imagesx($src_img) * imagesy($src_img));</p><p> $dst_h = $pixlie_render_size;}</p><p> else{</p><p> $dst_w = $pixlie_render_size;</p><p> $dst_h = round($pixlie_render_size / imagesy($src_img) * imagesx($src_img));}</p><p> $dst_img = imagecreatetruecolor($dst_h,$dst_w);</p><p> imagecopyresampled($dst_img,$src_img,0,0,0,0,$dst_h,$dst_w,imagesx($src_img),imagesy($src_img));</p><p> imagedestroy($src_img);</p><p> imagejpeg($dst_img, $pixlie_cache_path, $pixlie_config['pic_image_quality']);</p><p> imagedestroy($dst_img);</p><p> break;</p><p></p><p></p><p> /************************** 8.3.3 Berechne Bilder nach dem Typ "bestfit" ************************/</p><p></p><p> case 'bestfit':</p><p> if (strpos($pixlie_image_sizes[$pixlie_item_picsize]['size'],',')) {</p><p> $pixlie_render_size = explode(',',$pixlie_image_sizes[$pixlie_item_picsize]['size']);</p><p> } else {</p><p> $pixlie_render_size = array($pixlie_image_sizes[$pixlie_item_picsize]['size'],$pixlie_image_sizes[$pixlie_item_picsize]['size']);</p><p> }</p><p> @ini_set('memory_limit', '50M');</p><p> $src_img = imagecreatefromjpeg($pixlie_item_path);</p><p> // Ziel-Verh?ltnis aus H?he und Breite ermitteln</p><p> $relation = $pixlie_render_size[0]/$pixlie_render_size[1];</p><p> if(imagesx($src_img)==imagesy($src_img)){</p><p> // quadratisches Format: H?he und Breite auf den kleineren Wert setzen</p><p> $dst_w = min($pixlie_render_size[0],$pixlie_render_size[1]);</p><p> $dst_h = $dst_w;</p><p> } elseif (imagesx($src_img)/imagesy($src_img) == $relation ){</p><p> // Ziel-Verh?ltnis bereits vorhanden, Werte direkt ¸bernehmen</p><p> $dst_w = $pixlie_render_size[0];</p><p> $dst_h = $pixlie_render_size[1];</p><p> } elseif (imagesx($src_img)/imagesy($src_img) < $relation ){</p><p> // "hochformatiger" als Ziel-Verh?ltnis, H?he ¸bernehmen, Breite berechnen</p><p> $dst_w = round( $pixlie_render_size[1] * imagesx($src_img)/imagesy($src_img));</p><p> $dst_h = $pixlie_render_size[1];</p><p> } else {</p><p> // "querformatiger" als Ziel-Verh?ltnis, Breite ¸bernehmen, H?he berechnen</p><p> $dst_w = $pixlie_render_size[0];</p><p> $dst_h = round($pixlie_render_size[0] * imagesy($src_img)/imagesx($src_img));</p><p> }</p><p> $dst_img = imagecreatetruecolor($dst_w,$dst_h);</p><p> imagecopyresampled($dst_img,$src_img,0,0,0,0,$dst_w,$dst_h,imagesx($src_img),imagesy($src_img));</p><p> imagedestroy($src_img);</p><p> if ( isset( $plugins['watermark_uncut'] ) && $plugins['watermark_uncut'] ) {</p><p> include( $global_config['pluginspath'].'/watermark/watermark.php' ); // Einbinden des Wasserzeichens</p><p> $dst_img = watermark( $dst_img, 'uncut' ); // Wasserzeichen einbrennen, wenn eingestellt</p><p> }</p><p> if ( isset( $plugins['unsharpmask_uncut'] ) && $plugins['unsharpmask_uncut'] ) {</p><p> include( $global_config['pluginspath'].'/unsharpmask/unsharpmask.php' ); // Einbinden des "Unscharf Maskieren" Filters</p><p> $dst_img = UnsharpMask( $dst_img, 80, 0.7, 1 ); // image res, amount, radius, threshold</p><p> }</p><p> imagejpeg($dst_img, $pixlie_cache_path, $pixlie_config['pic_image_quality']);</p><p> imagedestroy($dst_img);</p><p> break;</p><p> case 'none': $pixlie_cache_path = $pixlie_item_path;</p><p> break;</p><p> default: pixlie_error($pixlie_lang['pic_rendertype_false']);;</p><p> break;}}</p><p></p><p></p><p> /*********************************** 8.4 Ausgabe des Bildes *************************************/</p><p></p><p> $xFilename = explode('/', $pixlie_query);</p><p> $xFilesize = filesize($pixlie_cache_path);</p><p> header("Pragma: public");</p><p> header("Expires: " . gmdate('D, d M Y H:i:s', time()+ 30*24*60*60) . " GMT");</p><p> header("Cache-Control: must-revalidate, post-check=0, pre-check=0");</p><p> header("Cache-Control: private",false);</p><p> header("Content-Type: image/jpeg");</p><p> if ($pixlie_config['use_origfilename_as_save'])</p><p> header("Content-Disposition: attachment; filename=\"".utf8_decode($xFilename[count($xFilename)-1])."\";");</p><p> header("Content-Transfer-Encoding: binary");</p><p> header("Content-Length: ".$xFilesize);</p><p> ob_clean(); // Patch: http://pixlie.de/forum/index.php?page=Thread&postID=2344#post2344</p><p> readfile($pixlie_cache_path);</p><p> //imagejpeg(imagecreatefromjpeg($pixlie_cache_path)); //alternativ</p><p> }</p><p> else{</p><p> pixlie_error($pixlie_lang['pic_fileexists_false']);}}</p><p> else{</p><p></p><p></p><p> /*************************************************************************************************</p><p> ******************************** 9. Verarbeitung eines Ordners **********************************</p><p> ************************************************************************************************/</p><p></p><p> $pixlie_table_file = array();</p><p> $pixlie_table_dir = array();</p><p> $pixlie_table_env = array();</p><p> $pixlie_key_counter_file = 0;</p><p> $pixlie_key_counter_dir = 0;</p><p> if($pixlie_dir_handle = @opendir($pixlie_config['dir_upload'].$pixlie_query)){</p><p></p><p></p><p> /********************************** 9.1 Weiche f¸r Ordner / Bild *********************************/</p><p></p><p> while(false !== ($pixlie_item_name = readdir($pixlie_dir_handle))){</p><p> if ($pixlie_item_name != "." && $pixlie_item_name != "..") {</p><p> $pixlie_item_path = $pixlie_config['dir_upload'].$pixlie_query.'/'.$pixlie_item_name;</p><p> if((filetype($pixlie_item_path)=='file')&&(preg_match('/(.jpg)$/i', $pixlie_item_name))){</p><p></p><p></p><p> /************************************* 9.2 JPG Grunddaten lesen *********************************/</p><p></p><p> $pixlie_item_key = $pixlie_key_counter_file;</p><p> $pixlie_key_counter_file ++;</p><p></p><p> $pixlie_table_file[$pixlie_item_key]['name'] =</p><p> utf8_encode(preg_replace('/\.jpg/i','',$pixlie_item_name));</p><p></p><p> $pixlie_link_file = urlencode($pixlie_table_file[$pixlie_item_key]['name']);</p><p> $pixlie_link_query = preg_replace('/%2F/','/',urlencode(utf8_encode($pixlie_query)));</p><p></p><p> if($pixlie_query==''){</p><p> $pixlie_table_file[$pixlie_item_key]['link_get'] =</p><p> '?'.$pixlie_config['http_var_name'].'=/'.$pixlie_link_file;</p><p> $pixlie_table_file[$pixlie_item_key]['link_pathinfo'] =</p><p> '/'.$pixlie_link_file;}</p><p> else{</p><p> $pixlie_table_file[$pixlie_item_key]['link_get'] =</p><p> '?'.$pixlie_config['http_var_name'].'='.$pixlie_link_query.'/'.$pixlie_link_file;</p><p> $pixlie_table_file[$pixlie_item_key]['link_pathinfo'] =</p><p> $pixlie_link_query.'/'.$pixlie_link_file;}</p><p></p><p> $pixlie_table_file[$pixlie_item_key]['atime'] = fileatime($pixlie_item_path);</p><p> $pixlie_table_file[$pixlie_item_key]['ctime'] = filectime($pixlie_item_path);</p><p> $pixlie_table_file[$pixlie_item_key]['mtime'] = filemtime($pixlie_item_path);</p><p> $pixlie_table_file[$pixlie_item_key]['size'] = filesize($pixlie_item_path);</p><p> preg_match('/.*(\....)/',$pixlie_item_name,$pixlie_reg_extension);</p><p> $pixlie_table_file[$pixlie_item_key]['extension'] = $pixlie_reg_extension[1];</p><p> if ($pixlie_config['use_dims']) {</p><p> $aDims = getimagesize($pixlie_item_path, $iptc_info);</p><p> $pixlie_table_file[$pixlie_item_key]['width'] = $aDims[0];</p><p> $pixlie_table_file[$pixlie_item_key]['height'] = $aDims[1];</p><p> $pixlie_table_file[$pixlie_item_key]['html'] = $aDims[3];</p><p> }</p><p></p><p></p><p> /*********************************** 9.3 IPTC Metadaten lesen ***********************************/</p><p></p><p> if($pixlie_config['show_metadata_iptc']=='on'){</p><p> if (!$pixlie_config['use_dims'])</p><p> getimagesize($pixlie_item_path, $iptc_info);</p><p> if(isset($iptc_info["APP13"])){</p><p> $iptc_data = iptcparse($iptc_info["APP13"]);</p><p> if(is_array($iptc_data)) {</p><p> foreach ($iptc_data as $iptc_key => $iptc_value){</p><p> if($iptc_key != '2#000'){</p><p> if(count($iptc_value)>1){</p><p> $pixlie_table_file[$pixlie_item_key][$pixlie_iptc_codes[$iptc_key]] =</p><p> utf8_encode(implode(',',$iptc_value));}</p><p> else{</p><p> @$pixlie_table_file[$pixlie_item_key][$pixlie_iptc_codes[$iptc_key]] =</p><p> utf8_encode($iptc_value[0]); }}}}}}</p><p></p><p></p><p> /*********************************** 9.4 EXIF Metadaten lesen ***********************************/</p><p></p><p> if($pixlie_config['show_metadata_exif']=='on') {</p><p> if (function_exists('exif_read_data')) {</p><p> $exif_data = exif_read_data($pixlie_item_path ,1, true);</p><p> if($exif_data!=false){</p><p> foreach ($exif_data as $exif_key => $exif_section) {</p><p> if ((stristr($exif_key,'makernote')== false)) {</p><p> foreach ($exif_section as $exif_name => $exif_value) {</p><p> if((stristr($exif_name,'makernote')== false)&&(stristr($exif_name,'usercomment')== false)&&</p><p> (stristr($exif_name,'undefined')== false)){</p><p> $pixlie_table_file[$pixlie_item_key]['exif_'.strtolower($exif_key).'_'.</p><p> strtolower($exif_name)] = ((is_array($exif_value))?$exif_value:utf8_encode($exif_value)); }}}}} //$exif_value could be array</p><p> } else</p><p> pixlie_error($pixlie_lang['exif_function_not_exist']);</p><p> }} elseif(filetype($pixlie_item_path)=='dir'){</p><p></p><p></p><p> /*********************************** 9.5 Ordner Grunddaten lesen ********************************/</p><p></p><p> $pixlie_item_key = $pixlie_key_counter_dir;</p><p> $pixlie_key_counter_dir ++;</p><p></p><p> $pixlie_link_file = urlencode(utf8_encode($pixlie_item_name));</p><p> $pixlie_link_query = preg_replace('/%2F/','/',urlencode(utf8_encode($pixlie_query)));</p><p></p><p> if($pixlie_query==''){</p><p> $pixlie_table_dir[$pixlie_item_key]['link_get'] =</p><p> '?'.$pixlie_config['http_var_name'].'=/'.$pixlie_link_file;</p><p> $pixlie_table_dir[$pixlie_item_key]['link_pathinfo'] = '/'.$pixlie_link_file;}</p><p> else{</p><p> $pixlie_table_dir[$pixlie_item_key]['link_get'] =</p><p> '?'.$pixlie_config['http_var_name'].'='.$pixlie_link_query.'/'.$pixlie_link_file;</p><p> $pixlie_table_dir[$pixlie_item_key]['link_pathinfo'] =</p><p> $pixlie_link_query.'/'.$pixlie_link_file;}</p><p> $pixlie_table_dir[$pixlie_item_key]['name'] = utf8_encode($pixlie_item_name);</p><p> $pixlie_table_dir[$pixlie_item_key]['atime'] = fileatime($pixlie_item_path);</p><p> $pixlie_table_dir[$pixlie_item_key]['ctime'] = filectime($pixlie_item_path);</p><p> $pixlie_table_dir[$pixlie_item_key]['mtime'] = filemtime($pixlie_item_path);}}}</p><p></p><p> closedir($pixlie_dir_handle);</p><p> $pixlie_table_env['status'] = true;</p><p> $pixlie_table_env['numberof_file'] = count($pixlie_table_file);</p><p> $pixlie_table_env['numberof_dir'] = count($pixlie_table_dir);</p><p> $pixlie_table_env['query'] = utf8_encode($pixlie_query);</p><p></p><p> $__FILE__ = (substr($_SERVER["DOCUMENT_ROOT"], 0, strlen('/kunden')) == '/kunden') ? '/kunden'.__FILE__ : __FILE__; // 1&1 workaround</p><p> if ( $pixlie_config['relative_path'] != '' ) {</p><p> $relpath = $pixlie_config['relative_path'].((substr($pixlie_config['relative_path'], -1) != '/') ? '/' : '');</p><p> } else {</p><p> $fullpath = str_replace('\\', '/', dirname($__FILE__));</p><p> $fullpath = $fullpath.((substr($fullpath, -1) != '/') ? '/' : '');</p><p> $istartpos = strpos($fullpath, $_SERVER["DOCUMENT_ROOT"]);</p><p> $iendpos = $istartpos + strlen(str_replace('\\', '/', $_SERVER["DOCUMENT_ROOT"]));</p><p> $relpath = substr($fullpath, $iendpos);</p><p> $relpath .= (substr($relpath, -1) != '/') ? '/' : '';</p><p> }</p><p> $pixlie_table_env['path_pixlie'] = 'http://'.$_SERVER['HTTP_HOST'].</p><p> ((substr($_SERVER['HTTP_HOST'],-1) != '/' && substr($relpath,0,1) != '/')?'/':'').</p><p> $relpath.basename($__FILE__);</p><p> }</p><p> else{</p><p> pixlie_error($pixlie_lang['dir_opendir_false']);}</p><p></p><p></p><p> /******************************* 9.6 Sortierung der Datentabellen *******************************/</p><p></p><p> if(count($pixlie_table_file)>1){</p><p> foreach ($pixlie_table_file as $pixlie_sort_key => $pixlie_sort_row){</p><p> $pixlie_first_sort_row[$pixlie_sort_key] = @$pixlie_sort_row[$pixlie_config['sort_file_first_row']];</p><p> $pixlie_second_sort_row[$pixlie_sort_key] = @$pixlie_sort_row[$pixlie_config['sort_file_second_row']];}</p><p> array_multisort($pixlie_first_sort_row, $pixlie_config['sort_file_first_order'],</p><p> $pixlie_config['sort_file_first_type'], $pixlie_second_sort_row,</p><p> $pixlie_config['sort_file_second_order'], $pixlie_config['sort_file_second_type'],</p><p> $pixlie_table_file);</p><p> unset($pixlie_first_sort_row,$pixlie_second_sort_row);}</p><p> if(count($pixlie_table_dir)>1){</p><p> foreach ($pixlie_table_dir as $pixlie_sort_key => $pixlie_sort_row){</p><p> $pixlie_first_sort_row[$pixlie_sort_key] = @$pixlie_sort_row[$pixlie_config['sort_dir_first_row']];</p><p> $pixlie_second_sort_row[$pixlie_sort_key] = @$pixlie_sort_row[$pixlie_config['sort_dir_second_row']];}</p><p> array_multisort($pixlie_first_sort_row, $pixlie_config['sort_dir_first_order'],</p><p> $pixlie_config['sort_dir_first_type'], $pixlie_second_sort_row,</p><p> $pixlie_config['sort_dir_second_order'], $pixlie_config['sort_dir_second_type'],</p><p> $pixlie_table_dir);</p><p> unset($pixlie_first_sort_row,$pixlie_second_sort_row);}</p><p></p><p></p><p> /************************************* 9.7 Ausgabe via JSON *************************************/</p><p></p><p> switch($pixlie_config['response_type']){</p><p> case 'php':</p><p> //no content output. use the var $pixlie_table_file and $pixlie_table_dir in your php file</p><p> break;</p><p> case 'json':</p><p> header("Content-Type: text/html; charset=utf-8");</p><p> $json = array(</p><p> 'pixlie_table_env'=> $pixlie_table_env,</p><p> 'pixlie_table_dir'=> $pixlie_table_dir,</p><p> 'pixlie_table_file'=> $pixlie_table_file);</p><p> echo json_encode($json);</p><p> break;}</p><p></p><p> //Diese Arrays koennen bei einem include verwendet werden.</p><p> /*</p><p> //Testausgabe:</p><p> echo '<pre>';</p><p> print_r($pixlie_table_env);</p><p> print_r($pixlie_table_file);</p><p> print_r($pixlie_table_dir);</p><p> echo '</pre>';</p><p> */</p><p> }</p><p> ob_flush(); //Ausgabe des Puffers</p><p>?>[/CODE]</p></blockquote><p></p>
[QUOTE="Konzertjunkie, post: 1596292, member: 261332"] [b]AW: Thums aus Bildern erstellen und dann per jquery auslesen[/b] Hier die Dukumentation von pixlie ;) [CODE]<?php ob_start(); clearstatcache(); @ini_set("max_execution_time", 300); /* Pixlie ist Donationware und wird unter der MIT Lizenz zur Verfuegung gestellt. Donationware: Bei der Donationware (von engl. "donation": Spende) handelt es sich um kostenlose Software, wobei der Autor um eine Spende in beliebiger Hoehe bittet, um die durch Weiterentwicklung oder Verbreitung der Software entstehenden Kosten zu kompensieren (zum Beispiel Server-Kosten). Wenn das eingesetzte Programm die Erwartungen erfuellt, und man es regelmaessig im Einsatz hat, solle man eine dementsprechende Verguetung in Erwaegung ziehen. MIT Lizenz (Deutsche Uebersetzung) Copyright (c) 2008 Steffen Hagdorn Hiermit wird unentgeltlich, jeder Person, die eine Kopie der Software und der zugehoerigen Dokumentationen (die "Software") erhaelt, die Erlaubnis erteilt, uneingeschraenkt zu benutzen, inklusive und ohne Ausnahme, dem Recht, sie zu verwenden, kopieren, aendern, fusionieren, verlegen, verbreiten, unterlizenzieren und/oder zu verkaufen, und Personen, die diese Software erhalten, diese Rechte zu geben, unter den folgenden Bedingungen: Der obige Urheberrechtsvermerk und dieser Erlaubnisvermerk sind in alle Kopien oder Teilkopien der Software beizulegen. DIE SOFTWARE WIRD OHNE JEDE AUSDRUeCKLICHE ODER IMPLIZIERTE GARANTIE BEREITGESTELLT, EINSCHIESSLICH DER GARANTIE ZUR BENUTZUNG FUeR DEN VORGESEHENEN ODER EINEM BESTIMMTEN ZWECK SOWIE JEGLICHER RECHTSVERLETZUNG, JEDOCH NICHT DARAUF BESCHRAeNKT. IN KEINEM FALL SIND DIE AUTOREN ODER COPYRIGHTINHABER FUeR JEGLICHEN SCHADEN ODER SONSTIGE ANSPRUCH HAFTBAR ZU MACHEN, OB INFOLGE DER ERFUeLLUNG VON EINEM VERTRAG, EINEM DELIKT ODER ANDERS IM ZUSAMMENHANG MIT DER BENUTZUNG ODER SONSTIGE VERWENDUNG DER SOFTWARE ENTSTANDEN. Inhalt / Aufbau: ------------------------------------------------------ 1. Konfiguration - 1.1 Bildgroessen - 1.2 Sortierung - 1.3 Sonstige Einstellungen - 1.4 Systemkonfiguration 2. Sprachausgaben 3. Fehlerbehandlung 4. Umgebungs- und Installationspruefung 5. Entgegennehmen der Query-Variable 6. Auf Hackerangriffe pruefen 7. Umwandlung in UTF-8 8. Verarbeitung eine Fotos - 8.1 Angeforderte Bildgroesse der Query Variable pruefen - 8.2 Cache Dateinamen und Dateipfade generieren - 8.3 Pruefen ob Datei schon im Cache liegt - 8.3.1 Berechne Bilder nach dem Typ "cut" - 8.3.2 Berechne Bilder nach dem Typ "uncut" - 8.3.3 Berechne Bilder nach dem Typ "bestfit" - 8.4 Ausgabe des Bildes 9. Verarbeitung eines Ordners - 9.1 Weiche f¸r Ordner / Bild - 9.2 JPG Grunddaten lesen - 9.3 IPTC Metadaten lesen - 9.4 EXIF Metadaten lesen - 9.5 Ordner Grunddaten lesen - 9.6 Sortierung der Datentabellen - 9.7 Ausgabe via JSON ************************************************************************************************* *************************************** 1. Konfiguration **************************************** ************************************************************************************************* **************************************** 1.1 Bildgroessen ***************************************** Vordefinierte Standardbildgroessen: s = small | cut | 75/75 t = thumbnail | uncut | max 100 m = medium | uncut | max 240 d = default | uncut | max 500 (default) b = big | uncut | max 1024 o = original | none | original Unterschied "cut" und "uncut": Wird der Bildberechnungstyp "cut" verwendet, wird das Bild auf eine feste Hoehe und Breite aus dem Originalbild ohne verzerren ausgeschnitten. Hierfuer die Groesse in Form von "hoehe/breite" angegeben. Beispiel: Einstellung 100/50 | Originalbild 400/800 = Ausgabe 100/50 Beim Bildberechnungstyp "uncut" wird das Bild unter beibehaltung der Seitenlaengen auf die gewuenschte Groesse angepasst. Es muss nur der Wert angegeben werden, wie lange eine Seitenlaenge maximal sein darf. Beispiel: Einstellung 100 | Originalbild 400/800 = Ausgabe 50/100 Benutzung 'overwrite_cache': Zum Testen ist es sinnvoll 'overwrite_cache' auf 'on' zu stellen. Bei jedem Seitenaufruf wird der Cache wieder mit neuen Daten ueberschrieben! Diese Option ist unter 1.3 (Sonstige Einstellungen) zu finden. HINWEIS: DASS DER CACHE GENUTZT WIRD, MUSS DIESE EINSTELLUNG IM LIVE-BETRIEB WIEDER AUF 'off' STEHEN! Frei definierbare Bildgroessen: Nachfolgend koennen beliebig viele eigene Bildgroessen definiert werden. Die Bildabkuerzung s,t,m,d,b und o sind schon vorbelegt! Das Kuerzel des Bildtyps darf nur ein Zeichen sein! LEERE DEN CACHE-ORDER NACH DEM AeNDERN DIESER WERTE ODER VERWENDE 'overwrite_cache'!*/ $pixlie_imageconfig = array( 'x' => array('type'=>'cut','size'=>'80,80'), //Beispiel fuer Zugeschnittenes Bild mit 120 x 90 Pixel 'y' => array('type'=>'uncut','size'=>'600'), //Beispiel fuer ein in der Groesse angepasstes Bild mit max 600 Pixel 'z' => array('type'=>'bestfit','size'=>'900,600') //Beispiel fuer ein in der Groesse angepasstes Bild mit max 900 x 600 Pixel, wobei die H?he dem zweiten Wert angepasst wird. Hochformat = H?he von Querformat. M?glich ist auch nur eine Gr?flenangabe. ); /**************************************** 1.2 Sortierung **************************************** Beispiele fuer die Sortierung: 1. Sortiere zuerst absteigend nach dem Hochladezeitpunkt, danach absteigend nach dem Speicherdatum des Originalfotos. Behandle beide Datumsangaben als Zahlen. first: ctime, SORT_DESC, SORT_NUMERIC second: mtime, SORT_DESC, SORT_NUMERIC 2. Sortiere zuerst aufsteigend nach dem Dateinamen, danach absteigend nach dem IPTC Feld "Stadt". Behandle beide Werte als Zeichenkette. Eine Liste der unterstuetzten IPTC Werte ist weiter unten bei "$pixlie_iptc_codes" zu finden. first: name , SORT_ASC, SORT_STRING second: iptc_city, SORT_DESC, SORT_STRING 3. Sortiere zuerst absteigend nach dem EXIF-Datum, danach aufsteigend nach Name. Behandle beide Werte als Zeichenkette. Das EXIF-Datum muss als String angegeben werden, da es keine numerische Zahl ist. first: exif_exif_datetimeoriginal, SORT_DESC, SORT_STRING second: name, SORT_ASC, SORT_STRING */ $pixlie_sortconfig = array( // name, ctime, mtime, atime oder jedes iptc bzw. exif Feld 'sort_file_first_row'=>"ctime", // absteigend: SORT_DESC, aufsteigend: SORT_ASC 'sort_file_first_order'=>SORT_DESC, // regul?r: SORT_REGULAR, numerisch: SORT_NUMERIC, alphanumerisch: SORT_STRING // auf SORT_STRING setzen, wenn EXIF/IPTC Originaldatum (z.B. 'exif_exif_datetimeoriginal') verwendet wird 'sort_file_first_type'=>SORT_NUMERIC, // name, ctime, mtime, atime oder jedes iptc bzw. exif Feld 'sort_file_second_row'=>'mtime', // absteigend: SORT_DESC, aufsteigend: SORT_ASC 'sort_file_second_order'=>SORT_DESC, // SORT_REGULAR, SORT_NUMERIC, SORT_STRING 'sort_file_second_type'=>SORT_NUMERIC, // name, ctime, mtime, atime oder jedes iptc bzw. exif Feld 'sort_dir_first_row'=>'name', // absteigend: SORT_DESC, aufsteigend: SORT_ASC 'sort_dir_first_order'=>SORT_ASC, // SORT_REGULAR, SORT_NUMERIC, SORT_STRING 'sort_dir_first_type'=>SORT_STRING, // name, ctime, mtime, atime oder jedes iptc bzw. exif Feld 'sort_dir_second_row'=>'ctime', // absteigend: SORT_DESC, aufsteigend: SORT_ASC 'sort_dir_second_order'=>SORT_DESC, // SORT_REGULAR, SORT_NUMERIC, SORT_STRING 'sort_dir_second_type'=>SORT_NUMERIC ); /********************************** 1.3 Sonstige Einstellungen ********************************** WICHTIG: STELLEN SIE IM LIVE BETRIEB NACH DER ENTWICKLUNG 'overwrite_cache' AUF AUS!!! Hinweis zu 'http_method': Viele Javascript Bibliotheken koennen Pixlie PATHINFO nicht umsetzen. */ $manual_subpath_var = 'bildpfad'; //Variable des manuellen Pfades $pixlie_userconfig = array( 'overwrite_cache' => 'off', //Cache bei jedem Aufruf neu erstellen: on = an, off = aus 'pic_image_quality' => 90, //Bildqualitaet: 0 = schlechteste , 100 = beste 'show_metadata_iptc' => 'on', //IPTC-Ausgabe: on = an, off = aus 'show_metadata_exif' => 'on', //EXIF-Ausgabe: on = an, off = aus 'dir_cache' => dirname(__FILE__).'/cache', //Pfad zum Cache Verzeichnis 'dir_upload' => dirname(__FILE__).'/upload'. ((isset($manual_subpath)&&$manual_subpath!='')?'/'.$manual_subpath:((isset($_GET[$manual_subpath_var])&&$_GET[$manual_subpath_var]!='')?'/'.$_GET[$manual_subpath_var]:'')), //Pfad zum Upload Verzeichnis 'http_method' => 'GET', //Uebermittlungsmethode der Query-Variable: PATHINFO oder GET 'http_var_name' => 'q', //Name der Query-Variablen die per http_method uebergeben wird 'response_type' => 'php', //Art der Antwort: direkt = json, include = php 'relative_path' => '', //Ist Strato Dein Hoster oder sollten die automatisch generierten Pfade nicht stimmen, trage hier den relativen Pfad ohne abschlieflenden Slash zur pixlie.php ein (z.B. '/pixlie') 'use_dims' => false, //Wenn Du die Bildabmessungen in der Ausgabe ben?tigst, stelle diesen Wert auf true [ true | false ]. Standard: false 'use_origfilename_as_save' => false, //Originaldateinamen beim Speichern anbieten? [ true | false ]. Auf false stellen, wenn keine Lightbox verwendet wird, da sonst das Bild als Download angeboten und nicht direkt angezeigt wird. ); //Namen der IPTC Felder in der Tabelle "$pixlie_table_file" $pixlie_iptc_codes = array( '2#005'=>'iptc_object_name', //Name des Objektes '2#007'=>'iptc_edit_status', //Der Bearbeitungsstatus '2#010'=>'iptc_priority', //Die Prioritaet '2#015'=>'iptc_category', //Die Kategorie '2#020'=>'iptc_supplemental_category', //Zusaetzliche Kategorien wenn vorhanden '2#025'=>'iptc_keywords', //Keywoerter fuer die Suche '2#030'=>'iptc_release_date', //Datum des Bildes '2#035'=>'iptc_release_time', //Uhrzeit des Bildes '2#040'=>'iptc_special_instructions', //Besondere Hinweise zu dem Bild '2#045'=>'iptc_reference_service', //Referenzen auf den Bilderservice '2#047'=>'iptc_reference_date', //Referenzen auf das Datum (Bildarchiv) '2#050'=>'iptc_reference_number', //Referenznummer fuer die Identifikation '2#055'=>'iptc_created_date', //Datum des Fotos '2#060'=>'iptc_created_time', //Uhrzeit des Fotos '2#062'=>'iptc_digital_creation_date', //Datum des Fotos '2#063'=>'iptc_digital_creation_time', //Uhrzeit des Fotos '2#065'=>'iptc_originating_program', //Programm mit dem das Foto erstellt wurde '2#070'=>'iptc_program_version', //Version des Programms '2#080'=>'iptc_byline', //Name des Autors (Fotografen) '2#085'=>'iptc_byline_title', //Titel des Fotografen '2#090'=>'iptc_city', //Stadt '2#092'=>'iptc_sublocation', //Lokation oder Ort '2#095'=>'iptc_province_state', //Bundesland '2#100'=>'iptc_country_code', //Laendercode nach [ISO 3166-1] '2#101'=>'iptc_country', //Laendername '2#105'=>'iptc_headline', //Titel des Fotos '2#115'=>'iptc_source', //Quelle '2#116'=>'iptc_copyright', //Copyright Text '2#118'=>'iptc_contact', //Internetadresse '2#120'=>'iptc_caption', //Beschreibung '2#122'=>'iptc_caption_writer', //Autor der Beschreibung '2#150'=>'iptc_content_preview', //Vorschau '2#200'=>'iptc_custom_field_01', //Frei verwendbare Textfelder '2#201'=>'iptc_custom_field_02', //Frei verwendbare Textfelder '2#202'=>'iptc_custom_field_03', //Frei verwendbare Textfelder '2#203'=>'iptc_custom_field_04', //Frei verwendbare Textfelder '2#204'=>'iptc_custom_field_05', //Frei verwendbare Textfelder '2#205'=>'iptc_custom_field_06', //Frei verwendbare Textfelder '2#206'=>'iptc_custom_field_07', //Frei verwendbare Textfelder '2#207'=>'iptc_custom_field_08', //Frei verwendbare Textfelder '2#208'=>'iptc_custom_field_09', //Frei verwendbare Textfelder '2#209'=>'iptc_custom_field_10', //Frei verwendbare Textfelder '2#210'=>'iptc_custom_field_11', //Frei verwendbare Textfelder '2#211'=>'iptc_custom_field_12', //Frei verwendbare Textfelder '2#212'=>'iptc_custom_field_13', //Frei verwendbare Textfelder '2#213'=>'iptc_custom_field_14', //Frei verwendbare Textfelder '2#214'=>'iptc_custom_field_15', //Frei verwendbare Textfelder '2#215'=>'iptc_custom_field_16', //Frei verwendbare Textfelder '2#216'=>'iptc_custom_field_17', //Frei verwendbare Textfelder '2#217'=>'iptc_custom_field_18', //Frei verwendbare Textfelder '2#218'=>'iptc_custom_field_19', //Frei verwendbare Textfelder '2#219'=>'iptc_custom_field_20', //Frei verwendbare Textfelder '2#230'=>'iptc_document_notes', //Hinweise zu dem Dokument '2#231'=>'iptc_document_history', //Historie des Dokumentes '2#232'=>'iptc_exif_camera_info' //Binaere EXIF Kameradaten (nicht editierbar) ); /*********************************** 1.4 Systemkonfiguration*************************************/ $pixlie_sysconfig = array( 'php_req_vers' => '4.0.0', //erforderliche PHP Version 'manual_subpath_var' => $manual_subpath_var //manuelle Pfad. Wird automatisch ¸bernommen. ); /* Bitte aender diese Standardtisierten Bildwerte nicht. Eigene koennen weiter oben unter dem Punkt 1.1 (Bildgroessen) erstellt werden. */ $pixlie_sys_imageconfig = array( 's' => array('type'=>'cut', 'size'=>'75,75'), 't' => array('type'=>'uncut','size'=>'100'), 'm' => array('type'=>'uncut','size'=>'240'), 'd' => array('type'=>'uncut','size'=>'500'), 'b' => array('type'=>'uncut','size'=>'1024'), 'o' => array('type'=>'none', 'size'=>'original'), ); $pixlie_image_sizes = array_merge($pixlie_sys_imageconfig,$pixlie_imageconfig); $pixlie_config = array_merge($pixlie_userconfig,$pixlie_sortconfig,$pixlie_sysconfig); // PHP Remote Config if(isset($response_type)){ switch($response_type){ case 'php': $pixlie_config['response_type'] = 'php'; break; case 'json': $pixlie_config['response_type'] = 'json'; break;}} /*************************************** 2. Sprachausgaben **************************************/ $pixlie_lang = array( 'conf_cache_dir_read' => "Das Cache-Verzeichnis <b>".$pixlie_config['dir_cache']."</b> existiert nicht.", 'conf_cache_dir_write' => "Cache-Verzeichnis <b>".$pixlie_config['dir_cache']."</b> ok. Pixlie benoetigt jedoch schreibenden Zugriff auf das Cache-Verzeichnis. Bitte das Recht 777 auf das Cache-Verzeichnis setzen.", 'conf_upload_dir_read' => "Das Upload-Verzeichnis <b>".$pixlie_config['dir_upload']."</b> fuer die Bilder existiert nicht.", 'conf_upload_dir_write' => "Upload-Verzeichnis <b>".$pixlie_config['dir_upload']."</b> ok. Pixlie benoetigt jedoch lesenden Zugriff auf das Upload-Verzeichnis. Bitte das Recht 755 auf das Upload-Verzeichnis setzen.", 'conf_php_vers' => "Pixlie benoetigt mindestens PHP in der Version <b>".$pixlie_config['php_req_vers']."</b>.", 'conf_http_method' => "Der Wert http_method <b>(".$pixlie_config['http_method'].")</b> in der Config hat einen falschen Wert.", 'conf_xss_prot' => "Der XSS Schutz hat eine nicht gueltige Zeichenfolge in der Query erkannt.", 'pic_fileexists_false' => "Das angeforderte Bild existiert nicht.", 'pic_rendertype_false' => "Der hinterlegte Rendertyp existiert nicht.", 'dir_opendir_false' => "Das angeforderte Verzeichnis kann nicht gelesen werden.", 'exif_function_not_exist' => "Die Funktion <b>exif_read_data</b> konnte nicht gefunden werden. Bitte <b>show_metadata_exif</b> in der Pixlie-Konfiguration auf <b>'off'</b> stellen." ); /************************************** 3. Fehlerbehandlung *************************************/ if(function_exists('pixlie_error')==false){ function pixlie_error($msg){ global $pixlie_config; clearstatcache(); if ($pixlie_config['response_type'] == 'json') { $pixlie_table_env['status'] = false; $pixlie_table_env['errormsg'] = $msg; die(json_encode(array('pixlie_table_env'=>$pixlie_table_env)));} else{ die($msg);}}} /***************************** 4. Umgebungs- und Installationspruefung ***************************/ // Windows oder *Nix $bIsNix = (preg_match("/^([\/\\\\]|[a-zA-Z]:[\/\\\\])/", __FILE__)) ? false : true; //cache check if(!(is_dir($pixlie_config['dir_cache']))) { pixlie_error($pixlie_lang['conf_cache_dir_read']);} elseif(!(is_readable($pixlie_config['dir_cache'])) || !(is_writable($pixlie_config['dir_cache'])) || ($bIsNix && !(is_executable($pixlie_config['dir_cache'])))) { pixlie_error($pixlie_lang['conf_cache_dir_write']);} //upload check if(!(is_dir($pixlie_config['dir_upload']))) { pixlie_error($pixlie_lang['conf_upload_dir_read']);} elseif(!(is_readable($pixlie_config['dir_upload'])) || ($bIsNix && !(is_executable($pixlie_config['dir_upload'])))) { pixlie_error($pixlie_lang['conf_upload_dir_write']);} //PHP version-check if( phpversion() < $pixlie_config['php_req_vers'] ){ pixlie_error($pixlie_lang['conf_php_vers']);} /****************************** 5. Entgegennehmen der Query-Variable ****************************/ switch ($pixlie_config['http_method']){ case 'GET': if(isset($_GET[$pixlie_config['http_var_name']])){ $pixlie_query = $_GET[$pixlie_config['http_var_name']];} else{ $pixlie_query = '';} break; case 'PATHINFO': if(isset($_SERVER['PATH_INFO'])){ $pixlie_query = $_SERVER['PATH_INFO'];} else{ $pixlie_query = '';} break; default: pixlie_error($pixlie_lang['conf_http_method']); break;} /********************************* 6. Auf Hackerangriffe pruefen *********************************/ //cross-site scripting (XSS-Schutz) $pixlie_query = preg_replace('/\.\./','',$pixlie_query); $pixlie_query = preg_replace('/\/\//','/',$pixlie_query); if ((preg_match("/<[^>]*script*\"?[^>]*>/", $pixlie_query)) || (preg_match("/<[^>]*object*\"?[^>]*>/", $pixlie_query)) || (preg_match("/<[^>]*iframe*\"?[^>]*>/", $pixlie_query)) || (preg_match("/<[^>]*applet*\"?[^>]*>/", $pixlie_query)) || (preg_match("/<[^>]*meta*\"?[^>]*>/", $pixlie_query)) || (preg_match("/<[^>]*style*\"?[^>]*>/", $pixlie_query)) || (preg_match("/<[^>]*form*\"?[^>]*>/", $pixlie_query)) || // (preg_match("/\([^>]*\"?[^)]*\)/", $pixlie_query)) || // auskommentiert, um Dateinamen mit Klammern zu erlauben (preg_match("/\"/", $pixlie_query))) { pixlie_error($pixlie_lang['conf_xss_prot']);die();} /************************************ 7. Umwandlung in UTF-8 ************************************/ $pixlie_query = utf8_decode($pixlie_query); /************************************************************************************************* ********************************* 8. Verarbeitung eines Fotos *********************************** ************************************************************************************************/ if(preg_match('/(.jpg)$/i', $pixlie_query)){ /********************** 8.1 Angeforderte Bildgroesse der Query Variable pruefen ********************/ if(false !== preg_match('/.*_(.)(\....)/',$pixlie_query,$pixlie_reg_picsize)){ $pixlie_item_picsize = $pixlie_reg_picsize[1]; $pixlie_item_extension = $pixlie_reg_picsize[2]; $pixlie_query = preg_replace('/_'.$pixlie_item_picsize.$pixlie_item_extension.'/' , $pixlie_item_extension,$pixlie_query);} else{ $pixlie_item_picsize = 'd';} /************************ 8.2 Cache Dateinamen und Dateipfade generieren ************************/ $pixlie_item_path = $pixlie_config['dir_upload'].$pixlie_query; $pixlie_cache_name = md5($pixlie_query).'_'.$pixlie_item_picsize.'.jpg'; $pixlie_cache_path = $pixlie_config['dir_cache'].'/'.$pixlie_cache_name; /*************************** 8.3 Pruefen ob Datei schon im Cache liegt ***************************/ if(file_exists($pixlie_item_path)){ if((file_exists($pixlie_cache_path)==false)||($pixlie_config['overwrite_cache']=='on')){ switch ($pixlie_image_sizes[$pixlie_item_picsize]['type']){ /*************************** 8.3.1 Berechne Bilder nach dem Typ "cut" ***************************/ case 'cut': $pixlie_render_size = explode(',',$pixlie_image_sizes[$pixlie_item_picsize]['size']); @ini_set('memory_limit', '50M'); $src_img = imagecreatefromjpeg($pixlie_item_path); if((imagesy($src_img) / imagesx($src_img) * $pixlie_render_size[0]) >$pixlie_render_size[1] ){ $src_w = imagesx($src_img); $src_h = round((imagesx($src_img)/$pixlie_render_size[0])*$pixlie_render_size[1]); $src_x = (imagesy($src_img)-$src_h) / 4; $src_y = 0;} else{ $src_h = imagesy($src_img); $src_w = round((imagesy($src_img)/$pixlie_render_size[1])*$pixlie_render_size[0]); $src_y = (imagesx($src_img)-$src_w) / 2; $src_x = 0;} $dst_img = imagecreatetruecolor($pixlie_render_size[0],$pixlie_render_size[1]); imagecopyresampled($dst_img,$src_img,0,0,$src_y,$src_x,$pixlie_render_size[0], $pixlie_render_size[1],$src_w,$src_h); imagedestroy($src_img); imagejpeg($dst_img, $pixlie_cache_path, $pixlie_config['pic_image_quality']); imagedestroy($dst_img); break; /************************** 8.3.2 Berechne Bilder nach dem Typ "uncut" **************************/ case 'uncut': $pixlie_render_size = $pixlie_image_sizes[$pixlie_item_picsize]['size']; @ini_set('memory_limit', '50M'); $src_img = imagecreatefromjpeg($pixlie_item_path); if(imagesx($src_img)==imagesy($src_img)){ $dst_w = $pixlie_render_size; $dst_h = $pixlie_render_size;} elseif (imagesx($src_img) > imagesy($src_img)){ $dst_w = round( $pixlie_render_size / imagesx($src_img) * imagesy($src_img)); $dst_h = $pixlie_render_size;} else{ $dst_w = $pixlie_render_size; $dst_h = round($pixlie_render_size / imagesy($src_img) * imagesx($src_img));} $dst_img = imagecreatetruecolor($dst_h,$dst_w); imagecopyresampled($dst_img,$src_img,0,0,0,0,$dst_h,$dst_w,imagesx($src_img),imagesy($src_img)); imagedestroy($src_img); imagejpeg($dst_img, $pixlie_cache_path, $pixlie_config['pic_image_quality']); imagedestroy($dst_img); break; /************************** 8.3.3 Berechne Bilder nach dem Typ "bestfit" ************************/ case 'bestfit': if (strpos($pixlie_image_sizes[$pixlie_item_picsize]['size'],',')) { $pixlie_render_size = explode(',',$pixlie_image_sizes[$pixlie_item_picsize]['size']); } else { $pixlie_render_size = array($pixlie_image_sizes[$pixlie_item_picsize]['size'],$pixlie_image_sizes[$pixlie_item_picsize]['size']); } @ini_set('memory_limit', '50M'); $src_img = imagecreatefromjpeg($pixlie_item_path); // Ziel-Verh?ltnis aus H?he und Breite ermitteln $relation = $pixlie_render_size[0]/$pixlie_render_size[1]; if(imagesx($src_img)==imagesy($src_img)){ // quadratisches Format: H?he und Breite auf den kleineren Wert setzen $dst_w = min($pixlie_render_size[0],$pixlie_render_size[1]); $dst_h = $dst_w; } elseif (imagesx($src_img)/imagesy($src_img) == $relation ){ // Ziel-Verh?ltnis bereits vorhanden, Werte direkt ¸bernehmen $dst_w = $pixlie_render_size[0]; $dst_h = $pixlie_render_size[1]; } elseif (imagesx($src_img)/imagesy($src_img) < $relation ){ // "hochformatiger" als Ziel-Verh?ltnis, H?he ¸bernehmen, Breite berechnen $dst_w = round( $pixlie_render_size[1] * imagesx($src_img)/imagesy($src_img)); $dst_h = $pixlie_render_size[1]; } else { // "querformatiger" als Ziel-Verh?ltnis, Breite ¸bernehmen, H?he berechnen $dst_w = $pixlie_render_size[0]; $dst_h = round($pixlie_render_size[0] * imagesy($src_img)/imagesx($src_img)); } $dst_img = imagecreatetruecolor($dst_w,$dst_h); imagecopyresampled($dst_img,$src_img,0,0,0,0,$dst_w,$dst_h,imagesx($src_img),imagesy($src_img)); imagedestroy($src_img); if ( isset( $plugins['watermark_uncut'] ) && $plugins['watermark_uncut'] ) { include( $global_config['pluginspath'].'/watermark/watermark.php' ); // Einbinden des Wasserzeichens $dst_img = watermark( $dst_img, 'uncut' ); // Wasserzeichen einbrennen, wenn eingestellt } if ( isset( $plugins['unsharpmask_uncut'] ) && $plugins['unsharpmask_uncut'] ) { include( $global_config['pluginspath'].'/unsharpmask/unsharpmask.php' ); // Einbinden des "Unscharf Maskieren" Filters $dst_img = UnsharpMask( $dst_img, 80, 0.7, 1 ); // image res, amount, radius, threshold } imagejpeg($dst_img, $pixlie_cache_path, $pixlie_config['pic_image_quality']); imagedestroy($dst_img); break; case 'none': $pixlie_cache_path = $pixlie_item_path; break; default: pixlie_error($pixlie_lang['pic_rendertype_false']);; break;}} /*********************************** 8.4 Ausgabe des Bildes *************************************/ $xFilename = explode('/', $pixlie_query); $xFilesize = filesize($pixlie_cache_path); header("Pragma: public"); header("Expires: " . gmdate('D, d M Y H:i:s', time()+ 30*24*60*60) . " GMT"); header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); header("Cache-Control: private",false); header("Content-Type: image/jpeg"); if ($pixlie_config['use_origfilename_as_save']) header("Content-Disposition: attachment; filename=\"".utf8_decode($xFilename[count($xFilename)-1])."\";"); header("Content-Transfer-Encoding: binary"); header("Content-Length: ".$xFilesize); ob_clean(); // Patch: http://pixlie.de/forum/index.php?page=Thread&postID=2344#post2344 readfile($pixlie_cache_path); //imagejpeg(imagecreatefromjpeg($pixlie_cache_path)); //alternativ } else{ pixlie_error($pixlie_lang['pic_fileexists_false']);}} else{ /************************************************************************************************* ******************************** 9. Verarbeitung eines Ordners ********************************** ************************************************************************************************/ $pixlie_table_file = array(); $pixlie_table_dir = array(); $pixlie_table_env = array(); $pixlie_key_counter_file = 0; $pixlie_key_counter_dir = 0; if($pixlie_dir_handle = @opendir($pixlie_config['dir_upload'].$pixlie_query)){ /********************************** 9.1 Weiche f¸r Ordner / Bild *********************************/ while(false !== ($pixlie_item_name = readdir($pixlie_dir_handle))){ if ($pixlie_item_name != "." && $pixlie_item_name != "..") { $pixlie_item_path = $pixlie_config['dir_upload'].$pixlie_query.'/'.$pixlie_item_name; if((filetype($pixlie_item_path)=='file')&&(preg_match('/(.jpg)$/i', $pixlie_item_name))){ /************************************* 9.2 JPG Grunddaten lesen *********************************/ $pixlie_item_key = $pixlie_key_counter_file; $pixlie_key_counter_file ++; $pixlie_table_file[$pixlie_item_key]['name'] = utf8_encode(preg_replace('/\.jpg/i','',$pixlie_item_name)); $pixlie_link_file = urlencode($pixlie_table_file[$pixlie_item_key]['name']); $pixlie_link_query = preg_replace('/%2F/','/',urlencode(utf8_encode($pixlie_query))); if($pixlie_query==''){ $pixlie_table_file[$pixlie_item_key]['link_get'] = '?'.$pixlie_config['http_var_name'].'=/'.$pixlie_link_file; $pixlie_table_file[$pixlie_item_key]['link_pathinfo'] = '/'.$pixlie_link_file;} else{ $pixlie_table_file[$pixlie_item_key]['link_get'] = '?'.$pixlie_config['http_var_name'].'='.$pixlie_link_query.'/'.$pixlie_link_file; $pixlie_table_file[$pixlie_item_key]['link_pathinfo'] = $pixlie_link_query.'/'.$pixlie_link_file;} $pixlie_table_file[$pixlie_item_key]['atime'] = fileatime($pixlie_item_path); $pixlie_table_file[$pixlie_item_key]['ctime'] = filectime($pixlie_item_path); $pixlie_table_file[$pixlie_item_key]['mtime'] = filemtime($pixlie_item_path); $pixlie_table_file[$pixlie_item_key]['size'] = filesize($pixlie_item_path); preg_match('/.*(\....)/',$pixlie_item_name,$pixlie_reg_extension); $pixlie_table_file[$pixlie_item_key]['extension'] = $pixlie_reg_extension[1]; if ($pixlie_config['use_dims']) { $aDims = getimagesize($pixlie_item_path, $iptc_info); $pixlie_table_file[$pixlie_item_key]['width'] = $aDims[0]; $pixlie_table_file[$pixlie_item_key]['height'] = $aDims[1]; $pixlie_table_file[$pixlie_item_key]['html'] = $aDims[3]; } /*********************************** 9.3 IPTC Metadaten lesen ***********************************/ if($pixlie_config['show_metadata_iptc']=='on'){ if (!$pixlie_config['use_dims']) getimagesize($pixlie_item_path, $iptc_info); if(isset($iptc_info["APP13"])){ $iptc_data = iptcparse($iptc_info["APP13"]); if(is_array($iptc_data)) { foreach ($iptc_data as $iptc_key => $iptc_value){ if($iptc_key != '2#000'){ if(count($iptc_value)>1){ $pixlie_table_file[$pixlie_item_key][$pixlie_iptc_codes[$iptc_key]] = utf8_encode(implode(',',$iptc_value));} else{ @$pixlie_table_file[$pixlie_item_key][$pixlie_iptc_codes[$iptc_key]] = utf8_encode($iptc_value[0]); }}}}}} /*********************************** 9.4 EXIF Metadaten lesen ***********************************/ if($pixlie_config['show_metadata_exif']=='on') { if (function_exists('exif_read_data')) { $exif_data = exif_read_data($pixlie_item_path ,1, true); if($exif_data!=false){ foreach ($exif_data as $exif_key => $exif_section) { if ((stristr($exif_key,'makernote')== false)) { foreach ($exif_section as $exif_name => $exif_value) { if((stristr($exif_name,'makernote')== false)&&(stristr($exif_name,'usercomment')== false)&& (stristr($exif_name,'undefined')== false)){ $pixlie_table_file[$pixlie_item_key]['exif_'.strtolower($exif_key).'_'. strtolower($exif_name)] = ((is_array($exif_value))?$exif_value:utf8_encode($exif_value)); }}}}} //$exif_value could be array } else pixlie_error($pixlie_lang['exif_function_not_exist']); }} elseif(filetype($pixlie_item_path)=='dir'){ /*********************************** 9.5 Ordner Grunddaten lesen ********************************/ $pixlie_item_key = $pixlie_key_counter_dir; $pixlie_key_counter_dir ++; $pixlie_link_file = urlencode(utf8_encode($pixlie_item_name)); $pixlie_link_query = preg_replace('/%2F/','/',urlencode(utf8_encode($pixlie_query))); if($pixlie_query==''){ $pixlie_table_dir[$pixlie_item_key]['link_get'] = '?'.$pixlie_config['http_var_name'].'=/'.$pixlie_link_file; $pixlie_table_dir[$pixlie_item_key]['link_pathinfo'] = '/'.$pixlie_link_file;} else{ $pixlie_table_dir[$pixlie_item_key]['link_get'] = '?'.$pixlie_config['http_var_name'].'='.$pixlie_link_query.'/'.$pixlie_link_file; $pixlie_table_dir[$pixlie_item_key]['link_pathinfo'] = $pixlie_link_query.'/'.$pixlie_link_file;} $pixlie_table_dir[$pixlie_item_key]['name'] = utf8_encode($pixlie_item_name); $pixlie_table_dir[$pixlie_item_key]['atime'] = fileatime($pixlie_item_path); $pixlie_table_dir[$pixlie_item_key]['ctime'] = filectime($pixlie_item_path); $pixlie_table_dir[$pixlie_item_key]['mtime'] = filemtime($pixlie_item_path);}}} closedir($pixlie_dir_handle); $pixlie_table_env['status'] = true; $pixlie_table_env['numberof_file'] = count($pixlie_table_file); $pixlie_table_env['numberof_dir'] = count($pixlie_table_dir); $pixlie_table_env['query'] = utf8_encode($pixlie_query); $__FILE__ = (substr($_SERVER["DOCUMENT_ROOT"], 0, strlen('/kunden')) == '/kunden') ? '/kunden'.__FILE__ : __FILE__; // 1&1 workaround if ( $pixlie_config['relative_path'] != '' ) { $relpath = $pixlie_config['relative_path'].((substr($pixlie_config['relative_path'], -1) != '/') ? '/' : ''); } else { $fullpath = str_replace('\\', '/', dirname($__FILE__)); $fullpath = $fullpath.((substr($fullpath, -1) != '/') ? '/' : ''); $istartpos = strpos($fullpath, $_SERVER["DOCUMENT_ROOT"]); $iendpos = $istartpos + strlen(str_replace('\\', '/', $_SERVER["DOCUMENT_ROOT"])); $relpath = substr($fullpath, $iendpos); $relpath .= (substr($relpath, -1) != '/') ? '/' : ''; } $pixlie_table_env['path_pixlie'] = 'http://'.$_SERVER['HTTP_HOST']. ((substr($_SERVER['HTTP_HOST'],-1) != '/' && substr($relpath,0,1) != '/')?'/':''). $relpath.basename($__FILE__); } else{ pixlie_error($pixlie_lang['dir_opendir_false']);} /******************************* 9.6 Sortierung der Datentabellen *******************************/ if(count($pixlie_table_file)>1){ foreach ($pixlie_table_file as $pixlie_sort_key => $pixlie_sort_row){ $pixlie_first_sort_row[$pixlie_sort_key] = @$pixlie_sort_row[$pixlie_config['sort_file_first_row']]; $pixlie_second_sort_row[$pixlie_sort_key] = @$pixlie_sort_row[$pixlie_config['sort_file_second_row']];} array_multisort($pixlie_first_sort_row, $pixlie_config['sort_file_first_order'], $pixlie_config['sort_file_first_type'], $pixlie_second_sort_row, $pixlie_config['sort_file_second_order'], $pixlie_config['sort_file_second_type'], $pixlie_table_file); unset($pixlie_first_sort_row,$pixlie_second_sort_row);} if(count($pixlie_table_dir)>1){ foreach ($pixlie_table_dir as $pixlie_sort_key => $pixlie_sort_row){ $pixlie_first_sort_row[$pixlie_sort_key] = @$pixlie_sort_row[$pixlie_config['sort_dir_first_row']]; $pixlie_second_sort_row[$pixlie_sort_key] = @$pixlie_sort_row[$pixlie_config['sort_dir_second_row']];} array_multisort($pixlie_first_sort_row, $pixlie_config['sort_dir_first_order'], $pixlie_config['sort_dir_first_type'], $pixlie_second_sort_row, $pixlie_config['sort_dir_second_order'], $pixlie_config['sort_dir_second_type'], $pixlie_table_dir); unset($pixlie_first_sort_row,$pixlie_second_sort_row);} /************************************* 9.7 Ausgabe via JSON *************************************/ switch($pixlie_config['response_type']){ case 'php': //no content output. use the var $pixlie_table_file and $pixlie_table_dir in your php file break; case 'json': header("Content-Type: text/html; charset=utf-8"); $json = array( 'pixlie_table_env'=> $pixlie_table_env, 'pixlie_table_dir'=> $pixlie_table_dir, 'pixlie_table_file'=> $pixlie_table_file); echo json_encode($json); break;} //Diese Arrays koennen bei einem include verwendet werden. /* //Testausgabe: echo '<pre>'; print_r($pixlie_table_env); print_r($pixlie_table_file); print_r($pixlie_table_dir); echo '</pre>'; */ } ob_flush(); //Ausgabe des Puffers ?>[/CODE] [/QUOTE]
Bilder bitte
hier hochladen
und danach über das Bild-Icon (Direktlink vorher kopieren) platzieren.
Zitate einfügen…
Authentifizierung
Wenn ▲ = 7, ▼ = 3, ◇ = 2 und die Summe von ▲ und ▼ durch ◇ geteilt wird, was ist das Ergebnis?
Antworten
Start
Forum
Sonstiges
Webdesign, Webentwicklung & Programmierung
PHP, Javascript, jQuery, Ajax, nodeJS, MySQL...
Thums aus Bildern erstellen und dann per jquery auslesen
Oben