WBCE CMS Forum

WBCE CMS – Way Better Content Editing.

Du bist nicht angemeldet.

#1 16.09.2018 18:30:46

hansis100
Mitglied

Bildverkleinerung beim Upload

Hallo!

Ich bin auf das Modul von mpform gewechselt und habe beim Fotoupload eine Größenbeschränkung von 2MB eingestellt. Nun werden die Fotos natürlich immer größer und ich kann von meinen Usern nicht verlagen, dass sie diese vorher konvertieren. Ist es irgendwie möglich die Fotos nach dem Upoad zu verkleinern? Oder ist das vielleicht irgendwo in den WBCE-Einstellungen möglich?

danke
hansi

Offline

#2 16.09.2018 19:24:20

florian
Administrator

Re: Bildverkleinerung beim Upload

in den WBCE-Einstellungen leider nicht.
Eventuell lässt sich da mit Javascript was machen, fertige Lösungen gibts aber meines Wissens nicht.
https://www.google.de/search?q=resize+i … javascript


Code allein macht nicht glücklich. Jetzt spenden!

Offline

#3 17.09.2018 10:23:58

mrbaseman
Developer

Re: Bildverkleinerung beim Upload

in mpform gibt's auch keine voreingebaute Möglichkeit. Du kannst natürlich das Größenlimit hochsetzen (wenn die Bilder unskaliert hochgeladen werden sollen, musst du das sowieso).
Um eine Verarbeitung anzutriggern, würde sich private_function_after_email anbieten. Dort kannst du (falls ImageMagick und die entsprechende PHP-Einbindung serverseitig installiert ist), die Skalierung selbst implementieren.
Vielleicht sind aber Galerie-Module, die einen Bilder-Upload anbieten, für den Anwendungsfall besser geeignet?

Offline

#4 17.09.2018 14:54:12

hansis100
Mitglied

Re: Bildverkleinerung beim Upload

Hallo!
danke für die Infos. ImageMagick würde angeboten werden, allerdings übersteigt das meine Fähigkeiten  smile
vielleicht finde ich da noch war raus.

thx
hansi

Beitrag geändert von hansis100 (17.09.2018 14:54:43)

Offline

#5 18.09.2018 08:56:44

hansis100
Mitglied

Re: Bildverkleinerung beim Upload

Hallo!

Nun habe ich es geschafft mir ein Droplet zu erstellen, das mir die angegebene Datei verkleinert.
Jeztz muss ich es nur noch schaffen in der funktion "private_function_on_success($section_id)" den richtigen Filelink auszulesen.

Ich dachte mir, dass ich das angegebene Uploadverzeichnis und das Formularfeld auslese.

Formularfeld (File) kann man über $_SESSION['mpf']['field12'] auslesen. Nur wird die Datei ja von mpform umbenannt in YYYYMMDDHHMMSS-????-<filename>.

--> Wie also bekomme ich den richtigen Filename?
--> Wie kann ich  das gesetzte Uploadverzeichnis auslesen? Das habe ich in der Hilfe nicht gefunden. Im Code habe ich ein Array gefunden: fetch_settings['upload_files_folder']; nur kann ich darauf nicht zugreifen.

Vielleicht weiss das jemand.

danke
Hansi

Offline

#6 18.09.2018 10:05:20

mrbaseman
Developer

Re: Bildverkleinerung beim Upload

die Info müsste in $_SESSION['mpf']['datafield'.$field_id]['files'] enthalten sein. Das sollte ein Array sein, in dem die kompletten Pfade auf dem Webserver als Index verwendet werden und die jeweiligen Einträge sind die original Filenamen (aus denen unzulässige Zeichen entfernt wurden).

Offline

#7 18.09.2018 10:23:03

mrbaseman
Developer

Re: Bildverkleinerung beim Upload

was mich jetzt doch noch stutzig macht:

hansis100 schrieb:

Nun habe ich es geschafft mir ein Droplet zu erstellen, das mir die angegebene Datei verkleinert.

du meinst einen php-Schnipsel, der dann letztendlich in die private Funktion rein soll, oder?
Unter Droplets versteht man nämlich Code-Schnipsel, die bei der Darstellung(!) einer Seite im Frontend ablaufen und dort dynamisch Inhalt erzeugen.

Offline

#8 18.09.2018 11:01:56

hansis100
Mitglied

Re: Bildverkleinerung beim Upload

mrbaseman schrieb:

was mich jetzt doch noch stutzig macht:

hansis100 schrieb:

