TiffSurface.java
package io.brunoborges.jairosvg.surface;
import java.io.IOException;
import javax.imageio.IIOImage;
import javax.imageio.ImageIO;
import javax.imageio.ImageWriteParam;
import javax.imageio.ImageWriter;
import javax.imageio.stream.MemoryCacheImageOutputStream;
/**
* TIFF output surface.
*/
public final class TiffSurface extends Surface {
private static final ImageWriter TIFF_WRITER;
static {
var writers = ImageIO.getImageWritersByFormatName("TIFF");
if (!writers.hasNext()) {
throw new ExceptionInInitializerError("No TIFF ImageWriter found");
}
TIFF_WRITER = writers.next();
}
private String compressionType; // null = default
/**
* Set TIFF compression type. Common values: "Deflate", "LZW", "JPEG", "ZLib",
* "PackBits", "Uncompressed". Default uses the writer's default.
*/
public void setCompressionType(String type) {
this.compressionType = type;
}
@Override
public void finish() throws IOException {
super.finish();
if (output != null && image != null) {
synchronized (TIFF_WRITER) {
try (var ios = new MemoryCacheImageOutputStream(output)) {
TIFF_WRITER.setOutput(ios);
ImageWriteParam param = null;
if (compressionType != null) {
param = TIFF_WRITER.getDefaultWriteParam();
param.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
param.setCompressionType(compressionType);
}
TIFF_WRITER.write(null, new IIOImage(image, null, null), param);
} finally {
TIFF_WRITER.reset();
}
}
}
}
}