Uploadereignis abhängig von der Bildgröße nutzen

09. Jan 2017

Über Verzeichnisereignisse können beim Hochladen von Dateien z.B. Aktionen zum Verkleinern von Bilddateien für geringere Ladezeiten genutzt werden.

1) Standardumsetzung über Events und Projektkonfiguration

Die BASE wird standardmässig so ausgeliefert, dass über das Assets-Bildverzeichnis (z.B. /wAssets/img) ein Verzeichnisereignis für das Hochladen von Bildern genutzt wird. Die Aktion greift auf die Einstellung "Bildgröße beim Hochladen wenn nötig herunterrechnen" zurück, um ein Bild beim Hochladen auf die vordefinierte Breite herunterzurechnen (z.B. 1920 oder 1280 Pixel).

Das Herunterrechnen des Bildes findet dabei nur dann statt, wenn das Bild die angegebene Breite überschreitet.

Ab Weblication® CMS Version 9.x verwendet die Software einen neuen Datei-Uploader (siehe weiterführende Informationen unten), welcher Bilder schon vor dem Hochladen lokal verkleinert. Sollten Bilder in höherer Auflösung (z.B. 4000 Pixel Breite) in einem Verzeichnis benötigt werden, als allgemein in der Projektkonfiguration angegeben (z.B. 1920 px Breite), so können Sie das lokale Herunterrechnen über die Verzeichniseinstellungen (Register "Hochladen") auch deaktivieren. (siehe auch 1.a)

onAfterUpload Ereignis mit Snippet für Bildgrösse anpassen

// WICHTIG:
// Die PHP-Tags sind nur in diesem Quelltext-Beispiel gesetzt und
// und dürfen im Ereignisfenster nicht gesetzt werden (siehe Screen)

// Beispiel: Auszug aus dem Verzeichnisereignis onAfterUpload von /wAssets/img
$widthResizeOnUpload wVariables::getValue('resize_pictures_after_upload'wProject::getPathGlobal($eventData['projectPath']));

if(
$widthResizeOnUpload != ''){
  if(
preg_match("/gif|jpg|jpeg|png/i"wPathName::getFileExtension($eventData['filePath']))){
    if(
wImage::getWidth($eventData['filePath']) > $widthResizeOnUpload){
      
wImage::resize($eventData['filePath'], $eventData['filePath'], $widthResizeOnUpload '''default', array('quality' => 100));
    }
  }
}
onAfterUpload Ereignis mit Snippet für Bildgrösse anpassenzoom
onAfterUpload Ereignis mit Snippet für Bildgrösse anpassen
 

1.a Originalbilder in einem Unterverzeichnis behalten (z.B. Pressebilder)

Wollen Sie generell Bilder beim Hochladen herunterrechnen, aber in einem bestimmten Unterverzeichnis (z.B. /wAssets/img/pressebilder-original) die Bilder im Original ablegen, berücksichtigen Sie das wie folgt:

  1. Deaktivieren Sie ab CMS 9.x in den Verzeichniseinstellungen (Hochladen) das lokale Herunterrechnen ("Bilder lokal verkleinern, falls möglich").
  2. Erweitern Sie das onAfterUpload-Ereignis im /wAssets/img Verzeichnis mit einer Abfrage, um bei diesem bestimmten Verzeichnis ein Herunterrechnen nicht vorzunehmen.

onAfterUpload Ereignis mit Snippet für Bildgrösse anpassen (Pressebilder-Verzeichnis ausgenommen)

// WICHTIG:
// Die PHP-Tags sind nur in diesem Quelltext-Beispiel gesetzt und
// und dürfen im Ereignisfenster nicht gesetzt werden (siehe Screen)

// Beispiel: Auszug aus dem Verzeichnisereignis onAfterUpload von /wAssets/img
$widthResizeOnUpload wVariables::getValue('resize_pictures_after_upload'wProject::getPathGlobal($eventData['projectPath']));

if(
$widthResizeOnUpload != ''){
  if(
preg_match("/gif|jpg|jpeg|png/i"wPathName::getFileExtension($eventData['filePath'])) && !preg_match("/\/pressebilder-original\//i"$eventData['filePath'])){
    if(
wImage::getWidth($eventData['filePath']) > $widthResizeOnUpload){
      
wImage::resize($eventData['filePath'], $eventData['filePath'], $widthResizeOnUpload '''default', array('quality' => 100));
    }
  }
}

2) Individuelle Umsetzung unabhängig der Projektkonfiguration und über getimagesize

Der folgende Beispielquelltext bildet eine Aktion innerhalb des Verzeichnisereignisses "onAfterUpload" ab. Beim Hochladen von .gif bzw. .jpg Dateien in das betreffende Verzeichnis wird das Bild auf eine Breite von 500 Pixel angepasst. Hierbei findet zuvor eine Abfrage statt, welche Breite das hochgeladene Bild hat. Sofern dies nicht breiter als 500 Pixel ist, wird das Bild nicht angepasst. Genutzt wird hierfür die PHP-Funktion "getimagesize".

Beispiel: Auszug aus dem Verzeichnisereignis onAfterUpload

<?php

if (strtolower(wPathName::getFileExtension($eventData['filePath'])) == 'gif' || strtolower(wPathName::getFileExtension($eventData['filePath'])) == 'jpg') {
    
  
$eventData['width'] = 500;
    
  
$eventData['image'] = getimagesize($_SERVER['DOCUMENT_ROOT'].$eventData['filePath']);
  
$eventData['imageWidth'] = $eventData['image'][0];
  
$eventData['imageHeight'] = $eventData['image'][1];

  if (
$eventData['imageWidth'] > $eventData['width']) {    
    
wThumbnail::resizeImage($eventData['filePath'], $eventData['width'], '''default');
  }
}

?>

Achten Sie darauf, dass innerhalb des Verzeichnisereignisses (im Gegensatz zu o.g. Quelltextbeispiel) KEINE PHP-Tags gesetzt werden, sondern lediglich der Inhalt des PHP-Scripts!

Ähnliche Seiten

Entwicklerbereich Weblication® CMS - © Scholl Communications AG