Ergebnis 1 bis 6 von 6

Thema: Thumbnail mit wichtigem Teil erstellen

  1. #1
    Contao-Urgestein Avatar von Samson1964
    Registriert seit
    05.11.2012.
    Ort
    Berlin
    Beiträge
    2.794

    Frage Thumbnail mit wichtigem Teil erstellen

    In einer eigenen 3er Erweiterung in C4 erstelle ich Thumbnails wie folgt:
    PHP-Code:
    $objFile = \FilesModel::findByPk($objItems->singleSRC);
    $thumbnail = \Image::get($objFile->path300100'crop'); 
    "crop" scheint der richtige Parameter für den wichtigen Teil zu sein. Nur bin ich leider noch nicht ganz zufrieden mit der "Wichtigkeit" des von Contao gewählten Ausschnittes. Nun gibt es ja in den Bildeinstellungen eines Themes einen sogenannten Zoomfaktor, wo Werte von 0 (wichtigen Teil ignorieren) bis 100 (zu 100% auf wichtigen Teil fokussieren) möglich sind. Dahinter steckt wohl die Funktion setZoomLevel der Image-Klasse. Nur leider gibt es nicht die Möglichkeit den Zoomfaktor Image::get als Parameter mitzugeben.

    Beim Suchen im Core fand ich das:
    PHP-Code:
    $thumbnail .= ' ' . \Image::getHtml(\System::getContainer()->get('contao.image.image_factory')->create(TL_ROOT '/' rawurldecode($currentEncoded), (new ResizeConfiguration())->setWidth(320)->setHeight(40)->setMode(ResizeConfiguration::MODE_BOX)->setZoomLevel(100))->getUrl(TL_ROOT), '''style="margin:0 0 2px 0;vertical-align:bottom"'); 
    Datei: vendor/contao/core-bundle/src/Resources/contao/widgets/FileSelector.php

    Diese Zeile zu verstehen übersteigt mein Wissen als Hobbyprogrammierer.
    Die Funktion getHtml bekommt wohl folgende vier Parameter:
    1. \System::getContainer()->get('contao.image.image_factory')->create(TL_ROOT . '/' . rawurldecode($currentEncoded)
    2. (new ResizeConfiguration())->setWidth(320)->setHeight(40)->setMode(ResizeConfiguration::MODE_BOX)->setZoomLevel(100))->getUrl(TL_ROOT)
    3. ''
    4. 'style="margin:0 0 2px 0;vertical-align:bottom"'

    Mit den ersten beiden Parametern kann ich nicht viel anfangen. Ich denke Parameter 1 liefert den Pfad zum Originalbild. Meine Lösung
    PHP-Code:
    \System::getContainer()->get('contao.image.image_factory')->create(TL_ROOT.'/'$objFile->path 
    führt zu der Fehlermeldung das das Image '' (also nichts) nicht gefunden wird.

    Beim zweiten Parameter bekam ich eine Fehlermeldung, die Klasse ResizeConfiguration würde nicht gefunden werden. Es stand aber gleich ein Tip von app_dev.php dabei und nach Ergänzen von
    PHP-Code:
    use Contao\Image\ResizeConfiguration
    in meiner Klasse war dieses Problem behoben.

    Zusammenfassend möchte ich wissen, wie ich ein Thumbnail mit einem von mir festgelegten Zoomlevel erstellen kann.
    Viele Grüße
    Frank

    Seit Mai 2013 Fan von Contao
    Webmaster vom Deutschen Schachbund und Berliner Schachverband
    Mein Blog: Schachbulle
    Meine Erweiterungen bei GitHub
    Meine Videos auf YouTube: Playlist zur Contao-Programmierung/Einrichtung

  2. #2
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.063
    Partner-ID
    10107

  3. #3
    Contao-Urgestein Avatar von Samson1964
    Registriert seit
    05.11.2012.
    Ort
    Berlin
    Beiträge
    2.794

    Standard

    Ich habe meine alte Syntax mal abgeändert:
    PHP-Code:
    $thumbnail = \Image::get($objFile->path300100'crop')->setZoomLevel(100); 
    Das mit den weiteren Funktionen hinten dran, kenne ich noch nicht gut. Ich dachte das wäre ein Feature der Database-Klasse.
    Aber mit dem Code laufe ich in einen Fehler:
    Call to a member function setZoomLevel() on string
    Also habe ich mal das Beispiel von Leo genommen:
    PHP-Code:
    $container = \System::getContainer();
    $rootDir $container->getParameter('kernel.project_dir');

    $thumbnail $container
        
    ->get('contao.image.image_factory')
        ->
    create(
            
    $rootDir.'/'.$objFile->path,
            (new 
    ResizeConfiguration())
                ->
    setWidth(300)
                ->
    setHeight(100)
                ->
    setMode(ResizeConfiguration::MODE_BOX)
                ->
    setZoomLevel(100)
        )
        ->
    getUrl($rootDir)

    Das ist schon wieder soviel Code, das rechtfertigt schon wieder eine eigene Funktion.
    Aber vendor\contao\core-bundle\src\Image\ImageFactory.php (line 102) meldet:
    InvalidArgumentException
    HTTP 500 Internal Server Error
    Image type "" was not allowed to be processed
    Das kannte ich schon von meinen Versuchen davor.

    PHP-Code:
    $rootDir.'/'.$objFile->path 
    paßt. Aber es kann natürlich sein, das dieses Containerding etwas ganz anderes als den Pfad zum Bild erwartet.
    Viele Grüße
    Frank

    Seit Mai 2013 Fan von Contao
    Webmaster vom Deutschen Schachbund und Berliner Schachverband
    Mein Blog: Schachbulle
    Meine Erweiterungen bei GitHub
    Meine Videos auf YouTube: Playlist zur Contao-Programmierung/Einrichtung

  4. #4
    Contao-Nutzer
    Registriert seit
    24.08.2018.
    Ort
    Magdeburg
    Beiträge
    131

    Standard

    Ich hab das bei mir gerade eben eingesetzt und es läuft.
    Da ich das im Template mache, habe ich noch use Contao\Image\ResizeConfiguration; oben angefügt. Klappt alles.
    Hast du einmal die Meta vom Bild geprüft? Teilweise habe ich schön des öfteren defekte Dateien gehabt, die dann unerwartete Probleme machten.
    Geändert von WorkerBeeEu (24.07.2019 um 13:16 Uhr) Grund: Problem verkannt, habs nachgebaut

  5. #5
    Contao-Nutzer
    Registriert seit
    16.08.2012.
    Beiträge
    41

    Standard

    Hi Leute,

    was genau ist den der Unterschied zwischen "get" und "create"?

    Image::get()
    PHP-Code:
    $image $container
        
    ->get('contao.image.image_factory')
        ->
    create($rootDir.'/'.$objSubfiles->path, [8060'crop'])
        ->
    getUrl($rootDir)

    Image::create()

    PHP-Code:
    $image $container
        
    ->get('contao.image.image_factory')
        ->
    create(
            
    $rootDir.'/'.$path,
            (new 
    ResizeConfiguration())
                ->
    setWidth(80)
                ->
    setHeight(60)
                ->
    setMode(ResizeConfiguration::MODE_CROP)
        )
        ->
    getUrl($rootDir)

    Vielen Dank und schönen Tag noch.

    ciao, Stefan

  6. #6
    Contao-Nutzer
    Registriert seit
    16.08.2012.
    Beiträge
    41

    Standard

    Gar keiner, Du Knallcharge :-)

    Das Beispiel zeigt doch nur, dass die Methoden "get" und "create" aufgelöst werden und dafür der Service benutzt wird.

    Vielen Dank und schönen Tag noch.
    Gern geschehen und Dito.

    ciao, Stefan

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Lesezeichen

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •