[TYPO3-UG Freiburg] Bildmanipulation in Fronend Plugin - Combining Images

Heiko Hänsge mailinglisten at wild-wild-web.de
Fri Dec 18 11:06:53 CET 2009


Hallo an insbesondere die Extension-Entwickler,

für die Website der 'Freiburger Freelancer', die jetzt endlich auch mit 
Typo3 läuft, soll in einem Frontend-Plugin eine Liste mit Grafiken 
ausgegeben werden (Benutzer-Bilder). Vor der Ausgabe soll allerdings das 
evtl. im Verzeichnis 'uploads/tx_srfeuserregister/' liegende Bild des 
Benutzers, was jeder selbst hochladen kann, nicht nur einfach skaliert 
werden. Das wäre ja noch einfach. Nein, wir wollen gern noch ein paar 
Effekte wie Maskierung mit einem anderen Bild (damit das Ganze einen 
schönen Rahmen hat) und z.B. eine dezente Sepia-Tönung anwenden. :-D
Abgesehen davon, dass dies Geschmackssache ist, so ist doch zumindest 
die technische Umsetzung eine interessante Herausforderung.

Nun gibt es da zwei Ansätze, meiner Meinung nach.
1. IMAGE-Objekt als TS-Objekt aufbauen und an die Extension übergeben.
2. cObj->IMAGE()-Funktion gleich in der Extension benutzen

zu 1.
TS-Objekt aufbauen:
plugin.tx_myextension_pi1 {
  //
  image = IMAGE
  image {
    file.maxW = 98
    file.maxH = 128
    file.import {
      cObject = TEXT
      cObject.value = uploads/tx_srfeuserregister/noFoto.gif
      cObject.override {
        required = 1
        data = TSFE:fe_user|user|image // funktioniert aber hier wohl nicht?
        # field = image // könnte evtl. eine Alternative sein
        listNum = 0
        wrap = uploads/tx_srfeuserregister/|
      }
    }
  }
}

und in der Extension:
function makeListItem() {
  // TS-Object auslesen
  $imgTSConfig = $this->conf["image."];
  // Marker im Template ersetzen
  $markerArray = Array(
        '###IMAGE###' => $this->cObj->IMAGE($imgTSConfig),
  );
  return($this->cObj->substituteMarkerArrayCached($subpart, $markerArray));
}

Leider wird hierbei 'data = TSFE:fe_user|user|image' nicht durch ein 
evtl. vorhandenes Bild ersetzt. Auch 'field = image' scheint hier nicht 
zu greifen. Grübel...
Für das Maskieren müsste das Objekt dann wohl als IMG_RESSOURCE mit 
GIFBUILDER aufgebaut werden. Im Typo3-Kochbuch Kapitel 13.4 
'Kopfgrafiken nachbauen' steht zumindest mal ein Ansatz... Hat da jemand 
Erfahrung?

zu2.
cObj->IMAGE()-Funktion:

function makeListItem() {
    // Bild aus DB, sonst Ersatzbild
    if (empty($this->internal['currentRow']['image'])) {
      $image = 'noFoto.gif';
    }else{
      $image = $this->internal['currentRow']['image'];
    }
    // Bild-Pfad komplettieren
    $imgTSConfig['file'] = 'uploads/tx_srfeuserregister/' . $image;
    // Bild zurechtstutzen
    #$imgTSConfig['file.']['width'] = 98;
    $imgTSConfig['file.']['maxW'] = 98;
    $imgTSConfig['file.']['maxH'] = 128;
    // Bild-Attribute setzen
    $imgTSConfig['stdWrap.']['addParams.']['alt'] ='Portraet ' . 
$this->internal['currentRow']['last_name'];
    $imgTSConfig['stdWrap.']['addParams.']['title'] ='Portraet ' . 
$this->internal['currentRow']['last_name'];
 // Bild-Combining???

  // Marker im Template ersetzen
  $markerArray = Array(
        '###IMAGE###' => $this->cObj->IMAGE($imgTSConfig),
  );
  return($this->cObj->substituteMarkerArrayCached($subpart, $markerArray));
}

Die Ausgabe eines Benutzer-Bildes gelingt mir hiermit. Aber wie mach ich 
hier jetzt das Bild-Combining mit einer Maske inkl. Bild-Effekte? Dazu 
hat mir Google nicht sehr viel zu sagen gehabt.
Na, das ist doch mal wieder eine tolle Nuss zum Knacken... ;-)

Viele Grüße
Heiko


More information about the TYPO3-UG-Freiburg mailing list