ampersand83
I'm new here

Bildauflösungen automatisch zuschneiden

Hallo,

ich versuche mit Hilfe eines Skripts automatisiert für jede Auflösung einen passenden Bildauschnitt zu ermitteln.

Ich beziehe mich hierbei auf den Post https://community.e-spirit.com/message/9197#9197.

Es geht darum, dass wir eine große Menge fester Auflösungen haben, FirstSpirit jetzt aber standardmäßig die Bilder in den entsprechenden Auflösungen skaliert und somit vielfach starl verzerrt.

Vom Kunden gewünscht ist eine Möglichkeit automatisiert für jede Auflösung einen entsprechenden Ausschnitt vom Originalbild zu ermitteln. Dieser Ausschnitt soll links oben beginnen und dann in der jeweiligen Auflösung aufgezogen werden. Im folgenden ein Auschnitt des entsprechenden Skriptes. Bei der Selection setze ich momentan noch einen festen Wert. Führe ich das Skript aus, wird aber bei den einzelnen Auflösungen nicht ein Ausschnitt in der angegebenen Größe erstellt, sondern einfach das Originalbild in die entsprechenden Auflösungen skaliert.

...

for(medium:mediaList){

    context.logInfo("Klasse: " + medium.getClass());

    if(medium.getType() == Media.PICTURE){

        picture = medium.getPicture(project.getMasterLanguage());

        try{

            if(!medium.isLocked()){

                medium.setLock(true);

            }   

            for(resolution:resolutions){

                pictureResolution = picture.getPictureResolution(resolution);

                if(pictureResolution.getSize() < 0){

                    pictureCropData = new PictureCropData();

                    selection = new Rectangle2D.Double(0.0,0.0,100.0,200.0);

                    pictureCropData.setSelection(selection);

                    pictureResolution.setCropData(pictureCropData);

                    pictureMetaData = picture.getPictureMetaData(resolution);

                    picture.setPicture(pictureResolution.getResolution(),pictureMetaData.getSize(),picture.getInputStream(pictureResolution.getResolution()),pictureMetaData.getExtension());           

                }else{

                    context.logInfo("Für Auflösung " + pictureResolution.getName() + " ist bereits eine Selektion vorhanden.");

                }

            }   

            medium.save();   

...

Meine Frage ist zunächst, ob ich hier was falsch mache oder ob es mit der FirstSpirit API überhaupt nicht möglich ist das umzusetzen was wir wollen.

Ich hoffe irgendjemand kann mir weiterhelfen.

Viele Grüße,

Stefan

22 Replies

Hallo @dehaatbi @f_koenig @hoebbel,

bezugnehmend auf diesen Post und den hier https://community.crownpeak.com/t5/Questions-Answers/JPG-to-Webp-Konvertierung/m-p/57474 ...

Ich stehe gerade auch vor der Herausforderung für webP Bildausschnitte neu zu setzen. Leider ist der Kunde noch nicht auf FS-Version 2023.10, so dass ich die automatische Lösung von FirstSpirit nicht verwenden kann.

Habt ihr das Zurücksetzen durch ein Modul gemacht?

Ich habe nämlich das Problem, dass er mir die von @dehaatbi angesprochene fs-isolated-webrt bei der Installation des Moduls ignoriert und dann beim Ausführen meines Codes meckert, dass er die Klasse "" nicht findet.

Installation des Moduls:

WARN  20.09.2024 16:56:52.783 (de.espirit.firstspirit.server.module.IsolationModuleManager): Resource 'lib/fs-isolated-webrt-5.2.230817.jar' of module 'bridgingIT WCMS Utilities' will be ignored.

 

Ausführen eines Schedule-Jobs zum Setzen der Bilder und Zuschnitte

ERROR 20.09.2024 16:46:17.547{dNR=} (de.espirit.firstspirit.server.scheduler.ScriptTaskExecutor): error during script execution : java.lang.NoClassDefFoundError: de/espirit/firstspirit/store/access/mediastore/PictureCropImage
java.lang.NoClassDefFoundError: de/espirit/firstspirit/store/access/mediastore/PictureCropImage

 

Da es sich in meinem Fall um ein Remote-Media Projekt mit einer sehr großen Anzahl an Bildern handelt wollte ich das Setzen der Medien über ein Executable aus einem Schedule anstoßen. Außerdem gibt es zusätzlich eine große Anzahl an Landesprojekten, die ggf. noch lokale Medien haben, so dass ich den Schedule einfach aus einem Template in jedem Projekt ausführen kann.

Habt ihr spontane Ideen?

 

Grüße
Sandro

0 Kudos
dehaatbi
Returning Observer

Hi @bIT_sosswald ,

ich hab mal geschaut. In unserem Modul ist die fs-isolated-webrt als "provided" in der pom.xml eingetragen, wird also nur zum kompilieren benötigt.

In der module-isolated.xml hab ich es auch nicht mit drin. Also scheint dann automatisch verfügbar zu sein wenn das Modul erst mal installiert ist. Also leider keine Ahnung wieso bei dir der NoClassDefFoundError kommt.

Gruß Tobi

0 Kudos

HI @dehaatbi,

danke für deine Antwort. Komisch, bei mir hat es weiter nicht funktioniert. Aber egal, jetzt habe ich eine kleine lokale Spring Boot App, die mit Hilfe der webrt Lib das Zurücksetzen der Zuschnitte übernimmt. Ist zwar ein massiver Overhead was den Datentransfer abgeht, aber es funktioniert.

Beste Grüße
Sandro

0 Kudos