Merge branch 'master' into webp

This commit is contained in:
Harald Kuhr 2021-03-27 15:29:23 +01:00
commit 7b09ec8919
2 changed files with 60 additions and 41 deletions

View File

@ -1147,8 +1147,7 @@ public final class TIFFImageReader extends ImageReaderBase {
// This initializes the tables and other internal settings for the reader, // This initializes the tables and other internal settings for the reader,
// and is actually a feature of JPEG, see abbreviated streams: // and is actually a feature of JPEG, see abbreviated streams:
// http://docs.oracle.com/javase/6/docs/api/javax/imageio/metadata/doc-files/jpeg_metadata.html#abbrev // http://docs.oracle.com/javase/6/docs/api/javax/imageio/metadata/doc-files/jpeg_metadata.html#abbrev
IIOMetadata streamMetadata = jpegReader.getStreamMetadata(); jpegReader.getStreamMetadata();
new XMLSerializer(System.out, "UTF8").serialize(streamMetadata.getAsTree(streamMetadata.getNativeMetadataFormatName()), false);
} }
else if (tilesDown * tilesAcross > 1) { else if (tilesDown * tilesAcross > 1) {
processWarningOccurred("Missing JPEGTables for tiled/striped TIFF with compression: 7 (JPEG)"); processWarningOccurred("Missing JPEGTables for tiled/striped TIFF with compression: 7 (JPEG)");

View File

@ -768,45 +768,7 @@ public final class TIFFImageWriter extends ImageWriterBase {
entries.put(TIFF.TAG_SOFTWARE, new TIFFEntry(TIFF.TAG_SOFTWARE, "TwelveMonkeys ImageIO TIFF writer " + originatingProvider.getVersion())); entries.put(TIFF.TAG_SOFTWARE, new TIFFEntry(TIFF.TAG_SOFTWARE, "TwelveMonkeys ImageIO TIFF writer " + originatingProvider.getVersion()));
entries.put(TIFF.TAG_ORIENTATION, new TIFFEntry(TIFF.TAG_ORIENTATION, 1)); // (optional) entries.put(TIFF.TAG_ORIENTATION, new TIFFEntry(TIFF.TAG_ORIENTATION, 1)); // (optional)
if (ifd != null) { mergeSafeMetadata(ifd, entries);
for (Entry entry : ifd) {
int tagId = (Integer) entry.getIdentifier();
switch (tagId) {
// Baseline
case TIFF.TAG_SUBFILE_TYPE:
case TIFF.TAG_OLD_SUBFILE_TYPE:
case TIFF.TAG_IMAGE_DESCRIPTION:
case TIFF.TAG_MAKE:
case TIFF.TAG_MODEL:
case TIFF.TAG_ORIENTATION:
case TIFF.TAG_X_RESOLUTION:
case TIFF.TAG_Y_RESOLUTION:
case TIFF.TAG_RESOLUTION_UNIT:
case TIFF.TAG_SOFTWARE:
case TIFF.TAG_DATE_TIME:
case TIFF.TAG_ARTIST:
case TIFF.TAG_HOST_COMPUTER:
case TIFF.TAG_COPYRIGHT:
// Extension
case TIFF.TAG_DOCUMENT_NAME:
case TIFF.TAG_PAGE_NAME:
case TIFF.TAG_X_POSITION:
case TIFF.TAG_Y_POSITION:
case TIFF.TAG_PAGE_NUMBER:
case TIFF.TAG_XMP:
// Private/Custom
case TIFF.TAG_IPTC:
case TIFF.TAG_PHOTOSHOP:
case TIFF.TAG_PHOTOSHOP_IMAGE_SOURCE_DATA:
case TIFF.TAG_PHOTOSHOP_ANNOTATIONS:
case TIFF.TAG_EXIF_IFD:
case TIFF.TAG_GPS_IFD:
case TIFF.TAG_INTEROP_IFD:
entries.put(tagId, entry);
}
}
}
ColorModel colorModel = imageType.getColorModel(); ColorModel colorModel = imageType.getColorModel();
SampleModel sampleModel = imageType.getSampleModel(); SampleModel sampleModel = imageType.getSampleModel();
@ -903,6 +865,64 @@ public final class TIFFImageWriter extends ImageWriterBase {
return new TIFFImageMetadata(entries.values()); return new TIFFImageMetadata(entries.values());
} }
private void mergeSafeMetadata(final Directory ifd, final Map<Integer, Entry> entries) {
if (ifd == null) {
return;
}
for (Entry entry : ifd) {
int tagId = (Integer) entry.getIdentifier();
switch (tagId) {
// Baseline
case TIFF.TAG_SUBFILE_TYPE:
case TIFF.TAG_OLD_SUBFILE_TYPE:
case TIFF.TAG_IMAGE_DESCRIPTION:
case TIFF.TAG_MAKE:
case TIFF.TAG_MODEL:
case TIFF.TAG_ORIENTATION:
case TIFF.TAG_X_RESOLUTION:
case TIFF.TAG_Y_RESOLUTION:
case TIFF.TAG_RESOLUTION_UNIT:
case TIFF.TAG_SOFTWARE:
case TIFF.TAG_DATE_TIME:
case TIFF.TAG_ARTIST:
case TIFF.TAG_HOST_COMPUTER:
case TIFF.TAG_COPYRIGHT:
// Extension
case TIFF.TAG_DOCUMENT_NAME:
case TIFF.TAG_PAGE_NAME:
case TIFF.TAG_X_POSITION:
case TIFF.TAG_Y_POSITION:
case TIFF.TAG_PAGE_NUMBER:
case TIFF.TAG_XMP:
// Private/Custom
case TIFF.TAG_IPTC:
case TIFF.TAG_PHOTOSHOP:
case TIFF.TAG_PHOTOSHOP_IMAGE_SOURCE_DATA:
case TIFF.TAG_PHOTOSHOP_ANNOTATIONS:
case TIFF.TAG_EXIF_IFD:
case TIFF.TAG_GPS_IFD:
case TIFF.TAG_INTEROP_IFD:
entries.put(tagId, entry);
break;
default:
// Allow most extension and custom tags
if (tagId >= 1000 && tagId < 50706) {
entries.put(tagId, entry);
}
// Skip 50 706 - 57 080 (DNG tags)
else if (tagId > 50780 && tagId < 65000) {
entries.put(tagId, entry);
}
// Always allow "the reusable range"
else if (tagId >= 65000 && tagId <= 65535) {
entries.put(tagId, entry);
}
}
}
}
@Override @Override
public IIOMetadata getDefaultStreamMetadata(final ImageWriteParam param) { public IIOMetadata getDefaultStreamMetadata(final ImageWriteParam param) {
return super.getDefaultStreamMetadata(param); return super.getDefaultStreamMetadata(param);