Chain: Skalierung beim Upload von Bildern - Dateiverwaltung

Alles rund um Module und Plugins in CONTENIDO 4.9.
Antworten
josh
Beiträge: 156
Registriert: Do 24. Jun 2004, 09:25
Wohnort: Ahlen
Kontaktdaten:

Chain: Skalierung beim Upload von Bildern - Dateiverwaltung

Beitrag von josh » Mo 21. Jul 2014, 21:38

Hallo,

oft werden von unseren Kunden viel zu große Bilder hochgeladen.
Nach dem inastllieren der untenstehenden Erweiterung (Chain) werden die Bilder beim Hochladen auf eine festgelegte Größe scalliert.

Verwendete Chain: Contenido.Upload.UploadPreprocess
Automatische Bildskalierung beim Upload von Bildern in der Dateiverwaltung
Version 2.0 : fuer contenido 4.9.x

Vorausschicken möchte ich da es sich um eine für Contenido 4.9 überarbeitete Version handelt.

Historie:
@version 1.0 fuer Contenido 4.4.x
@author Stefan Welpot
28.12.2005
Original von hier
http://contenido.org/forum/viewtopic.php?t=6540
@version 1.0.1
Patch von HerrB - nur Bilddateien resizen - ist eingearbeitet

geändert: 1. Dez 2007
Version fuer Contenido 4.6
wosch
http://forum.contenido.org/viewtopic.ph ... ze#p157480

ueberarbeitet 19.07.2014
Version: 2.0 fuer Contenido 4.9.x
josh: info@webdesign-ahlen.de

Installation:

1.
Ordner upload_resize in /contenido/includes/chains kopieren
(zip-Datei unten))

2.
Ordner /contenido/data/temp/ anlegen (schreibrechte)

3.
Einbinden der Chain in die Datei /data/condig/production/config.chains.load.php".

Diese Zeilen einfügen:
cInclude('includes', 'chains/upload_resize/config.chain.php');
$_cecRegistry->addChainFunction("Contenido.Upload.UploadPreprocess", "cecUploadUploadPreprocess");

Konfiguration:
Mandanteneinstellungen: default Werte werden dort beim ersten Upload
automatisch eingetragen und können dann dort konfiguriert werden

Typ: : upload
Name : automaticImageScaleWidth
Wert : 900

Typ: : upload
Name : automaticImageScaleHeight
Wert : 900

Fuer einzelne Benutzer kann upload_resize ausgeschaltet werden.
Benutzerdefinierte Eigenschaften beim Benutzer:

Bereich / Typ : upload
Eigenschaft : resize
Wert : false
upload_resize.zip
Hier der untenstehende Code (utf8) als zip-Datei:
(1.9 KiB) 133-mal heruntergeladen
upload_resize_v2.1.zip
Version: 2.1 - löschen von Dateien im Ordner temp
(1.98 KiB) 162-mal heruntergeladen

Code: Alles auswählen

<?php
    /**
	* chain: Contenido.Upload.UploadPreprocess
    * Automatische Bildskalierung beim Upload von Bildern in der Dateiverwaltung
	* Version 2.0 	: 		fuer contenido 4.9.x 
	* --------------------------------------------------------------------------------------------------
	* Installation: 
	* Ordner upload_resize in /contenido/includes/chains kopieren
	* Ordner /contenido/data/temp/ anlegen (schreibrechte)
	* 
    * Einbinden der Chain in die Datei /data/condig/production/config.chains.load.php":
    * cInclude('includes', 'chains/upload_resize/config.chain.php');
    * $_cecRegistry->addChainFunction("Contenido.Upload.UploadPreprocess", "cecUploadUploadPreprocess");	
	* --------------------------------------------------------------------------------------------------
	* Konfiguration:
	*
    * Mandanteneinstellungen: default Werte werden dort beim ersten Upload
	* automatisch eingetragen und können dort konfiguriert werden 
	*
    * Typ: 			:		upload
	* Name			:		automaticImageScaleWidth
	* Wert			: 		900
	*
    * Typ: 			:		upload
	* Name			:		automaticImageScaleHeight
	* Wert			: 		900
	*
    * Fuer einzelne Benutzer upload_resize ausschalten:
	* Benutzerdefinierte Eigenschaften beim Benutzer: 	
	*
	* Bereich / Typ	:		upload
 	* Eigenschaft	: 		resize
	* Wert			:		false
	* --------------------------------------------------------------------------------------------------
	* Historie:
    *
    * @version 1.0 fuer Contenido 4.4.x 
    * @author Stefan Welpot
    * 28.12.2005
    * Original von hier
    * http://contenido.org/forum/viewtopic.php?t=6540
    * @version 1.0.1
    * Patch von HerrB - nur Bilddateien resizen - ist eingearbeitet
    *
	* geändert:  1. Dez 2007
	* Version fuer Contenido
	* wosch 
	* http://forum.contenido.org/viewtopic.php?f=51&t=18925&p=157480&hilit=resize#p157480
	*
	* ueberarbeitet 19.07.2014
	* Version: 2.0 fuer Contenido 4.9.x
	* josh - info@webdesign-ahlen.de
	*
	*/	

