mirror of
https://github.com/haraldk/TwelveMonkeys.git
synced 2026-05-01 00:00:02 -04:00
#290 TIFF Stream Medata support
This commit is contained in:
+4
-3
@@ -75,7 +75,7 @@ import java.util.*;
|
||||
import java.util.zip.Inflater;
|
||||
import java.util.zip.InflaterInputStream;
|
||||
|
||||
import static com.twelvemonkeys.imageio.util.IIOUtil.*;
|
||||
import static com.twelvemonkeys.imageio.util.IIOUtil.createStreamAdapter;
|
||||
import static com.twelvemonkeys.imageio.util.IIOUtil.lookupProviderByName;
|
||||
|
||||
/**
|
||||
@@ -2113,8 +2113,9 @@ public final class TIFFImageReader extends ImageReaderBase {
|
||||
|
||||
@Override
|
||||
public IIOMetadata getStreamMetadata() throws IOException {
|
||||
// TODO:
|
||||
return super.getStreamMetadata();
|
||||
readMetadata();
|
||||
|
||||
return new TIFFStreamMetadata(imageInput.getByteOrder());
|
||||
}
|
||||
|
||||
public static void main(final String[] args) throws IOException {
|
||||
|
||||
+3
-2
@@ -60,6 +60,8 @@ import java.util.*;
|
||||
import java.util.zip.Deflater;
|
||||
import java.util.zip.DeflaterOutputStream;
|
||||
|
||||
import static com.twelvemonkeys.imageio.plugins.tiff.TIFFStreamMetadata.configureStreamByteOrder;
|
||||
|
||||
/**
|
||||
* TIFFImageWriter
|
||||
*
|
||||
@@ -195,9 +197,8 @@ public final class TIFFImageWriter extends ImageWriterBase {
|
||||
|
||||
@Override
|
||||
public void write(final IIOMetadata streamMetadata, final IIOImage image, final ImageWriteParam param) throws IOException {
|
||||
// TODO: Validate input
|
||||
assertOutput();
|
||||
// TODO: streamMetadata?
|
||||
configureStreamByteOrder(streamMetadata, imageOutput);
|
||||
|
||||
// TODO: Make TIFFEntry and possibly TIFFDirectory? public
|
||||
EXIFWriter exifWriter = new EXIFWriter();
|
||||
|
||||
+23
-2
@@ -35,8 +35,10 @@ import org.w3c.dom.Node;
|
||||
import javax.imageio.metadata.IIOInvalidTreeException;
|
||||
import javax.imageio.metadata.IIOMetadata;
|
||||
import javax.imageio.metadata.IIOMetadataNode;
|
||||
import javax.imageio.stream.ImageOutputStream;
|
||||
import java.nio.ByteOrder;
|
||||
|
||||
import static com.twelvemonkeys.lang.Validate.notNull;
|
||||
import static java.nio.ByteOrder.BIG_ENDIAN;
|
||||
|
||||
/**
|
||||
@@ -56,6 +58,10 @@ public final class TIFFStreamMetadata extends IIOMetadata {
|
||||
super(false, SUN_NATIVE_STREAM_METADATA_FORMAT_NAME, null, null, null);
|
||||
}
|
||||
|
||||
TIFFStreamMetadata(final ByteOrder byteOrder) {
|
||||
this();
|
||||
this.byteOrder = byteOrder;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isReadOnly() {
|
||||
@@ -78,7 +84,7 @@ public final class TIFFStreamMetadata extends IIOMetadata {
|
||||
@Override
|
||||
public void mergeTree(final String formatName, final Node root) throws IIOInvalidTreeException {
|
||||
Validate.isTrue(nativeMetadataFormatName.equals(formatName), formatName, "Unsupported metadata format: %s");
|
||||
Validate.notNull(root, "root");
|
||||
notNull(root, "root");
|
||||
|
||||
if (!nativeMetadataFormatName.equals(root.getNodeName())) {
|
||||
throw new IIOInvalidTreeException("Root must be " + nativeMetadataFormatName, root);
|
||||
@@ -90,8 +96,8 @@ public final class TIFFStreamMetadata extends IIOMetadata {
|
||||
}
|
||||
|
||||
NamedNodeMap attributes = node.getAttributes();
|
||||
String value = attributes.getNamedItem("value").getNodeValue();
|
||||
|
||||
String value = attributes.getNamedItem("value").getNodeValue();
|
||||
if (value == null) {
|
||||
throw new IIOInvalidTreeException("Missing \"value\" attribute in \"ByteOrder\" node", node);
|
||||
}
|
||||
@@ -121,4 +127,19 @@ public final class TIFFStreamMetadata extends IIOMetadata {
|
||||
// Big endian is always the default
|
||||
byteOrder = BIG_ENDIAN;
|
||||
}
|
||||
|
||||
static void configureStreamByteOrder(final IIOMetadata streamMetadata, final ImageOutputStream imageOutput) throws IIOInvalidTreeException {
|
||||
notNull(imageOutput, "imageOutput");
|
||||
|
||||
if (streamMetadata instanceof TIFFStreamMetadata) {
|
||||
imageOutput.setByteOrder(((TIFFStreamMetadata) streamMetadata).byteOrder);
|
||||
}
|
||||
else if (streamMetadata != null) {
|
||||
TIFFStreamMetadata metadata = new TIFFStreamMetadata();
|
||||
// Will throw exception if stream format differs from native
|
||||
metadata.mergeTree(metadata.nativeMetadataFormatName, streamMetadata.getAsTree(metadata.nativeMetadataFormatName));
|
||||
imageOutput.setByteOrder(metadata.byteOrder);
|
||||
}
|
||||
// else, leave as-is
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user