Seite 1 von 1

Chain: Skalierung beim Upload von Bildern - Dateiverwaltung

Verfasst: Mo 21. Jul 2014, 21:38
von josh
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) 175-mal heruntergeladen
upload_resize_v2.1.zip
Version: 2.1 - löschen von Dateien im Ordner temp
(1.98 KiB) 218-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

Re: Chain: Skalierung beim Upload von Bildern - Dateiverwalt

Verfasst: So 21. Sep 2014, 08:26
von josh
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

Re: Chain: Skalierung beim Upload von Bildern - Dateiverwalt

Verfasst: Mo 22. Sep 2014, 12:54
von Faar
Danke erstmal!

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

Code: Alles auswählen

chmod($tmp_name, 0755);

Re: Chain: Skalierung beim Upload von Bildern - Dateiverwalt

Verfasst: Mo 22. Sep 2014, 16:30
von josh
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