Willkommen, Gast ( Anmelden | Registrierung )     [ Hilfe | Mitglieder | Suche ]

2 Seiten V   1 2 >  
Reply to this topicStart new topic
> Unterschiedliche Bildgrößen auf "Anfrage"..., per ModRewrite werden Bilder neu berechnet und gecached!
saschapi
Beitrag 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
  1. htaccess Datei in den Root kopieren
  2. image.php in den Root kopieren
  3. Ordner "cache" im Root erstellen und 777 chmod geben
ToDo
- 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! wink.gif
- 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! smile.gif

Freu mich auf Feedback.
Angehängte Datei  imagecache.zip ( 1.71KB ) Anzahl der Downloads: 26


--------------------
Go to the top of the page
 
+Quote Post
saschapi
Beitrag 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
  • bei tief verschachtelten Verzeichnissen werden die Rechte schlecht gesetzt, so dass die Dateien und Ordner hinterher nicht mehr per FTP gelöscht werden können
Feature Request


--------------------
Go to the top of the page
 
+Quote Post
gunwalt
Beitrag 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
Go to the top of the page
 
+Quote Post
MaZderMind
Beitrag 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 biggrin.gif
Zum testen hab ich nur momentan keine Zeit *g*

Gruß, Peter
Go to the top of the page
 
+Quote Post
amk
Beitrag 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
Go to the top of the page
 
+Quote Post
saschapi
Beitrag 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. smile.gif

@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 wink.gif


--------------------
Go to the top of the page
 
+Quote Post
Olaf
Beitrag 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.


--------------------
Gruß Olaf aus Ohorn

Lieber spät und richtig als nie und falsch.
Go to the top of the page
 
+Quote Post
Guest_bkm_*
Beitrag Mon. 4. December 2006, 11:51
Beitrag #8





Guests






Eine Idee wäre vielleicht auch das Einbinden von The PHP thumbnail creator .
Go to the top of the page
 
+Quote Post
saschapi
Beitrag 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



ZITAT(Olaf @ Mon. 4. December 2006, 11:20) *
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.

ZITAT(bkm @ Mon. 4. December 2006, 11:51) *
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. smile.gif


--------------------
Go to the top of the page
 
+Quote Post
amk
Beitrag 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
Go to the top of the page
 
+Quote Post
saschapi
Beitrag 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



ZITAT(amk @ Mon. 4. December 2006, 17:25) *
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. smile.gif Aber diesen kann man durchaus über Plugins etc. decken.
ZITAT(amk @ Mon. 4. December 2006, 17:25) *
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


--------------------
Go to the top of the page
 
+Quote Post
amk
Beitrag 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 ... smile.gif


--------------------
cheers, Alex
Go to the top of the page
 
+Quote Post
Daniel
Beitrag 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 smile.gif 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);
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");
(code untested)

Außerdem kann man noch
QUELLTEXT
RewriteCond %{REQUEST_FILENAME} !-f

vor die RewriteRules schreiben:
QUELLTEXT
# scaling small, medium, large
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]
(code untested)

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
Go to the top of the page
 
+Quote Post
MaZderMind
Beitrag 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
Go to the top of the page
 
+Quote Post
saschapi
Beitrag 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 biggrin.gif Ist das echt so? muss ausprobiert werden! Wäre ja ein killerfeature!


--------------------
Go to the top of the page
 
+Quote Post
MaZderMind
Beitrag 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.. smile.gif

Gruß, Peter
Go to the top of the page
 
+Quote Post
amk
Beitrag 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



ZITAT(bkm @ Mon. 4. December 2006, 11:51) *
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 wink.gif ... 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
Go to the top of the page
 
+Quote Post
Guest_bkm_*
Beitrag Thu. 25. January 2007, 13:56
Beitrag #18





Guests






ZITAT(amk @ Thu. 25. January 2007, 09:35) *
danke für den tipp - das ding heisst zwar phpThumb() aber is trotzdem ziemlich gut wink.gif ...

laugh.gif laugh.gif laugh.gif

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
Go to the top of the page
 
+Quote Post
amk
Beitrag 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! smile.gif


--------------------
cheers, Alex
Go to the top of the page
 
+Quote Post
saschapi
Beitrag 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 wink.gif


--------------------
Go to the top of the page
 
+Quote Post

2 Seiten V   1 2 >
Reply to this topicStart new topic
1 Besucher lesen dieses Thema (Gäste: 1 | Anonyme Besucher: 0)
0 Mitglieder:

 



RSS Vereinfachte Darstellung Aktuelles Datum: 19.3.24 - 08:47

Sefrengo ist ein eingetragenes Markenzeichen und urheberrechtlich geschützt.
Copyright 2009 Design & Daten, Alle Rechte vorbehalten.