Clean up.

This commit is contained in:
Harald Kuhr 2015-04-10 11:23:38 +02:00
parent 5c8d4fad87
commit 037e0d5473

View File

@ -112,7 +112,7 @@ public class JPEGImageReader extends ImageReaderBase {
private static final Map<Integer, List<String>> SEGMENT_IDENTIFIERS = createSegmentIds(); private static final Map<Integer, List<String>> SEGMENT_IDENTIFIERS = createSegmentIds();
private static Map<Integer, List<String>> createSegmentIds() { private static Map<Integer, List<String>> createSegmentIds() {
Map<Integer, List<String>> map = new LinkedHashMap<Integer, List<String>>(); Map<Integer, List<String>> map = new LinkedHashMap<>();
// Need all APP markers to be able to re-generate proper metadata later // Need all APP markers to be able to re-generate proper metadata later
for (int appMarker = JPEG.APP0; appMarker <= JPEG.APP15; appMarker++) { for (int appMarker = JPEG.APP0; appMarker <= JPEG.APP15; appMarker++) {
@ -224,7 +224,7 @@ public class JPEGImageReader extends ImageReaderBase {
JPEGColorSpace csType = getSourceCSType(getJFIF(), getAdobeDCT(), getSOF()); JPEGColorSpace csType = getSourceCSType(getJFIF(), getAdobeDCT(), getSOF());
if (types == null || !types.hasNext() || csType == JPEGColorSpace.CMYK || csType == JPEGColorSpace.YCCK) { if (types == null || !types.hasNext() || csType == JPEGColorSpace.CMYK || csType == JPEGColorSpace.YCCK) {
ArrayList<ImageTypeSpecifier> typeList = new ArrayList<ImageTypeSpecifier>(); ArrayList<ImageTypeSpecifier> typeList = new ArrayList<>();
// Add the standard types, we can always convert to these // Add the standard types, we can always convert to these
typeList.add(ImageTypeSpecifiers.createFromBufferedImageType(BufferedImage.TYPE_3BYTE_BGR)); typeList.add(ImageTypeSpecifiers.createFromBufferedImageType(BufferedImage.TYPE_3BYTE_BGR));
typeList.add(ImageTypeSpecifiers.createFromBufferedImageType(BufferedImage.TYPE_INT_RGB)); typeList.add(ImageTypeSpecifiers.createFromBufferedImageType(BufferedImage.TYPE_INT_RGB));
@ -371,6 +371,10 @@ public class JPEGImageReader extends ImageReaderBase {
int origHeight = getHeight(imageIndex); int origHeight = getHeight(imageIndex);
Iterator<ImageTypeSpecifier> imageTypes = getImageTypes(imageIndex); Iterator<ImageTypeSpecifier> imageTypes = getImageTypes(imageIndex);
// TODO: Avoid creating destination here, if possible (as it saves time and memory)
// If YCbCr or RGB, we could instead create a BufferedImage around the converted raster directly.
// If YCCK or CMYK, we could instead create a BufferedImage around the converted raster,
// leaving the fourth band as alpha (or pretend it's not there, by creating a child raster).
BufferedImage image = getDestination(param, imageTypes, origWidth, origHeight); BufferedImage image = getDestination(param, imageTypes, origWidth, origHeight);
WritableRaster destination = image.getRaster(); WritableRaster destination = image.getRaster();
@ -466,6 +470,11 @@ public class JPEGImageReader extends ImageReaderBase {
} }
else if (csType == JPEGColorSpace.YCCK) { else if (csType == JPEGColorSpace.YCCK) {
YCbCrConverter.convertYCCK2CMYK(raster); YCbCrConverter.convertYCCK2CMYK(raster);
// flag0 bit 15, blend = 1 see http://graphicdesign.stackexchange.com/questions/12894/cmyk-jpegs-extracted-from-pdf-appear-inverted
if ((getAdobeDCT().flags0 & 0x8000) != 0) {
/// TODO: Better yet would be to not inverting in the first place, add flag to convertYCCK2CMYK
invertCMYK(raster);
}
} }
else if (csType == JPEGColorSpace.CMYK) { else if (csType == JPEGColorSpace.CMYK) {
invertCMYK(raster); invertCMYK(raster);
@ -670,16 +679,11 @@ public class JPEGImageReader extends ImageReaderBase {
segments = JPEGSegmentUtil.readSegments(imageInput, SEGMENT_IDENTIFIERS); segments = JPEGSegmentUtil.readSegments(imageInput, SEGMENT_IDENTIFIERS);
} }
catch (IIOException ignore) { catch (IIOException | IllegalArgumentException ignore) {
if (DEBUG) { if (DEBUG) {
ignore.printStackTrace(); ignore.printStackTrace();
} }
} }
catch (IllegalArgumentException foo) {
if (DEBUG) {
foo.printStackTrace();
}
}
finally { finally {
imageInput.reset(); imageInput.reset();
} }
@ -699,7 +703,7 @@ public class JPEGImageReader extends ImageReaderBase {
if ((marker == ALL_APP_MARKERS && segment.marker() >= JPEG.APP0 && segment.marker() <= JPEG.APP15 || segment.marker() == marker) if ((marker == ALL_APP_MARKERS && segment.marker() >= JPEG.APP0 && segment.marker() <= JPEG.APP15 || segment.marker() == marker)
&& (identifier == null || identifier.equals(segment.identifier()))) { && (identifier == null || identifier.equals(segment.identifier()))) {
if (appSegments == Collections.EMPTY_LIST) { if (appSegments == Collections.EMPTY_LIST) {
appSegments = new ArrayList<JPEGSegment>(segments.size()); appSegments = new ArrayList<>(segments.size());
} }
appSegments.add(segment); appSegments.add(segment);
@ -949,7 +953,7 @@ public class JPEGImageReader extends ImageReaderBase {
checkBounds(imageIndex); checkBounds(imageIndex);
if (thumbnails == null) { if (thumbnails == null) {
thumbnails = new ArrayList<ThumbnailReader>(); thumbnails = new ArrayList<>();
ThumbnailReadProgressListener thumbnailProgressDelegator = new ThumbnailProgressDelegate(); ThumbnailReadProgressListener thumbnailProgressDelegator = new ThumbnailProgressDelegate();
// Read JFIF thumbnails if present // Read JFIF thumbnails if present
@ -1408,10 +1412,16 @@ public class JPEGImageReader extends ImageReaderBase {
try { try {
IIOMetadata imageMetadata = reader.getImageMetadata(0); IIOMetadata imageMetadata = reader.getImageMetadata(0);
System.out.println("Metadata for File: " + file.getName()); System.out.println("Metadata for File: " + file.getName());
System.out.println("Native:");
new XMLSerializer(System.out, System.getProperty("file.encoding")).serialize(imageMetadata.getAsTree(imageMetadata.getNativeMetadataFormatName()), false); if (imageMetadata.getNativeMetadataFormatName() != null) {
System.out.println("Standard:"); System.out.println("Native:");
new XMLSerializer(System.out, System.getProperty("file.encoding")).serialize(imageMetadata.getAsTree(IIOMetadataFormatImpl.standardMetadataFormatName), false); new XMLSerializer(System.out, System.getProperty("file.encoding")).serialize(imageMetadata.getAsTree(imageMetadata.getNativeMetadataFormatName()), false);
}
if (imageMetadata.isStandardMetadataFormatSupported()) {
System.out.println("Standard:");
new XMLSerializer(System.out, System.getProperty("file.encoding")).serialize(imageMetadata.getAsTree(IIOMetadataFormatImpl.standardMetadataFormatName), false);
}
System.out.println(); System.out.println();
int numThumbnails = reader.getNumThumbnails(0); int numThumbnails = reader.getNumThumbnails(0);