Hallo zusammen,
ein Moiré Effekt kommt in der Regel durch Geschwindigkeits-Optimierungen des Skalierungs-Alogrithmus im ContentServer. Dafür gibt es in der Konfigurationsdatei des ContentServers mehrere Stellschrauben.
Die Konfigurationsdatei liegt in der Regel im “webapps” Ordner des Tomcat-Servers unter viewer/WEB-INF/classes/contentServerConfig.xml
, typischerweise also in /var/lib/tomcat9/webapps/viewer/WEB-INF/classes/contentServerConfig.xml
. Diese Datei ist Teil der Viewer-Installation. Bei Änderungen sollte man daher eine lokale persistente Version der Datei anlegen. Dazu einfach die contentServerConfig.xml
kopieren nach /opt/digiverso/viewer/config/config_contentServer.xml
. Bitte den anderen Dateinamen beachten. In Zukunft wird auch die Datei im Installationsverzeichnis config_contentServer.xml
heißen. Damit die neue Datei erkannt wird, muss allerdings der tomcat-Server einmal neu gestartet werden. Es kann auch sein, dass die lokale Datei bereits existiert, dann kann man sie direkt verwenden.
Konfiguration
In der Konfigurationsdatei gibt es zwei Stellen, an denen man drehen kann, um Moirè-Effekte zu vermeiden. Das ist zum einen
<scaling quality="SPEED" maxStepSize="50" thumbnailQuality="QUALITY"></scaling>
Hier kann man das Attribut quality
ändern auf QUALITY
oder ULTRAQUALITY
. Das hat meiner Erfahrung nach den größten Einfluss auf Moirè-Effekte.
thumbnailQualitykann man ignorieren, das wird nicht mehr verwendet; und
maxStepSize` ist mit 50 schon ganz gut. Da macht eine weitere Verbesserung hin zu höheren Werten erfahrungsgemäß wenig Sinn.
Die andere Stelle ist etwas darunter:
<imageTypeSettings>
[...]
<type format="default" colorType="default" compression="default" embeddedColorProfile="both" minSize="0" maxSize="0">
<settings allowRenderWithJAI="false" allowSubSampling="true" scaleWithScalr="false" mergeWithJAI="false" forceConvertToBuffered="false" forceConvertToRGB="false" forwardDirectlyIfPossible="false" preferredImageReader="com.github.jaiimageio"></settings>
</type>
</imageTypeSettings>
Hier kann man probieren allowSubsampling
auf false
zu setzen. Das kann allerdings bei größeren Bilder zu erheblich längeren Ladezeiten führen (wenn sie noch nicht im Cache des Viewers sind).
scaleWithScalr="true"
kann man auch helfen, da es auf einen anderen Skalierungs-Algorithmus umschaltet; dieser braucht für einige Bilder allerdings außerordentlich lange, weshalb er eigenltich überall ausgeschaltet ist.
Ab dem nächten Viewer-Release (23.12? 24.01?) lohnt es sich auch preferredImageReader="com.twelvemonkeys"
zu testen. Da muss ich allerdings noch selber Testdaten sammeln.
Testen
Zum Testen kann man die IIIF image urls direkt laden, die auch der Viewer zur Bildanzeige abruft, z.B.
https://zentralgut.ch/api/v1/records/ZHB_Fotografie_Neeser_0034/files/images/Neeser_Silvia_und_Walter_Frei_0034.jpg/0,0,4096,4000/1024,/0/default.jpg
Diese url kann mit mit dem Parameter ?ignoreCache
aufrufen, um den serverseitigen Cache für die Anfrage zu ignorieren, also z.B.:
https://zentralgut.ch/api/v1/records/ZHB_Fotografie_Neeser_0034/files/images/Neeser_Silvia_und_Walter_Frei_0034.jpg/0,0,4096,4000/1024,/0/default.jpg?ignoreCache
Wenn man nun die obigen Einstellungen in einer der config-Dateien anpasst (die lokale überstimmt jeweils die globale Datei im Installationsverzeichnis), wird der Effekt direkt beim nächsten Bildaufruf sichtbar. Manchmal dauert es ein paar Sekunden, bis die Änderungen geladen sind.
Cache zurücksetzen
Wenn man eine Einstellung gefunden hat, die die Bildauslieferung verbessert, sollte man die alten skalierten Bilder aus dem serverseitigen Cache entfernen. Das geht mit folgendem http-Aufruf (hier mit curl)
curl -X ‘DELETE’ ‘/api/v1/cache/?pdf=false’ -H ‘token:’
Für das Beispielwerk oben wäre das
curl -X ‘DELETE’ ‘https://zentralgut.ch/api/v1/cache/ZHB_Fotografie_Neeser_0034?pdf=false’ -H ‘token:’
Alternativ kann man auch den kompletten Bild-Cache des Viewers löschen, indem man die URL ohne den record-identifier
aufruft:
curl -X ‘DELETE’ ‘/api/v1/cache?pdf=false’ -H ‘token:’
Der richtige Wert für myToken
findet sich in der config_viewer.xml unter
<webapi>
<authorization>
<token>myToken</token>
</authorization>
</webapi>
Ich hoffe, das hilft, mit den Moirè Effekten fertig zu werden.
Schöne Grüße,
Florian