
de.digitalcollections.iiif.hymir.config.SpringConfigBackendImage Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of iiif-server-hymir Show documentation
Show all versions of iiif-server-hymir Show documentation
Hymir is a Java based IIIF Server. It is based on "IIIF API Java Libraries" (Java implementations of the IIIF specifications, see https://github.com/dbmdz/iiif-apis).
package de.digitalcollections.iiif.hymir.config;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
import javax.imageio.ImageIO;
import javax.imageio.ImageReader;
import javax.imageio.ImageWriter;
import javax.imageio.spi.IIORegistry;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
/**
* Backend configuration.
*/
@Configuration
@ComponentScan(basePackages = {
"de.digitalcollections.commons.file.config"
})
public class SpringConfigBackendImage {
private static final Logger LOGGER = LoggerFactory.getLogger(SpringConfigBackendImage.class);
static {
ImageIO.setUseCache(false); // Use Heap memory for caching instead of disk
deregisterSunImageSpis();
String[] readerMimeTypes = ImageIO.getReaderMIMETypes();
LOGGER.info("ImageIO supported formats (reader): {}", String.join(",", readerMimeTypes));
for (String mimeType : readerMimeTypes) {
Iterator imageReaders = ImageIO.getImageReadersByMIMEType(mimeType);
for (Iterator iterator = imageReaders; iterator.hasNext(); ) {
ImageReader imageReader = (ImageReader) iterator.next();
if (imageReader != null) {
LOGGER.info("ImageReader: {} {}", mimeType, imageReader.getClass().toString());
}
}
}
String[] writerMimeTypes = ImageIO.getWriterMIMETypes();
LOGGER.info("ImageIO supported formats (writer): {}", String.join(",", writerMimeTypes));
for (String writerMimeType : writerMimeTypes) {
Iterator imageWriters = ImageIO.getImageWritersByMIMEType(writerMimeType);
for (Iterator iterator = imageWriters; iterator.hasNext(); ) {
ImageWriter imageWriter = (ImageWriter) iterator.next();
if (imageWriter != null) {
LOGGER.info("ImageWriter: {} {}", writerMimeType, imageWriter.getClass().toString());
}
}
}
}
// TODO: not the proper way in java 11 to deactivate module feature?
private static void deregisterSunImageSpis() {
IIORegistry registry = IIORegistry.getDefaultInstance();
// We need to disable using the com.sun.imageio.* classes for tiff and jpeg due to strange runtime bugs.
// But we can just rely on the TwelveMonkeys imageio packages 🎉
// gif and png support is not provided by TwelveMonkeys (https://github.com/haraldk/TwelveMonkeys/issues/137)
// so we do not need to disable PNGImage{Reader,Writer}Spi and GIFImage{Reader, Writer}Spi for the com.sun.imageio.* classes here.
Set spis = new HashSet<>(Arrays.asList("com.sun.imageio.plugins.tiff.TIFFImageReaderSpi", "com.sun.imageio.plugins.tiff.TIFFImageWriterSpi",
"com.sun.imageio.plugins.jpeg.JPEGImageReaderSpi", "com.sun.imageio.plugins.jpeg.JPEGImageWriterSpi",
"com.sun.imageio.plugins.bmp.BMPImageReaderSpi", "com.sun.imageio.plugins.bmp.BMPImageWriterSpi"));
for (String spi : spis) {
try {
Object spiProvider = registry.getServiceProviderByClass(Class.forName(spi));
registry.deregisterServiceProvider(spiProvider);
} catch (ClassNotFoundException e) {
LOGGER.debug(e.getMessage());
}
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy