Medienpool erweitern: Resize schon beim Hochladen

Fragen/Tipps allgemeiner Art.

Medienpool erweitern: Resize schon beim Hochladen

Beitragvon cukabeka » 17. Okt 2006, 20:13

ich stehe vor dem problem, dass meine benutzer häufig irgendwelche bilder aus digitalkameras hochladen werden, die natürlich recht groß sein können. leider hat auch unser hoster uns nicht unbegrenzt platz geschenkt, so dass ich die bilder schon beim hochladen in den medienpool gerne auf eine maximalgröße bringen würde.
wie macht man das denn am besten? als action? oder gibt es evtl schon eine fertige erweiterung, die das kann?
Benutzeravatar
cukabeka
 
Beiträge: 653
Registriert: 30. Mai 2006, 23:01
Wohnort: Aschaffenburg

Beitragvon netable » 11. Nov 2006, 23:36

Hi

Ich plage mich grade mit dem Selben Problem rum.
Vielleicht hat jmd ja ne Idee!!!!!

CU
netable
 
Beiträge: 61
Registriert: 5. Okt 2006, 02:13

Beitragvon Jan.Kristinus » 12. Nov 2006, 10:02

Hi,

es gibt einen Extension Point - MEDIA_ADDED.. An den kann man sich andocken und bekommt darüber die Informationen zur Datei.. D.h. ein AddOn bauen bei welchem dieser EP verwendet wird und die Datei wird nach dem hochladen resized.. Fertig gibt es das nicht.. Müsst Ihr leider selber ran. EInfach mal ein AddOn Demo holen (In der Demo oder im Wiki zu finden.) und dann schauen wie man den EP anspricht.. ist nur ein Funktionsaufruf. und dann resizen..

Klingt jetzt komplizierter als es ist .. EInfach mal loslegen und bei Problemen fragen ..

lg

jan
Yakamara Media GmbH & Co. KG | Kaiserstrasse 69 | 60329 Frankfurt
Tel.: 069-900.20.60.30
http://www.yakamara.de/
Benutzeravatar
Jan.Kristinus
Admin
 
Beiträge: 1928
Registriert: 24. Aug 2004, 21:11
Wohnort: Frankfurt

Beitragvon cukabeka » 13. Nov 2006, 22:45

hmm. klingt gut. nur: was ist ein extensionPoint? ein AddOn? oder sowas? leider hab ich noch keine ahnung. das Addon ist doch ein eigenständig ablaufendes unterprogramm, das ich als benutzer irgendwie aufrufen muss. wie kommt das dann in den medienpool?
Benutzeravatar
cukabeka
 
Beiträge: 653
Registriert: 30. Mai 2006, 23:01
Wohnort: Aschaffenburg

Beitragvon Markus.Staab » 14. Nov 2006, 12:04

Benutzeravatar
Markus.Staab
Entwickler
 
Beiträge: 9781
Registriert: 29. Jan 2005, 14:50
Wohnort: Aschaffenburg/Germany

Beitragvon cukabeka » 14. Nov 2006, 12:39

[räusper.] okay. sorry. für alle beteiligten nochmal das zitat:

REDAXO bietet durch eine Extension Point API die Möglichkeit, via Addon/Modul/Template direkt in den Workflow einzugreifen. Dies ist mit folgenden Funktionen möglich:
rex_register_extension_point
rex_register_extension
rex_is_registered_extension

Diese Extension Points kann man sich als Schnittstellen vorstellen, an denen man sich mit einer beliebigen Funktion einhaken kann. Jeder Extension Point hat unterschiedliche Parameter, die der eingehakten Funktion als Array übergeben werden.

---

Extension Point: MEDIA_ADDED

Dieser Extension Point wird aufgerufen, wenn im Medienpool ein Medium hinzugefügt wurde.

Folgende Parameter werden der Extension übergeben:
filename Dateiname
type MIME-Type
title Name des Medium im Pool


hm. wie würde ich das im addon also aufrufen?

der eigentliche call ist laut doku ja so:

Code: Alles auswählen
rex_register_extension('OUTPUT_FILTER', 'rex_insert_special_urls');


in unserem fall wäre das also

Code: Alles auswählen
rex_register_extension('MEDIA_ADDED', 'neue_spezialfunktion_zum_resize');


seh ich das richtig? und wo kommen jetzt die parameter hin, wenn ich zB will, dass nur jpg-dateien betroffen sind?
Benutzeravatar
cukabeka
 
Beiträge: 653
Registriert: 30. Mai 2006, 23:01
Wohnort: Aschaffenburg

Beitragvon Markus.Staab » 14. Nov 2006, 16:15

Hi,

dein Ansatz ist schonmal gut.

Nun wird also nachdem Hochladen eines Mediums die Funktion 'neue_spezialfunktion_zum_resize' aufgerufen.

Die Parameter, welche diese als Array übergeben bekommt, findest du hier dokumentiert:
http://www.redaxo.de/187-0-mediaadded.html

