mirror of
https://github.com/haraldk/TwelveMonkeys.git
synced 2025-10-04 11:26:44 -04:00
Simplified/optimized TIFF file recognition code.
This commit is contained in:
@@ -36,8 +36,8 @@ import com.twelvemonkeys.imageio.spi.ImageReaderSpiBase;
|
|||||||
import javax.imageio.spi.ImageReaderSpi;
|
import javax.imageio.spi.ImageReaderSpi;
|
||||||
import javax.imageio.spi.ServiceRegistry;
|
import javax.imageio.spi.ServiceRegistry;
|
||||||
import javax.imageio.stream.ImageInputStream;
|
import javax.imageio.stream.ImageInputStream;
|
||||||
|
import java.io.EOFException;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.nio.ByteOrder;
|
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
|
|
||||||
import static com.twelvemonkeys.imageio.util.IIOUtil.lookupProviderByName;
|
import static com.twelvemonkeys.imageio.util.IIOUtil.lookupProviderByName;
|
||||||
@@ -75,7 +75,7 @@ public final class TIFFImageReaderSpi extends ImageReaderSpiBase {
|
|||||||
return canDecodeAs(pSource, TIFF.TIFF_MAGIC);
|
return canDecodeAs(pSource, TIFF.TIFF_MAGIC);
|
||||||
}
|
}
|
||||||
|
|
||||||
static boolean canDecodeAs(final Object pSource, final int magic) throws IOException {
|
static boolean canDecodeAs(final Object pSource, final int versionMagic) throws IOException {
|
||||||
if (!(pSource instanceof ImageInputStream)) {
|
if (!(pSource instanceof ImageInputStream)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@@ -84,27 +84,14 @@ public final class TIFFImageReaderSpi extends ImageReaderSpiBase {
|
|||||||
|
|
||||||
stream.mark();
|
stream.mark();
|
||||||
try {
|
try {
|
||||||
byte[] bom = new byte[2];
|
byte[] magic = new byte[4];
|
||||||
stream.readFully(bom);
|
stream.readFully(magic);
|
||||||
|
|
||||||
ByteOrder originalOrder = stream.getByteOrder();
|
return magic[0] == 'I' && magic[1] == 'I' && magic[2] == (versionMagic & 0xFF) && magic[3] == (versionMagic >>> 8)
|
||||||
|
|| magic[0] == 'M' && magic[1] == 'M' && magic[2] == (versionMagic >>> 8) && magic[3] == (versionMagic & 0xFF);
|
||||||
try {
|
}
|
||||||
if (bom[0] == 'I' && bom[1] == 'I') {
|
catch (EOFException ignore) {
|
||||||
stream.setByteOrder(ByteOrder.LITTLE_ENDIAN);
|
return false;
|
||||||
}
|
|
||||||
else if (bom[0] == 'M' && bom[1] == 'M') {
|
|
||||||
stream.setByteOrder(ByteOrder.BIG_ENDIAN);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
return stream.readUnsignedShort() == magic;
|
|
||||||
}
|
|
||||||
finally {
|
|
||||||
stream.setByteOrder(originalOrder);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
finally {
|
finally {
|
||||||
stream.reset();
|
stream.reset();
|
||||||
|
Reference in New Issue
Block a user