Unterschiedliche Bildgrößen auf "Anfrage"..., per ModRewrite werden Bilder neu berechnet und gecached! |
Willkommen, Gast ( Anmelden | Registrierung ) [ Hilfe | Mitglieder | Suche ]
Unterschiedliche Bildgrößen auf "Anfrage"..., per ModRewrite werden Bilder neu berechnet und gecached! |
Sun. 3. December 2006, 23:06
Beitrag
#1
|
|
Advanced Member Gruppe: Moderators Beiträge: 911 Mitglied seit: 26.06.2006 Wohnort: Essen; Ruhrgebiet Mitglieds-Nr.: 4 |
So, während ich nach einem ImageEditor gesucht habe bin ich auf folgenden Codeschnippsel gestoßen.
ACHTUNG! Der Hack ist übelst und sollte nicht in einem Produktivsystem eingesetzt werden. Vermutlich sind große Sicherheitslücken drin. Es geht hier erstmal nur ums Anschauen und Rumspielen! Worum geht es überhaupt? Ich hatte immer das Problem, dass meine Redakteure Bilder hochladen, die möglicherweise nicht die korrekte Größe haben. Vor allem bei Galerien wurde da gerne mal direkt aus Digitalkameras reinkopiert. Nun wird ja das Sefrengo Thumbnail direkt erstellt, dass ist also da. Dummerweise brauche ich öfter aber auch passende Bilder in Groß oder in ganz anderen Größen. Manchmal auch ein und das selbe Bild in 3-4 Größen. Lösung In dem anghängten Zipfile befindet sich eine htaccess datei und eine image.php. Durch die modifizierte Sefrengo htaccess Datei wird ein Bild auch mit anderen Adressen erreichbar: Orginal: http://www.domain.de/media/images/testbild.jpg Zusätzlich: http://www.domain.de/media/images/small/testbild.jpg http://www.domain.de/media/images/medium/testbild.jpg http://www.domain.de/media/images/large/testbild.jpg Per ModRewrite wird das ganze dann auf die image.php umgeleitet. Diese erstellt Bilder in der gewünschten, Voreingestellten Größe. Das Bild wird sogar gecached und in ein cache verzeichnis geschrieben. Bei erneutem Aufruf wird getestet ob das Bild schon erstellt wurde und ob sich das Orginal verändert hatte seit dem. Wen nicht wird das Bild aus dem Cache genommen. Damit kann ich jetzt super Module schrauben, indem ich zum Beispiel anstelle des Orginals gleich die Größe nutze, die ich an der STelle haben will. So kann der Redakteur dann ein Bild auswählen und sollte es zu groß sein, wird es runter gerechnet. Installation
- Testen und vor allem Sicherheitslücken klären. Stelle mir vor, dass ich durch die Übergabe von $path und $image große Scheunentore aufgemacht habe! - Besser an Sefrengo anbinden und konfigurierbar machen - Bildgrößen konfiguration flexibeler machen und aus der htaccess datei holen und ganz wichtig: - Feedback von Euch einholen!!!! So, was sagt ihr dazu? Das ersetzt meines Erachtens nicht einen guten Dateimanager im Backend, der das komfortable Bearbeiten von Bildern ermöglicht (min. Drehen, Beschneiden und Skalieren), hilft aber schon mal bei vielen Problemen! Freu mich auf Feedback. imagecache.zip ( 1.71KB ) Anzahl der Downloads: 26 -------------------- |
|
|
Sun. 3. December 2006, 23:17
Beitrag
#2
|
|
Advanced Member Gruppe: Moderators Beiträge: 911 Mitglied seit: 26.06.2006 Wohnort: Essen; Ruhrgebiet Mitglieds-Nr.: 4 |
Hier sammel ich dann mal Eure Hinweise und fasse zusammen.
Bekannte Bugs, Sicherheitslücken
-------------------- |
|
|
Sun. 3. December 2006, 23:45
Beitrag
#3
|
|
Advanced Member Gruppe: AdvancedMembers Beiträge: 1.126 Mitglied seit: 27.06.2006 Mitglieds-Nr.: 7 |
es gab mal ein cms mit Namen Siteassistant. Dort wurden alle Bilder direkt in drei Grösen hinterlegt. Ich habe es noch irgendwo. Vielleicht kannst Du dort noch einige Tipps kriegen.
-------------------- ------
Ich gehe spazieren durch Gelsenkirchen |
|
|
Mon. 4. December 2006, 00:39
Beitrag
#4
|
|
Advanced Member Gruppe: AdvancedMembers Beiträge: 680 Mitglied seit: 09.08.2006 Wohnort: nähe Mainz Mitglieds-Nr.: 182 |
Hi
Idee & Umsetzung: Super! Auf sowas wär ich garnich gekommen Zum testen hab ich nur momentan keine Zeit *g* Gruß, Peter |
|
|
Mon. 4. December 2006, 01:14
Beitrag
#5
|
|
TRAIL AND ERROR SPECIALIST Gruppe: AdvancedMembers Beiträge: 1.708 Mitglied seit: 27.06.2006 Wohnort: Hansestadt Rostock, Deutschland Mitglieds-Nr.: 9 |
jep kann man so machen - on-demand-skalieren... mache ich bei einigen pics auf gothmund auch so - nur ohne htaccess - gute idee eigentlich.
ich poste hier mal meine funktion die ich auf gothmund verwende. auch nur zusammengehackt und hingebogen ... aber: vorteil davon ist das also auch gif und png möglich ist und das es bzgl. der resize-kalkulation genügt nur höhe oder nur breite anzugeben. vielleicht braucht ihr's ja. QUELLTEXT function resize( $filein,$fileout,$maxwidth="",$maxheight="")
{ // Get new dimensions list($width, $height) = getimagesize($filein); list($width_orig, $height_orig) = getimagesize($filein); if(preg_match("/.jpg/i", "$filein")) { $format = 'image/jpeg'; } if (preg_match("/.gif/i", "$filein")) { $format = 'image/gif'; } if(preg_match("/.png/i", "$filein")) { $format = 'image/png'; } switch($format) { case 'image/jpeg': $image = imagecreatefromjpeg($filein); break; case 'image/gif'; $image = imagecreatefromgif($filein); break; case 'image/png': $image = imagecreatefrompng($filein); break; } if(($maxwidth && $width_orig > $maxwidth) || ($maxheight && $height_orig > $maxheight)){ if($maxwidth && $width_orig > $maxwidth){ $widthratio = $maxwidth/$width_orig; $RESIZEWIDTH=true; } if($maxheight && $height_orig > $maxheight){ $heightratio = $maxheight/ $height_orig; $RESIZEHEIGHT=true; } if($RESIZEWIDTH && $RESIZEHEIGHT){ if($widthratio < $heightratio){ $ratio = $widthratio; }else{ $ratio = $heightratio; } }elseif($RESIZEWIDTH){ $ratio = $widthratio; }elseif($RESIZEHEIGHT){ $ratio = $heightratio; } $width = $width * $ratio; $height = $height * $ratio; } $thumb = imagecreatetruecolor($width , $height); if (function_exists(imageantialias)) imageantialias($thumb,true); imagealphablending($thumb, true); imagecopyresampled($thumb, $image, 0, 0, 0, 0,$width, $height, $width_orig, $height_orig); imagejpeg($thumb, $fileout,95); @imagedestroy($image); @imagedestroy($thumb); unset($filein,$fileout,$maxwidth,$maxheight); } -------------------- cheers, Alex
|
|
|
Mon. 4. December 2006, 09:20
Beitrag
#6
|
|
Advanced Member Gruppe: Moderators Beiträge: 911 Mitglied seit: 26.06.2006 Wohnort: Essen; Ruhrgebiet Mitglieds-Nr.: 4 |
@AMK:
Super, Danke. Gif und PNG Support sollen natürlich nachgezogen werden. @All: Schön, dass die Idee erstmal gefällt. Was sagt ihr denn zum Thema Sicherheit. Kann man den $path und §image ausnutzen um Schadcode einzuführen? Reicht es $path auf das Mediaverzeichnis zu beschränken? Kann man durch die nachträgliche CHMODisierung böse sachen machen? Ich bin einfach nicht so Hackerfirm -------------------- |
|
|
Mon. 4. December 2006, 11:20
Beitrag
#7
|
|
Advanced Member Gruppe: AdvancedMembers Beiträge: 613 Mitglied seit: 30.06.2006 Mitglieds-Nr.: 30 |
Auf jeden Fall solltest du die Variablen auf böse Zeichen überprüfen.
Die Einbindung, sozusagen im Frontend, gefällt mir persönlich nicht. Besser wäre doch das Script im Backend unbemerkt mit auszuführen. Sozusagen an den Dateiabgleich oder ander Stelle zu koppeln und dann gleichzeitig die 3 Größem mit zu generieren. Dann speichern unter BILD_large.jpg usw. Dann in der htaccess darauf umleiten. Somit spart es das ganze Verzeichniserstellen und die Bildchen sind im DM verfügbar. -------------------- |
|
|
Guest_bkm_* |
Mon. 4. December 2006, 11:51
Beitrag
#8
|
Guests |
Eine Idee wäre vielleicht auch das Einbinden von The PHP thumbnail creator .
|
|
|
Mon. 4. December 2006, 16:40
Beitrag
#9
|
|
Advanced Member Gruppe: Moderators Beiträge: 911 Mitglied seit: 26.06.2006 Wohnort: Essen; Ruhrgebiet Mitglieds-Nr.: 4 |
Die Einbindung, sozusagen im Frontend, gefällt mir persönlich nicht. Besser wäre doch das Script im Backend unbemerkt mit auszuführen. Sozusagen an den Dateiabgleich oder ander Stelle zu koppeln und dann gleichzeitig die 3 Größem mit zu generieren. Dann speichern unter BILD_large.jpg usw. Dann in der htaccess darauf umleiten. Somit spart es das ganze Verzeichniserstellen und die Bildchen sind im DM verfügbar. Ne ne, das ist mir für diesen Ansatz zu unflexibel. Da lege ich mich ja wieder im vorhinein auf irgendwelche Größen fest. Es ist einfach furchtbar blöd, wenn man sich da beschränkt, zumal ich das einfach als Hack sehe. Langfristig müssen da eh intelligente Lösungen her, was das Image handling angeht. Könnte mir vorstellen, dass über das API das skalieren auf die dem Einsatzzweck gewünschte größe passieren kann. Das wäre so ähnlich wie in meinem Beispiel, nur dass ich dann z.B. einfach in der Pic-Galerie die gewünschte Größe eingeben kann und im Dateimanager dann im Bedarfsfall einfach ein resizestes Bild in der Größe generiert wird. Eine Idee wäre vielleicht auch das Einbinden von The PHP thumbnail creator . Siehe oben. Sefrengo hat dafür ja schon viel Werkzeug mit drin. Soweit ich das sehe ist die Funktionalität vorhanden, nur die Umsetzung ist leider noch nicht da. Die Lösung so ist erstmal ein Workaround, der einem die Arbeit erleichtert, bis es etwas am Kern geschraubtes geben kann. -------------------- |
|
|
Mon. 4. December 2006, 17:25
Beitrag
#10
|
|
TRAIL AND ERROR SPECIALIST Gruppe: AdvancedMembers Beiträge: 1.708 Mitglied seit: 27.06.2006 Wohnort: Hansestadt Rostock, Deutschland Mitglieds-Nr.: 9 |
also ich denke es wäre gar nicht so schwer SF um die funktionalität zu erweitern, neben einer ordnerbeschreibung bspw. auch max-w und max-h für bilder-uploads für den entsprechenden ordner einzugeben (ich glaub ich erwähnte das schon irgendwo). beim upload wird dann automatisch 'n resize ausgeführt - fertig. sowas würde mir für den dateimanager komplett genügen.
ansonsten halte ich so ein resize-on-demand für gar nicht so schlecht - vielleicht nicht unbedingt permanent per htaccess, aber der cms-tag "image" könnte um eine solche funktionalität erweitert werden - bspw. resizex resizey attribute welche dann im frontend die bilddatei serverseitig skalieren - natürlich inkl. caching. auch ne idee imho. -------------------- cheers, Alex
|
|
|
Mon. 4. December 2006, 17:58
Beitrag
#11
|
|
Advanced Member Gruppe: Moderators Beiträge: 911 Mitglied seit: 26.06.2006 Wohnort: Essen; Ruhrgebiet Mitglieds-Nr.: 4 |
also ich denke es wäre gar nicht so schwer SF um die funktionalität zu erweitern, neben einer ordnerbeschreibung bspw. auch max-w und max-h für bilder-uploads für den entsprechenden ordner einzugeben (ich glaub ich erwähnte das schon irgendwo). beim upload wird dann automatisch 'n resize ausgeführt - fertig. sowas würde mir für den dateimanager komplett genügen. Muss sagen, dass mein Bedarf wohl noch etwas weiter geht. Aber diesen kann man durchaus über Plugins etc. decken. ansonsten halte ich so ein resize-on-demand für gar nicht so schlecht - vielleicht nicht unbedingt permanent per htaccess, aber der cms-tag "image" könnte um eine solche funktionalität erweitert werden - bspw. resizex resizey attribute welche dann im frontend die bilddatei serverseitig skalieren - natürlich inkl. caching. auch ne idee imho. Sowas fände ich auch ultra nett und entspricht in etwas dem was ich vorgeschlagen hatte. Dummerweise bin ich dazu widerum nicht fähig genug. Daher auch diese Hackbastellösung -------------------- |
|
|
Mon. 4. December 2006, 18:12
Beitrag
#12
|
|
TRAIL AND ERROR SPECIALIST Gruppe: AdvancedMembers Beiträge: 1.708 Mitglied seit: 27.06.2006 Wohnort: Hansestadt Rostock, Deutschland Mitglieds-Nr.: 9 |
jup Sascha, hab mich mit dem core & den tags auch noch nicht auseinandergesetzt. aber was nicht ist kann ja noch ...
-------------------- cheers, Alex
|
|
|
Wed. 6. December 2006, 01:59
Beitrag
#13
|
|
Advanced Member Gruppe: Members Beiträge: 54 Mitglied seit: 26.06.2006 Wohnort: Karlsruhe Mitglieds-Nr.: 3 |
Schön solche hübschen .htaccess Lösungen mag ich. Hab damit z.B. eine on-the-fly JS- und CSS-Dateien Komprimierung implementiert.
Zur Sicherheit: Nach QUELLTEXT $path = $_GET["path"]; $image = $_GET["image"]; sollte man noch einige checks machen, sonst könnte man das Skript mißbrauchen, um jede Datei, die der Webserver beschreiben kann, zu löschen: QUELLTEXT $pathinfo = pathinfo($path.$image); (code untested)if (strpos($pathinfo["dirname"], '..')!==false) die("not allowed"); if (!preg_match('~^(jpg|gif|png)$~', $pathinfo["extension"])) die("wrong extension"); if (!file_exists($path.$image)) die("file not found"); Außerdem kann man noch QUELLTEXT RewriteCond %{REQUEST_FILENAME} !-f vor die RewriteRules schreiben: QUELLTEXT # scaling small, medium, large (code untested)RewriteCond %{REQUEST_FILENAME} !-f RewriteRule (.*)small/([A-Za-z0-9]+).(jpg|gif|png)$ image.php?max_width=100&path=$1&image=$2.$3 [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteRule (.*)medium/([A-Za-z0-9]+).(jpg|gif|png)$ image.php?max_width=200&path=$1&image=$2.$3 [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteRule (.*)large/([A-Za-z0-9]+).(jpg|gif|png)$ image.php?max_width=300&path=$1&image=$2.$3 [L] Damit ist sichergestellt, dass Dateien, die wirklich unterhalb eines Ordners small/ liegen, nicht durch dein Skript geschoben werden sondern direkt ausgeliefert werden. Wenn du das Skript noch erweitern möchtest, führe doch auch noch die Behandlung von If-Modified-Since-Abfragen des Browsers ein, das verringert die Serverlast nochmal und verbessert die cachability der Bilder. Damit fühlen sich die Bilder dann wirklich wie "richtige" Bilder an. -------------------- Technikwürze - Design & Webstandards Podcast |
|
|
Thu. 7. December 2006, 22:30
Beitrag
#14
|
|
Advanced Member Gruppe: AdvancedMembers Beiträge: 680 Mitglied seit: 09.08.2006 Wohnort: nähe Mainz Mitglieds-Nr.: 182 |
Hi
Mir ist grad was aufgefallen: Aus dem Wiki QUELLTEXT <cms:mod type = "image" (Pflichtfeld) id = "[id]" [...] width = "true|false|[digit]" height = "true|false|[digit]" autoresize = "false|true" <--- [..] /> Wenn man autoresize aktiviert wird von Sefrengo automatisch ein Vorschaubild erstellt, welches die auf der längeren Seite genau die angegebene Größe hat. Gruß, Peter |
|
|
Fri. 8. December 2006, 10:24
Beitrag
#15
|
|
Advanced Member Gruppe: Moderators Beiträge: 911 Mitglied seit: 26.06.2006 Wohnort: Essen; Ruhrgebiet Mitglieds-Nr.: 4 |
WARUM SAGT DAS DENN KEINER Ist das echt so? muss ausprobiert werden! Wäre ja ein killerfeature!
-------------------- |
|
|
Sat. 9. December 2006, 20:33
Beitrag
#16
|
|
Advanced Member Gruppe: AdvancedMembers Beiträge: 680 Mitglied seit: 09.08.2006 Wohnort: nähe Mainz Mitglieds-Nr.: 182 |
Ja hab mir auch gedacht dass das mal etwas größer bekannt gegeben serden sollte *g*
Leider wird die angelegte Datei im Ressource-Browser nicht als Dateiformat angezeigt sondern als eigene Datei.. Gruß, Peter |
|
|
Thu. 25. January 2007, 09:35
Beitrag
#17
|
|
TRAIL AND ERROR SPECIALIST Gruppe: AdvancedMembers Beiträge: 1.708 Mitglied seit: 27.06.2006 Wohnort: Hansestadt Rostock, Deutschland Mitglieds-Nr.: 9 |
Eine Idee wäre vielleicht auch das Einbinden von The PHP thumbnail creator . danke für den tipp - das ding heisst zwar phpThumb() aber is trotzdem ziemlich gut ... vielleicht etwas überladen mit all den features aber es macht inkl. der unscharfmaske 1A thumbs ... und lässt sich auch problemlos mit mod_rewrite einsetzten (imho) ... -------------------- cheers, Alex
|
|
|
Guest_bkm_* |
Thu. 25. January 2007, 13:56
Beitrag
#18
|
Guests |
danke für den tipp - das ding heisst zwar phpThumb() aber is trotzdem ziemlich gut ... ZITAT vielleicht etwas überladen mit all den features aber es macht inkl. der unscharfmaske 1A thumbs Fakt ist sowas überladen wenn man nur ein "Feature" braucht (aber sonst ganz nett und OS) Zum reinen erstellen von Thumb langt doch auch SF (Pear Image) und mit MaZderMind Beispiel gehts einfach im Format original.jpg nach original_BreiteXHöhe.jpg |
|
|
Thu. 25. January 2007, 14:02
Beitrag
#19
|
|
TRAIL AND ERROR SPECIALIST Gruppe: AdvancedMembers Beiträge: 1.708 Mitglied seit: 27.06.2006 Wohnort: Hansestadt Rostock, Deutschland Mitglieds-Nr.: 9 |
wie gesagt die unscharfmaskierung ist ziemlich gut imho ... naja und die cache organisation usw. ... schon gut das dingens!
-------------------- cheers, Alex
|
|
|
Thu. 25. January 2007, 15:00
Beitrag
#20
|
|
Advanced Member Gruppe: Moderators Beiträge: 911 Mitglied seit: 26.06.2006 Wohnort: Essen; Ruhrgebiet Mitglieds-Nr.: 4 |
Langfristig hätte ich trotzdem gerne einen web2.0 artigen Imagebearbeiter im Backend
-------------------- |
|
|
Vereinfachte Darstellung | Aktuelles Datum: 27.9.24 - 04:31 |