Was du nun mit diesen anstellst ist voll dir überlassen. Du musst jetzt hier also eine Funktion finden, die anhand der übergeben Daten das richtig Feld heraussucht (evtl mit OOMedia) und dann das ursprüngliche Bild resizen, bzw eine resizedte variante dessen anlegen.

Gruß,
Markus
Benutzeravatar
Markus.Staab
Entwickler
 
Beiträge: 9781
Registriert: 29. Jan 2005, 14:50
Wohnort: Aschaffenburg/Germany

Beitragvon TheStranger » 31. Jan 2007, 09:22

Hi!

Ich weiß, der Thread ist schon 2 Monate alt aber gibt es schon was neues bzgl. des autom. Rezise nach dem Upload von Bildern?

Meine Überlegung ist folgende:

Beim Upload muß gecheckt werden welche Art Typ die Datei ist. Ist sie ein Bild muß sie vorerst in einen Temp-Ordner z.B. unterhalb vom Files-Ordner abgelegt werden. Alle anderen Dateien werden gleich in den Files-Ordner kopiert.

Bei Bildern muß dann geschaut werden wie groß sie sind und beim überschreiten einer xbelibigen Breite z.B. 800px werden diese verkleinert ansonsten in den Files-Ordner verschoben.

Ist schon jemand soweit?


EDIT:

So ich hab mal den Medienpool bzw. die function saveMedia() etwas erweitert. Unterhalb vom Ordner "files" noch einen "temp" Ordner erstellen und in der config dies mit angeben. Zeile 455 - 474 des Medienpools hab ich wie folgt geändert:

Code: Alles auswählen
if($FILETYPE != "image/pjpeg") {
     // ----- dateiupload
   $upload = true;
   $fileart = 1;
   if(!@move_uploaded_file($FILE['tmp_name'],$REX['MEDIAFOLDER']."/$NFILENAME") ) {
      if(!@copy($FILE['tmp_name'],$REX['MEDIAFOLDER']."/$NFILENAME")) {
         $message .= "move file $FILENAME failed | ";
           $ok = 0;
           $upload = false;
      }
     }
  } else {
     // ----- dateiupload
   $upload = true;
   $fileart = 2;
   if(!@move_uploaded_file($FILE['tmp_name'],$REX['MEDIAFOLDER_TEMP']."/$NFILENAME") ) {
      if(!@copy($FILE['tmp_name'],$REX['MEDIAFOLDER_TEMP']."/$NFILENAME")) {
         $message .= "move file $FILENAME failed | ";
           $ok = 0;
           $upload = false;
      }
     }   
  }

  if($upload) {
    if($fileart == "1") {
      chmod($REX['MEDIAFOLDER']."/$NFILENAME", $REX['FILEPERM']);
      
      // get widht height
       $size = @getimagesize($REX['MEDIAFOLDER']."/$NFILENAME");
   } else {
      @chmod($REX['MEDIAFOLDER_TEMP']."/$NFILENAME", $REX['FILEPERM']);
      
      // get widht height
       $size = @getimagesize($REX['MEDIAFOLDER_TEMP']."/$NFILENAME");
      
      // Breite größer Höhe?
      if($size[0] > $size[1]) {
         if($size[0] > "800") {
            $tempImage = imagecreatefromjpeg($REX['MEDIAFOLDER_TEMP']."/$NFILENAME");
            $ax = imagesx($tempImage);
            $ay = imagesy($tempImage);
            
            //neue Maße
            $nx = "800";
            $ny = ($nx/$ax)*$ay;
            
            $newImage = imagecreatetruecolor($nx,$ny);
            imagecopyresampled($newImage,$tempImage,0,0,0,0,$nx,$ny,$ax,$ay);
            @imagejpeg($newImage,$REX['MEDIAFOLDER']."/$NFILENAME", 80);
            @imagedestroy($tempImage);
            @unlink($REX['MEDIAFOLDER_TEMP']."/$NFILENAME");
            
            // neu berechnen
            $size = @getimagesize($REX['MEDIAFOLDER']."/$NFILENAME");
            $FILESIZE = @filesize($REX['MEDIAFOLDER']."/$NFILENAME");
         } else {
             @copy($REX['MEDIAFOLDER_TEMP']."/$NFILENAME",$REX['MEDIAFOLDER']."/$NFILENAME");
             @unlink($REX['MEDIAFOLDER_TEMP']."/$NFILENAME");
         }
      } else {
         if($size[0] > "600") {
            $tempImage = imagecreatefromjpeg($REX['MEDIAFOLDER_TEMP']."/$NFILENAME");
            $ax = imagesx($tempImage);
            $ay = imagesy($tempImage);
            
            //neue Maße
            $ny = "600";
            $nx = ($ny/$ay)*$ax;
                        
            $newImage = imagecreatetruecolor($nx,$ny);
            imagecopyresampled($newImage,$tempImage,0,0,0,0,$nx,$ny,$ax,$ay);
            @imagejpeg($newImage,$REX['MEDIAFOLDER']."/$NFILENAME", 80);
            @imagedestroy($tempImage);
            @unlink($REX['MEDIAFOLDER_TEMP']."/$NFILENAME");
            
            // neu berechnen
            $size = @getimagesize($REX['MEDIAFOLDER']."/$NFILENAME");
            $FILESIZE = @filesize($REX['MEDIAFOLDER']."/$NFILENAME");
         } else {
             @copy($REX['MEDIAFOLDER_TEMP']."/$NFILENAME",$REX['MEDIAFOLDER']."/$NFILENAME");
             @unlink($REX['MEDIAFOLDER_TEMP']."/$NFILENAME");
         }
      }
      @chmod($REX['MEDIAFOLDER']."/$NFILENAME", $REX['FILEPERM']);
   }
   
   // hier geht es weiter mit der SQL-Datenbank



Funktioniert soweit! Alles außer Jpegs werden normal hochgeladen. Jpegs werden in einem TEMP-Ordner abgelegt. Überschreitet die Bildgröße (800w bzw. 600h) dann wird es resampled, neu gespeichert und das alte gelöscht.

Hoffe das kann jemand gebrauchen!
TheStranger
 
Beiträge: 29
Registriert: 5. Jul 2006, 11:36

Beitragvon cukabeka » 31. Jan 2007, 17:24

wow, ein erster ansatz! danke schon mal!

das ganze müsste jetzt nur noch als action umgebaut werden, damit nicht im redaxo-core rumgehackt werden muss. die erweiterung soll ja auch das update auf 3.3. miterleben..;)

