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
klein
Crownpeak employee

es sieht für mich nach einem Bug aus - der entsprechende so eben erstellte Bugreport hat die ID 129001.

Weitere Infos folgen...

0 Kudos
andre
I'm new here

0 Kudos

Ja ist es jetzt ein Bug oder nicht? Was soll mir an dieser Stelle der Verweis auf die andere Diskussion weiterhelfen. Da wird ja genau die Methode auch erwähnt, welche ich hier versuche zu verwenden.

0 Kudos

wenn man aufmekrsam liesst steht das etwas von UploadHooks in V5 , so koennte man es machen. ...und kein Bug "Sets the Crop informations of current pictureresolution, related to original resolution."

                                    ^^^^^^^^^^^^ Informations hier steht nichts von processen/verabeiten/calculate etc.   

also #setCropData, kein Bug sondern Feature-Request und Javadoc-Clarification

0 Kudos

es sieht für mich nach einem Bug aus - der entsprechende so eben erstellte Bugreport hat die ID 129001.

Weitere Infos folgen...

Das steht ja jetzt weiter oben und konnte so auch gemäß eines Tickets vom Helpdesk nachgestellt werden.

Das mit den Upload Hooks in FS5 habe ich wohl gelesen, hilft mir, da nur FS4.2 im Einsatz ist aber nicht weiter. Sorry, dass ich das weiter oben nicht geschrieben habe. In meinem Ursprungspost steht ja aber wie ich es gemacht habe und dass das eben nicht geht und das scheint ja tatsächlich ein Bug zu sein.

0 Kudos

> das scheint ja tatsächlich ein Bug zu sein.

nein, wie ich schon geschrieben habe, das ist kein Bug aber ein missing Feaeture. Der Bug #129001 wurde bereits intern diskutiert, deswegen auch hier die Aussage No Bug.. vermutl. wird dieser #129001 Post in ein Feartur-Request umgewandelt. weiteres erfahren Sie dann vom helddesk.

--

andre

0 Kudos

Ok, also hat die Methode setSelection of dem CropData Objekt in FS4 keine Auswirkung und ich kann sie nicht verwenden. Frage mich nur wofür das ganze überhaupt dann überhaupt da ist. Wieso steht denn nirgendwo, dass sie in FS4 nicht verwendet werden kann?

Da ich eine automatische Beschneidung von Bildren in den unterschiedlichen Auflösungen auf jeden Fall benötige, werde ich jetzt versuchen zur Beschneidung eine externe Bibliothek anzusprechen und in den Prozess einzuklinken.

0 Kudos

Hallo Herr Zülch,

leider haben wir beide die JavaDoc zu der Methode setCropData(PictureCropData cropData)

--------------

Sets the Crop informations of current pictureresolution, related to original resolution.

--------------

falsch interpretiert Smiley Sad

Denn diese Methode setzt nur die Infos zu dem Zuschnitt

(was auch funktioniert, denn die gesetzten CROP-Daten tauchen in der Bildproperties auf, z.B. so

--------------------------------------------

<PICTURE description="...">

    <RESOLUTION crc="57e56ebd" extension="jpg" height="562" mimetype="image/jpeg" pictureRevision="13808" resolutionid="ORIGINAL" size="149977" width="849"/>

    <RESOLUTION crc="42e4938e" cropData="0.0,0.0,10.0,20.0,0,false" extension="jpg" height="73" mimetype="image/jpeg" pictureRevision="20352" resolutionid="Teaser" size="5075" width="111"/>

....

</PICTURE>

--------------------------------------------

)

aber es findet eben kein tatsächlicher (physikalischer) Zuschnitt des Bildes statt (der eigentliche Zuschnitt passiert an einer anderen Stelle).

Es gibt daher im Moment keine API-Methode, die ein Bild zuschneidet. Daher habe ich in Ihrem Namen einen FeatureRequest erstellt (interne ID 129057) und ich melde mich bei Ihnen über Ihr Ticket wieder, sobald es eine neue FS-Version gibt, in der dieses Feature zur Verfügung steht.

Übrigens, aufgrund des Bugreports #129001 wird demnächst die JavaDoc entsprechend erweitert, damit es bei der Verwendung der aktuellen Methode setCropData() keine weiteren Missverständnisse mehr auftreten.

Viele Grüße,

Walter Klein.

0 Kudos

Ich möchte hier noch mal ein paar klärende Worte loswerden:

Die angesprochene Methode setCropData setzt eine optionale Zuschnittsinformation, führt aber keinen Zuschnitt aus. Eine Methode, um einen Zuschnitt per API durchzuführen gibt es aktuell nicht. D.h. man ist aktuell gezwungen, dies selber zu implementieren (mit Standard-Java-Mitteln). Die Zuschnittsdaten kann man dann setzen, muss man aber nicht.

Unter dem angegebenen Ticket wird jetzt zunächst eine Klarstellung der API-Dokumentation an der Stelle vorangetrieben. Die Bereitstellung einer Komfort-Methode um einen Zuschnitt durchzuführen wird intern diskutiert.

Peter
0 Kudos