if(!defined('CON_FRAMEWORK')) {
    die('Illegal call');
}

function cecUploadUploadPreprocess ($tmp_name, $path)
{
	global $cfgClient, $client; 
	
	//Fuer einzelne Benutzer upload_resize ausschalten
	$user_resize = getEffectiveSetting("upload","resize"); 
	if ($user_resize == "false") {	
		return $tmp_name;
	}	
	
    $defaultBildbreite = 900;
    $defaultBildhoehe = 900;	
    $newFilename= "";
	 
	$aCustSettings = getEffectiveSettingsByType("upload");
	foreach ($aCustSettings as $sKey => $sValue) {
		if ($sKey == 'automaticImageScaleWidth') {
			$maxBildbreite = $sValue;
		}
		if ($sKey == 'automaticImageScaleHeight') {
			$maxBildhoehe = $sValue; 
		}	  
	}

	//Eintragen der default hoehe/brete in die Mandanteneinstellungen
	$cApiClient = new cApiClient($client);
	
   if(!is_numeric($maxBildbreite)) {
	 $cApiClient->setProperty("upload", "automaticImageScaleWidth", $defaultBildbreite);
	 $maxBildbreite = $defaultBildbreite;	 
   }
   if(!is_numeric($maxBildhoehe)) {
	 $cApiClient->setProperty("upload", "automaticImageScaleHeight", $defaultBildhoehe);
	 $maxBildhoehe = $defaultBildhoehe;	 
   }

    // nur Bilddateien mit resize bearbeiten, keine anderen Dateien - Patch HerrB
    $filetype = strtolower(substr($tmp_name, strlen($tmp_name) -4, 4));
	
	if ( strcmp(".gif", $filetype) == 0 ||
		strcmp(".png", $filetype) == 0 ||
		strcmp(".jpg", $filetype) == 0 ||
		strcmp("jpeg", $filetype) == 0
	  )
	{   
       // Pruefen ob das Bild groesser in Breite und Hoehe ist als $maxBildbreite bzw. $maxBildhoehe
       // Bildeimensionen ermitteln
		$src_image_size = getimagesize($tmp_name);   
		if (($src_image_size[0] > $maxBildbreite) || ($src_image_size[1] > $maxBildhoehe)) 
		{
		   $newFilename = capiImgScale($tmp_name, $maxBildbreite, $maxBildhoehe, false, false, 1, true);
		   $newFilename = str_replace($cfgClient[$client]["path"]["htmlpath"], $cfgClient[$client]["path"]["frontend"], $newFilename);       
		} else {
		// Bild ist kleiner als unsere Standardwerte deswegen keine Aenderungen
		$newFilename = $tmp_name;
		}   
	} else {
		// nur jpg, gif, png, jpeg mit resize bearbeiten, keine anderen Dateien			
		$newFilename = $tmp_name;
	}

    return $newFilename;
}
?>

Viel Spaß

josh
Zuletzt geändert von josh am So 21. Sep 2014, 08:48, insgesamt 2-mal geändert.

josh
Beiträge: 156
Registriert: Do 24. Jun 2004, 09:25
Wohnort: Ahlen
Kontaktdaten:

Re: Chain: Skalierung beim Upload von Bildern - Dateiverwalt

Beitrag von josh » So 21. Sep 2014, 08:26

Hallo,

ein kleiner Nachtrag:
Leider werden die große Dateien im Ordner /contenido/data/temp/ nicht gelöscht.
Dafür müssen noch 2 Code-Zeilen eingefügt werden

Einfügen nach Zeile 111:
$newFilename = str_replace($cfgClient[$client]["path"]["htmlpath"], $cfgClient[$client]["path"]["frontend"], $newFilename);

Code: Alles auswählen

	   //Datei: Rechte 777 setzen und loeschen
		   chmod($tmp_name);
		   unlink($tmp_name);


Die geänderte Chain Version 2.1 steht oben zum Download bereit.

josh

Faar
Beiträge: 1915
Registriert: Sa 8. Sep 2007, 16:23
Wohnort: Brandenburg
Kontaktdaten:

Re: Chain: Skalierung beim Upload von Bildern - Dateiverwalt

Beitrag von Faar » Mo 22. Sep 2014, 12:54

Danke erstmal!

Aber müsste es bei chmod() nicht so heißen?

Code: Alles auswählen

chmod($tmp_name, 0755);
Fliegt der Bauer übers Dach, ist der Wind weißgott nicht schwach.

josh
Beiträge: 156
Registriert: Do 24. Jun 2004, 09:25
Wohnort: Ahlen
Kontaktdaten:

Re: Chain: Skalierung beim Upload von Bildern - Dateiverwalt

Beitrag von josh » Mo 22. Sep 2014, 16:30

Hallo Faar,
chmod($tmp_name, 0755);
Du hast recht.

777 dürfte aber kein Problem sein, da die Datei wird sofort wieder gelöscht wird.

Gruß

Josh

Antworten