hat da jemand noch einen tipp, wie man da ansetzen kann? dann würde ich mal versuchen, das ganze in eine action zu übertragen..
Benutzeravatar
cukabeka
 
Beiträge: 653
Registriert: 30. Mai 2006, 23:01
Wohnort: Aschaffenburg

Beitragvon TheStranger » 31. Jan 2007, 18:42

Werd mal sehen ob ich das nicht auch in eine Action umbauen kann. Muß ich mich nur noch mit befassen (Actions).
TheStranger
 
Beiträge: 29
Registriert: 5. Jul 2006, 11:36

Beitragvon Markus.Staab » 31. Jan 2007, 20:44

Hi,

mit Aktions kannste beim Upload nichts machen... Aber evtl mit nem ExtensionPoint falls es da nen passenden gibt.

Gruß,
Markus
Benutzeravatar
Markus.Staab
Entwickler
 
Beiträge: 9781
Registriert: 29. Jan 2005, 14:50
Wohnort: Aschaffenburg/Germany

Beitragvon cukabeka » 1. Feb 2007, 13:34

habs jetzt noch nicht ausprobiert, aber habe der doku mal folgendes entnommen:

http://www.redaxo.de/194-0-rexregistere ... point.html

man bräuchte als vermutlicherweise den punkt "MEDIA_ADDED", an dem man die funktion "resize_on_upload" anhängt.

Code: Alles auswählen
rex_register_extension( 'MEDIA_ADDED','resize_on_upload');


und wenn ich das richtig verstanden habe, definiere ich diese funktion dann im ADDON, richtig?
Benutzeravatar
cukabeka
 
Beiträge: 653
Registriert: 30. Mai 2006, 23:01
Wohnort: Aschaffenburg

Beitragvon Markus.Staab » 1. Feb 2007, 20:01

Hi,

Extensions kann man überall definieren.. Sie müssen nur auch dann definiert sein, wenn der ExtensionPoint ausgelöst wird...

Daher am besten in der config.inc.php eines Addons.

Gruß,
Markus
Benutzeravatar
Markus.Staab
Entwickler
 
Beiträge: 9781
Registriert: 29. Jan 2005, 14:50
Wohnort: Aschaffenburg/Germany

Beitragvon Dr KillerJoe » 20. Feb 2007, 23:28

Gibts für das Problem schon ein ADD-On?

Ich hab nämlich bei einem Provider das Problem, daß php max 2MB erstellen darf...

mfg
Flo
Die Doku und Wiki sind Deine Freunde!!!
Dr KillerJoe
 
Beiträge: 1729
Registriert: 24. Nov 2005, 21:29

Funktioniert nicht - Fehlermeldung

Beitragvon Goldacker » 1. Jul 2007, 15:01

Habs probiert das Script von TheStranger zum laufen zu bringen. Allerdings hat es nicht funktioniert und eine fehlermeldung ausgeworfen.
Ich glaube das hängt mit folgendem zusammen:

Unterhalb vom Ordner "files" noch einen "temp" Ordner erstellen und in der config dies mit angeben


wo ist die config und wie gebe ich das da an?
Goldacker
 
Beiträge: 148
Registriert: 1. Jul 2007, 12:27
Wohnort: Hamburg / Berlin / Neubrandenburg

Nächste

Zurück zu Allgemeines [R3]

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast