[phpBB Debug] PHP Warning: in file [ROOT]/ext/tas2580/seourls/event/listener.php on line 213: Undefined array key "FORUM_NAME"
Medienpool erweitern: Resize schon beim Hochladen - REDAXO Forum
Hallo,

Wir haben in letzter Zeit festgestellt, dass die Kommunikation via Slack viel schneller und zielführender ist als ein Beitrag im Forum. Aufgrund der neuen und besseren Möglichkeiten der Kommunikation haben wir uns entschlossen das Forum nur noch als Archiv zur Verfügung zu stellen. Somit bleibt es weiterhin möglich hier nach Lösungen zu suchen. Neue Beiträge können nicht mehr erstellt werden.

Wir empfehlen, für deine Fragen/Probleme Slack zu nutzen. Dort sind viele kompetente Benutzer aktiv und beantworten jegliche Fragen, gerne auch von REDAXO-Anfängern! Slack wird von uns sehr intensiv und meistens "rund um die Uhr" benutzt :-)
Selbst einladen kannst Du dich hier: https://redaxo.org/slack/
Benutzeravatar
cukabeka
Beiträge: 821
Registriert: 31. Mai 2006, 00:01
Wohnort: Aschaffenburg

Medienpool erweitern: Resize schon beim Hochladen

17. Okt 2006, 21: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?

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

12. Nov 2006, 00:36

Hi

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

CU

Benutzeravatar
Jan.Kristinus
Admin
Beiträge: 2166
Registriert: 24. Aug 2004, 22:11
Wohnort: Frankfurt
Kontaktdaten: ICQ Website

12. Nov 2006, 11: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
cukabeka
Beiträge: 821
Registriert: 31. Mai 2006, 00:01
Wohnort: Aschaffenburg

13. Nov 2006, 23: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
Markus.Staab
Entwickler
Beiträge: 9634
Registriert: 29. Jan 2005, 15:50
Wohnort: Aschaffenburg/Germany
Kontaktdaten: ICQ Website

14. Nov 2006, 13:04


Benutzeravatar
cukabeka
Beiträge: 821
Registriert: 31. Mai 2006, 00:01
Wohnort: Aschaffenburg

14. Nov 2006, 13: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
Markus.Staab
Entwickler
Beiträge: 9634
Registriert: 29. Jan 2005, 15:50
Wohnort: Aschaffenburg/Germany
Kontaktdaten: ICQ Website

14. Nov 2006, 17: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

TheStranger
Beiträge: 29
Registriert: 5. Jul 2006, 12:36

31. Jan 2007, 10: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!

Benutzeravatar
cukabeka
Beiträge: 821
Registriert: 31. Mai 2006, 00:01
Wohnort: Aschaffenburg

31. Jan 2007, 18: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..

TheStranger
Beiträge: 29
Registriert: 5. Jul 2006, 12:36

31. Jan 2007, 19:42

Werd mal sehen ob ich das nicht auch in eine Action umbauen kann. Muß ich mich nur noch mit befassen (Actions).

Benutzeravatar
Markus.Staab
Entwickler
Beiträge: 9634
Registriert: 29. Jan 2005, 15:50
Wohnort: Aschaffenburg/Germany
Kontaktdaten: ICQ Website

31. Jan 2007, 21:44

Hi,

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

Gruß,
Markus

Benutzeravatar
cukabeka
Beiträge: 821
Registriert: 31. Mai 2006, 00:01
Wohnort: Aschaffenburg

1. Feb 2007, 14: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
Markus.Staab
Entwickler
Beiträge: 9634
Registriert: 29. Jan 2005, 15:50
Wohnort: Aschaffenburg/Germany
Kontaktdaten: ICQ Website

1. Feb 2007, 21: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

Dr KillerJoe
Beiträge: 1711
Registriert: 24. Nov 2005, 22:29
Kontaktdaten: ICQ Website Yahoo Messenger

21. Feb 2007, 00: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!!!

Goldacker
Beiträge: 148
Registriert: 1. Jul 2007, 13:27
Wohnort: Hamburg / Berlin / Neubrandenburg
Kontaktdaten: Website

Funktioniert nicht - Fehlermeldung

1. Jul 2007, 16: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?

TheStranger
Beiträge: 29
Registriert: 5. Jul 2006, 12:36

22. Aug 2007, 13:03

Hi, habe Dir zwar per PN geantwortet aber ich sehe gerade das es hier noch nicht steht.

Mit config meine ich die "master.inc.php" unter redaxo/include.
Dort steht in Zeile 29 folgendes
$REX['MEDIAFOLDER'] = $REX['HTDOCS_PATH']."files";

nun einfach darunter folgendes einfügen und speichern
$REX['MEDIAFOLDER_TEMP'] = $REX['HTDOCS_PATH']."files/temp";

Dem Ordner auch Schreibrechte geben 755 oder 777, dann sollte es eigentlich funktionieren.

Benutzeravatar
cukabeka
Beiträge: 821
Registriert: 31. Mai 2006, 00:01
Wohnort: Aschaffenburg

19. Nov 2007, 14:16

TheStranger hat geschrieben: 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")
hat das schon mal jemand mit redaxo4 ausprobiert? wurde am medienpoll grundlegendes geändert?

iceman-fx
Beiträge: 467
Registriert: 13. Feb 2007, 16:16
Wohnort: Sachsen
Kontaktdaten: Website

20. Nov 2007, 10:33

Kann man diesen Extpoint prinzipiell nur über ein Addon, Template oder Modul nutzen?

Wenn ja, wie kann dieser dann im Medienpoll funktionieren bzw. wie bindet man diesen denn dort ein, sofern man dies nicht "hart" eincodieren möchte?

Gruß iceman

cmcave
Beiträge: 5
Registriert: 10. Mär 2008, 23:11

12. Apr 2008, 09:30

Hallo

Gibt es bezüglich Skalierung/Resize gleich beim Upload schon eine Lösung?

Dies ist ein Problem, welches immer wieder im Forum auftaucht -> warum Bilder nicht angezeigt werden.

Weiter fände ich es super, wenn es im Mediapool integriert wäre. Dies heisst, dass man per Checkbox auswählen kann, ob ein grosses Bild skaliert werden soll. Kleine Bilder müssen nicht skaliert werden.

Besten Dank für eine Antwort
Gruss
Christian

Benutzeravatar
jdlx
Beiträge: 2615
Registriert: 29. Sep 2005, 10:50
Wohnort: Hamburg
Kontaktdaten: Website

8. Mai 2008, 15:28

Hallo,
cmcave hat geschrieben: Gibt es bezüglich Skalierung/Resize gleich beim Upload schon eine Lösung?
Kann es garnicht. Das Problem liegt serverseitig am maximalen RAM und der CPU bzw. script time.. daran kannst du nichts drehn, das sind fixe Parameter deines Hosters. Egal was du in Redaxo versuchst, es geschieht eben serverseitig, und somit gelten diese Grenzen.

D.h.: clientseitige Lösung, oder Hosting upgraden..

lg,
Jan

Benutzeravatar
cukabeka
Beiträge: 821
Registriert: 31. Mai 2006, 00:01
Wohnort: Aschaffenburg

8. Mai 2008, 19:02

jeandeluxe hat geschrieben:
cmcave hat geschrieben: Gibt es bezüglich Skalierung/Resize gleich beim Upload schon eine Lösung?
Kann es garnicht. Das Problem liegt serverseitig am maximalen RAM und der CPU bzw. script time..
sicher? ich glaube, da kann man so einiges drehen.

dass ein resize beim upload prinzipiell möglich ist, ist ja schon mal klar. beim resize-modul von R4 kann man doch sehr viel verstellen, unter anderem auch die uploadgröße. häufig wird die (zumindest in R3) nämlich durch das modul selbst beschränkt - wo man dort die maximale pixel-breite angeben kann, ist mir allerdings nicht klar.

Benutzeravatar
jdlx
Beiträge: 2615
Registriert: 29. Sep 2005, 10:50
Wohnort: Hamburg
Kontaktdaten: Website

9. Mai 2008, 13:26

Moin,
cukabeka hat geschrieben:
jeandeluxe hat geschrieben: Kann es garnicht. Das Problem liegt serverseitig am maximalen RAM und der CPU bzw. script time..
sicher? ich glaube, da kann man so einiges drehen.
Woran willst du drehen?
cukabeka hat geschrieben: dass ein resize beim upload prinzipiell möglich ist, ist ja schon mal klar.
Definiere "beim upload".. du lädst eine Datei hoch - vorher ist sie auf deinem Rechner, danach auf dem Server.
cukabeka hat geschrieben: beim resize-modul von R4 kann man doch sehr viel verstellen, unter anderem auch die uploadgröße. häufig wird die (zumindest in R3) nämlich durch das modul selbst beschränkt
Nicht das ich wüßte. Die Uploadgröße is im übrigen aber auch garnicht das Problem..
cukabeka hat geschrieben: - wo man dort die maximale pixel-breite angeben kann, ist mir allerdings nicht klar.
Nochmal: die Grenzen setzt dir dein Hoster, und normalerweise werden die auch strikt durchgesetzt. Wenn du versuchst per php.ini, oder im script Werte hochzusetzen, dann geht das eben nur in dem gesetzten Rahmen.

Sprich du kannst gerne dein memory_limit auf 128M setzen.. bekommen wirst du nur das was dir im Rahmen deines hosting-Pakets zugestanden wird.

lg,
Jan

Benutzeravatar
cukabeka
Beiträge: 821
Registriert: 31. Mai 2006, 00:01
Wohnort: Aschaffenburg

15. Jan 2010, 20:21

so, nochmal dieses thema.

ich weiß, dass das wordpress und andere CMS können, also sollte das redaxo auch können.

es ist ja unerheblich, wie viel MB die hoster erlauben. ich gehe von einer normalen digicam-JPG-datei aus. die hat maximal 2 MB. das schafft jeder hoster, der mir bisher untergekommen ist.

und jetzt bräuchte ich hilfe von addon-erfahrenen. wenn ich den medienpool mit einem addon erweitern will, wie gehe ich vor? ich will, dass das addon jedes mal, wenn ein JPG, GIF oder PNG hochgeladen wird, eine funktion aufgerufen wird. wie geht das?

ich hab mal bei multiple_uploader in die config.inc geschaut. da steht:

Code: Alles auswählen


rex_register_extension('PAGE_MEDIAPOOL_MENU', 'rex_8614_insert');

if($REX["REDAXO"] == true) {
	if (strcmp($_GET['page'], 'mediapool')==0){
		if (isset($_GET['subpage'])) {
			if (strcmp($_GET['subpage'], 'multiupload')==0) {
				rex_register_extension('OUTPUT_FILTER', 'rex_8614_output');
			}
		}
	}
}

wie kann ich das als Grundlage für das auto-resize-addon nehmen? wie definiere ich den punkt nach dem upload, bei dem die funktion (ich denke hier an timthumb) das bild nimmt und auf eine maximalbreite/höhe bringt?

Zurück zu „Allgemeines [R3]“