Ergebnis 1 bis 5 von 5

Thema: Dateiformat in ImageFactory definieren

  1. #1
    Contao-Nutzer Avatar von chatjack
    Registriert seit
    02.09.2012.
    Ort
    Essen
    Beiträge
    188

    Standard Dateiformat in ImageFactory definieren

    Moin,

    wie definiert man in der ImageFactory das gewünschte Bildformat?

    In der Dokumentation ist beschrieben, wie man beliebige Bildmaße definiert. Es hat jedoch den Anschein, dass das Ausgangsformat immer das Eingangsformat ist.
    https://docs.contao.org/5.x/dev/fram...cture-factory/

    Ich habe zwar die Möglichkeit, einen eigenen Dateinamen zu wählen.

    PHP-Code:
    $image $this->imageFactory->create(
        
    '/path/to/image.webp',
        [
    100100ResizeConfiguration::MODE_CROP],
        new 
    ResizeOptions()->setTargetPath('/path/to/target/image.jpg'),
    ); 
    Offenbar speichert Contao jedoch weiterhin ein webp mit der Dateiendung jpg, was zu Problemen führen kann, wenn der User eigene Bilder hoch lädt.

    Hintergrund ist, dass ich für OpenGraph in News-Beiträgen eine JPG-Version der Bilder erzeugen möchte, da XING offenbar Probleme beim Verarbeiten von WEBP-Dateien hat.

    Dazu wollte ich mir gerne den Pfad über $this->singleSRC ziehen und über die ImageFactory in ein JPEG umwandeln.

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

    Standard

    PHP-Code:
    $image $this->imageFactory->create(
        
    '/path/to/image.webp',
        [
    100100ResizeConfiguration::MODE_CROP],
        (new 
    ResizeOptions())
            ->
    setTargetPath('/path/to/target/image.jpg')
            ->
    setImagineOptions(['format' => 'jpeg'])
    ); 
    (ungetestet)
    » sponsor me via GitHub or Revolut

  3. #3
    Contao-Nutzer Avatar von chatjack
    Registriert seit
    02.09.2012.
    Ort
    Essen
    Beiträge
    188

    Standard

    Hallo Spooky,

    vielen Dank für den Tipp. Leider speichert Contao in diesem Falle nur das bestehende WEBP mit dem neuen Dateinamen ab.

    Hier findet weder eine Skalierung noch eine Neukodierung statt.

    Der einzige Weg, der bisher funktioniert hat, ist der Umweg über die Picture Factory. Sofern es nicht über die ImageFactory funktioniert, kann ich mit der PictureFactory-Lösung gut leben.

    Code:
    # config/config.yaml
    
    contao:
      image:
        sizes:
          social_sharing:
            width: 640
            height: 400
            resize_mode: crop
            formats:
              webp: ['jpg']
              png: ['jpg']
              heic: ['jpg']
              avif: ['jpg']
              gif: ['jpg']
    PHP-Code:
    // templates/news_detail.html5

    $objFile FilesModel::findByPath($this->singleSRC);

    if (
    $objFile !== null) {
        
    $pictureFactory System::getContainer()->get('contao.image.picture_factory');
        
    $picture $pictureFactory->create($objFile->getAbsolutePath(), '_social_sharing');
        
        
    $src $picture->getRawImg()['src'];
        
    $rootDir System::getContainer()->getParameter('kernel.project_dir');
        
    $prefix Environment::get('url') . '/'

        
    $absoluteImageUrl $src->getUrl($rootDir$prefix);

    Geändert von chatjack (Gestern um 19:03 Uhr)

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

    Standard

    Zitat Zitat von chatjack Beitrag anzeigen
    Leider speichert Contao in diesem Falle nur das bestehende WEBP mit dem neuen Dateinamen ab.
    Doch, es funktioniert schon - du musst allerdings eine ResizeConfiguration Instanz für den $size Parameter übergeben, anstatt ein Array. Wenn es nur ein Array ist, werden die imagineOptions nämlich ignoriert (bzw. überschrieben). Also bspw.:
    PHP-Code:
    $this->imageFactory->create(
        
    Path::join($this->projectDir'files/test.webp'),
        (new 
    ResizeConfiguration())
            ->
    setWidth(100)
            ->
    setHeight(100)
            ->
    setMode(ResizeConfiguration::MODE_CROP),
        (new 
    ResizeOptions())
            ->
    setTargetPath(Path::join($this->projectDir'files/test.jpg'))
            ->
    setImagineOptions(['format' => 'jpeg']),
    ); 
    Geändert von Spooky (Gestern um 19:34 Uhr)
    » sponsor me via GitHub or Revolut

  5. #5
    Contao-Nutzer Avatar von chatjack
    Registriert seit
    02.09.2012.
    Ort
    Essen
    Beiträge
    188

    Standard

    Yipee!!!

    Mit der ResizeConfiguration Instanz hat es funktioniert.

    PHP-Code:
    // templates/news_detail.html5

    use Contao\Environment;
    use 
    Contao\FilesModel;
    use 
    Contao\Image\ResizeConfiguration;
    use 
    Contao\Image\ResizeOptions;
    use 
    Contao\System;
    use 
    Imagine\Image\Format;

    $objFile FilesModel::findByPath($this->singleSRC);

    if (
    $objFile !== null) {
      
    // Generate JPEG file from single source
      
    $objImage System::getContainer()->get('contao.image.factory')->create(
        
    $objFile->getAbsolutePath(),
        (new 
    ResizeConfiguration())
          ->
    setWidth(640)
          ->
    setHeight(400)
          ->
    setMode(ResizeConfiguration::MODE_CROP),
        (new 
    ResizeOptions())
          ->
    setImagineOptions(['format' => Format::ID_JPEG]),
      ); 

      
    // Get absolute url
      
    $projectDir System::getContainer()->getParameter('kernel.project_dir');
      
    $prefix Environment::get('url') . '/'
      
    $absoluteImageUrl $objImage->getUrl($projectDir$prefix);

    Hier kann ich den Ausgabenamen sogar weg lassen, sodass Contao die JPEG-Datei jetzt automatisch in assets/images ablegt. Das ist auf jeden Fall die bevorzugte Lösung.

    Vielen Dank!

Aktive Benutzer

Aktive Benutzer

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

Berechtigungen

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