Nun habe ich es geschafft mir ein Droplet zu erstellen, das mir die angegebene Datei verkleinert.

du meinst einen php-Schnipsel, der dann letztendlich in die private Funktion rein soll, oder?
Unter Droplets versteht man nämlich Code-Schnipsel, die bei der Darstellung(!) einer Seite im Frontend ablaufen und dort dynamisch Inhalt erzeugen.

Ja ein droplet, das ich mit [[name des droples]] aufrufen kann.

Offline

#9 18.09.2018 12:06:10

mrbaseman
Developer

Re: Bildverkleinerung beim Upload

... und wo setzt du das Droplet dann ein? Auf der Ergebnisseite vom Formular, um die skalierte Grafik nochmal anzuzeigen, oder wie?

Beschreib nochmal was du eigentlich insgesamt erreichen willst und welche Rolle dabei die eingesetzten Mittel (mpform, Droplet, Tool zum Verkleinern (Javascript-Lösung oder ImageMagick?) im Ablauf spielen. Und vor allem, was soll mit den Bildern passieren, wenn sie hochgeladen sind? Werden die weiter verarbeitet (z.B. von einer Webagentur) oder sollen sie auf der Webseite, auf der sich das Formular befindet veröffentlicht werden? Wenn ja, automatisch und sofort oder erst nachdem ein Redakteur sie manuell platziert?

Ich habe irgendwie immer noch das Gefühl, dass du einen Weg beschreitest, der vielleicht irgendwie machbar ist, aber nicht unbedingt die einfachste Lösung darstellt.

Offline

#10 18.09.2018 13:43:45

hansis100
Mitglied

Re: Bildverkleinerung beim Upload

Hallo!

Nun habe ich es geschafft und bin fertig. Die Fotos werden nun nach dem Upload verkleinert. Hier mein Code.

[== PHP ==]
function private_function_on_success($section_id) {
	if ($section_id == <id>) {
	global $database;
	$query_settings = $database->query("SELECT * FROM ".TP_MPFORM."settings WHERE section_id = '$section_id'");
	if ($query_settings->numRows() > 0) {
		$fetch_settings = $query_settings->fetchRow();
		$upload_files_folder =    $fetch_settings['upload_files_folder'];
		
		if (!isset($upload_files_folder) || ($upload_files_folder === null)) {
			//if empty set directory to standard
			$upload_file_folder_absolute = WB_PATH . MEDIA_DIRECTORY;
		} else {
			$upload_file_folder_absolute = WB_PATH . $upload_files_folder;
		}
	} else {
		echo "[[sendMail?toaddress=<to>&subject=<subject>&message=<message>&returnvalues=false]]";
	}

	//Foto Upload Field
	if (isset($_SESSION['mpf']['datafield1<id>']['site']) ) {
		$foto = strip_tags($_SESSION['mpf']['datafield1<id>']['site']);
		$foto = explode('/', $foto);
		$filename = end($foto);
		$file = $upload_file_folder_absolute  . "/" . $filename;
		//resize Image
		echo "[[resize_image?file=" . $file . "]]";

	}
	return true;
}

Resizse-Funktion funktioniert folgenderweise:

Damit der Zugriff auf das Foto erfolgen kann, darf der Dateiname nicht verändert werden.
Also wird das Originalfoto umbenannt und das verkleinerte Foto mit dem ursprünglichen Dateinamen gespeichert.
Ich möchte das Originalfoto nicht löschen, daher das umbenennen.
Realisiert habe ich das mit ImageMagick

danke für die Hilfe.

Vielleicht kann man in einer nächsten Version das als Funktion in mpform einbauen smile


Hier mein Ablauf:
Ich verwende das mpform zum Hochladen von Berichten. Dazu kann der User auch Fotos angeben.
Diese Fotos möchte ich dann automatisch verkleinern, da ja das Anzeigen sonst zu lange dauert.
1) User füllt das Formular aus und gibt die Fotos an
2) Die Fotos werden nun in der Funktion "function private_function_on_success" verkleinert
    Dies geschiet im Droplet "resize_image"
3) Der hochgeladene Bericht kann nun angezeigt werden.

Das Verkleinern der Fotos habe ich in ein Droplet ausgelagert, da ich das dann von jeder Seite aus benutzen kann.

Vielleicht kann man das alles noch vereinfachen. Bitte einfach rückmelden. Bin jetzt mal froh, daß es funktioniert smile

lg
Hansi

Beitrag geändert von hansis100 (18.09.2018 14:00:09)

Offline

Liked by:

florian

#11 18.09.2018 22:21:23

mrbaseman
Developer

Re: Bildverkleinerung beim Upload

Hallo Hansi,

aus der privaten Funktion heraus ein Droplet zu verwenden um die Verkleinerung der Bilder anzustoßen ist schon ein bisschen von hinten durch die Brust ins Auge.
Wenn du die Funktionalität zum Verkleinern anderswo auch brauchst, würde sich ein Snippet anbieten. Das sind ganz einfache Module, die eine php-Funktion bereitstellen um sie irgendwo verwenden zu können. Um sie aus einer WYSIWYG-Section heraus nutzen zu können, braucht es zugegebenermaßen dann wieder ein Droplet, das diese Funktion aufruft. Beim mpform jedoch, kannst du die Funktion aus dem Snippet direkt aufrufen.

Die sql-Abfrage aus der privaten Funktion heraus würde ich auch nicht unbedingt einsetzen. Klar kann man das tun - der Pfad ist aber ja schon in (isset($_SESSION['mpf']['datafield1<id>']['site']) enthalten.

Das Umbenennen der hochgeladenen Dateien hat den Hintergrund, dass ein potentieller Angreifer nicht direkt auf die hochgeladene Datei zugreifen kann. Bei Bildern ist das vielleicht nicht so wichtig. Wenn man sie an ImageMagick zur Bearbeitung übergibt, ist es eher wichtig, dass das Programmpaket mit Sicherheitsupdates versorgt wird.

Um den hochgeladenen Bericht anzuzeigen, kopiert ihn ein Redakteur noch in eine WYSIWYG-Section rein, oder? Und die hochgeladenen und skalierten Bilder wandern in ein Galeriemodul, das auf der gleichen Seite untergebracht wird. Oder gibt's da für die Weiterverarbeitung und Veröffentlichung weitere Skripte, die auch noch angestoßen werden?

Die Bilderskalierung ist schon etwas eher spezielles, vor allem dann noch mit den ganzen Randbedingungen, dass das Original erhalten bleiben soll und die eigentliche Funktion über Droplets eingebunden wird. In der Form baue ich das nicht ins Modul ein, aber was ich in einer kommenden mpform-Version realisieren möchte, wäre dass die einzelnen Schritte nach dem Absenden des Formulars und eventuelle private Funktionen flexibler gestaltet werden können. Die Reihenfolge soll flexibler werden und vielleicht auch was man innerhalb der Funktionen ansprechen kann. Wie genau man letzteres technisch am besten realisiert, darüber muss ich mal noch ein wenig grübeln :-)

viele Grüße,
Martin

Offline

#12 19.09.2018 11:13:14

hansis100
Mitglied

Re: Bildverkleinerung beim Upload

Hallo Martin!
Danke für die Rückmeldung.

Der Grund für die Verwendung eines Droplets ist der, dass ich mich in der Entwicklung von Modulen nicht auskenne smile
Das mit der der SQL-Abfrage stimmt. Das habe ich nun in einen zwei-Zeiler umgebaut.

Das Umbenennen der hochgeladenen Dateien hat den Hintergrund, dass ein potentieller Angreifer nicht direkt auf die hochgeladene Datei zugreifen kann. Bei Bildern ist das vielleicht nicht so wichtig. Wenn man sie an ImageMagick zur Bearbeitung übergibt, ist es eher wichtig, dass das Programmpaket mit Sicherheitsupdates versorgt wird.

Das wird vom Webhoster zur Verfügung gestellt. Natürlich kann man das auch mit etwas anderem machen.

Um den hochgeladenen Bericht anzuzeigen, kopiert ihn ein Redakteur noch in eine WYSIWYG-Section rein, oder? Und die hochgeladenen und skalierten Bilder wandern in ein Galeriemodul, das auf der gleichen Seite untergebracht wird. Oder gibt's da für die Weiterverarbeitung und Veröffentlichung weitere Skripte, die auch noch angestoßen werden?

Nein, es werden nur Texte und Bilder hochgeladen. Diese dann in der Tabelle gespeichert. Diese Daten werden dann wiederum von einem Skript abgerufen und für das Anzeigen aufbereitet. Also eigentlich nichts großartigen. Ich verwende nur mpform, da das Eintragen und verarbeiten der Texte so wunderbar funktioniert. Habe es auch schon unter WB in Verwendung gehabt.

Zu guter Letzt noch mal Danke für das Modul. Echt spitze! Meine Lösung ist nicht die beste - ganz klar - aber ich bin ja auch kein Entwickler smile

lg
Hansi

Offline

Fußzeile des Forums

up