Neuigkeiten
  • Die modified eCommerce Shopsoftware ist kostenlos, aber nicht umsonst.
    Spenden
  • Damit wir die modified eCommerce Shopsoftware auch zukünftig kostenlos anbieten können:
    Spenden
  • Thema: BETA MODUL: Bildverarbeitung mit ImageMagick für Shopversion 2.x

    blade

    • Mitglied
    • Beiträge: 164
    Hi,

    ich möchte mit euch diese Erweiterung teilen, ohne Gewähr und Support und hoffe, dass der eine oder andere damit schönere Bilder erstellen kann als mit dem Standard Modul :)

    - Es wird die PHP Erweiterung Imagick benötigt
    - Getestet mit PHP 7

    Vorteile:
    • Schärfere Bilder, da mit dem Lanczos Filter gearbeitet wird
    • Bei JPGs die im Farbraum CMYK hochgeladen werden, werden die Farben nach der Verarbeitung korrekt dargestellt
    • Es wird nur JPG untersützt, kann jedoch für weitere Formate leicht angepasst werden
    • Etwas kleinere Bilder
    • Weniger PHP Code

    [EDIT Tomcraft 04.06.2018: Modul aktualisiert, Danke an Modulfux.]
    [EDIT Tomcraft 05.06.2018: Modul aktualisiert, Danke an Modulfux.]

    Linkback: https://www.modified-shop.org/forum/index.php?topic=39113.0

    hpzeller

    • Experte
    • Beiträge: 4.130
    • Geschlecht:
    Also ich finde die angebotene Erweiterung als sehr rudimentär, sie kann aber allenfalls als Denkanstoss für eine Alternative zur GD Library dienen.

    Warnung:
    Das folgendes im Imagick.zip enthaltene DB Update Statement darf man auf keinen Fall ausführen, denn es ist überhaupt nicht sicher, dass die configuration_id = 96 zum configuration_key = IMAGE_MANIPULATOR gehört,

    Code: SQL  [Auswählen]
    UPDATE `configuration` SET `configuration_value` = 'image_manipulator_imagick.php', `set_function` = 'xtc_cfg_select_option(array(\'image_manipulator_imagick.php\', \'image_manipulator_GD2.php\', \'image_manipulator_GD1.php\'),' WHERE `configuration`.`configuration_id` = 96;

    stattdessen muss man folgendes Update Statement ausführen.

    Code: SQL  [Auswählen]
    UPDATE `configuration` SET `configuration_value` = 'image_manipulator_imagick.php', `set_function` = 'xtc_cfg_select_option(array(\'image_manipulator_GD2.php\', \'image_manipulator_GD2_advanced.php\', \'image_manipulator_GD1.php\', \'image_manipulator_imagick.php\'),' WHERE `configuration`.`configuration_key` = 'IMAGE_MANIPULATOR';

    Gruss
    Hanspeter

    blade

    • Mitglied
    • Beiträge: 164
    Hallo Hanspeter,

    ich habe diese Erweiterung, die im übrigen deutlich bessere Bilder erzeugt als die GD Bibliothek nicht umsonst in die Bastelecke hochgeladen.

    Gruß

    hpzeller

    • Experte
    • Beiträge: 4.130
    • Geschlecht:
    Hallo blade,

    sorry, da ich den Thread aus der Übersicht heraus geöffnet habe, hatte ich übersehen das Du ihn in die Bastelecke gestellt hast.

    Gruss
    Hanspeter

    Modulfux

    • Experte
    • Beiträge: 3.590
    • Geschlecht:
    Ich habe die Erweiterung und die Grundidee von Blade zu einem Systemmodul umgebaut mit folgenden Verbesserungen:

    - Prüfung ob ImageMagick als Erweiterung auf dem Server vorhanden und aktiviert ist
    - Hinzufügen und Entfernen der neuen Manipulationsklasse in der DB ohne die vorherigen Werte zu überschreiben
    - Bilder werden nun auch skaliert

    Viel Spaß beim Ausprobieren.

    [EDIT Tomcraft 04.06.2018: Modul in Beitrag 1 aktualisiert.]

    blade

    • Mitglied
    • Beiträge: 164
    Hi,

    PNG ist ein verlustfreies Format, unterstützt jedoch soweit mir bekannt ist die verlustbehaftete Kompressionsmethode von JPG auch, was in deinem Code nun hardcoded ist. Eine Einstellung wäre dafür sinnvoll.

    Bezüglich der Skalierung, die Bilder wurden auch im Beispielcode skaliert, jedoch ist der Filter für die downscaling optimiert gewählt, was ja meistens der Fall ist.

    Für GIF sollte die Methode "imagick::COMPRESSION_LZW" genutzt werden und für PNG braucht man dies nicht anzugeben.

    Dieser Code sollte nur bei JPG oder JPG Format-Umwandlung greifen.
    Code: PHP  [Auswählen]
     $img->setImageBackgroundColor('#FFFFFF');
        $img = $img->mergeImageLayers(Imagick::LAYERMETHOD_FLATTEN);
        $img->setSamplingFactors(['2x2',
          '1x1',
          '1x1']);
        $img->setInterlaceScheme(Imagick::INTERLACE_PLANE);
        $img->setImageCompression(Imagick::COMPRESSION_JPEG);

    Es ist empfehlenswert, die Methoden der Imagick Bibliothek von PHP zu nutzen.
    http://php.net/manual/de/imagick.getimageformat.php

    Modulfux

    • Experte
    • Beiträge: 3.590
    • Geschlecht:
    Zitat
    PNG ist ein verlustfreies Format, unterstützt jedoch soweit mir bekannt ist die verlustbehaftete Kompressionsmethode von JPG auch, was in deinem Code nun hardcoded ist.

    Was ist bei mir hartcoded?

    blade

    • Mitglied
    • Beiträge: 164
    Diese Zeile:
    Code: PHP  [Auswählen]
    $img->setImageCompression(Imagick::COMPRESSION_JPEG);

    blade

    • Mitglied
    • Beiträge: 164
    Die drei Dateiformate, vor allem PNG mit und ohne Alpha Kanal würde ich nochmal mit dem neuen Code testen. Ich nutze selbst lediglich den Beispiel Code, sonst hätte ich mit euch alles geteilt.

    Modulfux

    • Experte
    • Beiträge: 3.590
    • Geschlecht:
    Du hast doch das Format auf JPG hardcoded, zumindest in deinem Beispiel.

    Ich schreibe die Klasse gerade auf die ImageMagick Methoden um.

    blade

    • Mitglied
    • Beiträge: 164
    Das ist richtig, weil ich nur JPG nutze :)

    p3e

    • Experte
    • Beiträge: 2.395
    Bei Fotos bietet sich auch JPG an, da die Datei dadurch deutlich schrumpft, bei einer Qualität von 70-80 aber kaum ein Unterschied zum Original auszumachen ist.
    Nur wenn transparenter Hintergrund unverzichtbar ist oder es keine Fotos sondern eher plakative Grafiken sind, ist PNG vorteilhaft.

    blade

    • Mitglied
    • Beiträge: 164
    Ich muss mich korrigieren, Skalierung findet im Beispielcode nicht statt.
    Mit diesen Methoden kann man die Skalierung einfach hinzufügen.

    http://php.net/manual/de/imagick.getimagegeometry.php
    http://php.net/manual/de/imagick.scaleimage.php

    blade

    • Mitglied
    • Beiträge: 164
    Bei Fotos bietet sich auch JPG an, da die Datei dadurch deutlich schrumpft, bei einer Qualität von 70-80 aber kaum ein Unterschied zum Original auszumachen ist.
    Nur wenn transparenter Hintergrund unverzichtbar ist oder es keine Fotos sondern eher plakative Grafiken sind, ist PNG vorteilhaft.

    Das ist korrekt, JPG bietet eine ausreichende Qualität bei guter Kompression, sollte für die meisten Projekten völlig genügen. PNG kann bei hohen Auflösungen und feinen Details verwendet werden.

    p3e

    • Experte
    • Beiträge: 2.395
    Und bei großen gleichfarbigen Flächen z.b. plakative Schilder. Bei solchen Dateien versagt jpg völlig und PNG kann diese besonders gut komprimieren.
    rechtstexte für onlineshop
    4 Antworten
    3582 Aufrufe
    20. Januar 2020, 14:31:28 von CHESSBASE
    167 Antworten
    62244 Aufrufe
    31. März 2016, 08:28:43 von derluke
    9 Antworten
    3109 Aufrufe
    04. Januar 2019, 17:14:15 von Shorty
    106 Antworten
    52028 Aufrufe
    06. März 2021, 19:27:04 von awids