package uk.co.mmscomputing.imageio.jpeg; import java.io.IOException; import java.nio.ByteOrder; import java.util.Locale; import javax.imageio.*; import javax.imageio.spi.*; import javax.imageio.stream.*; import javax.imageio.metadata.*; public class JPEGImageReaderSpi extends ImageReaderSpi { static final String vendorName="mm's computing"; static final String version="0.0.1"; static final String readerClassName="uk.co.mmscomputing.imageio.jpeg.JPEGImageReader"; static final String[] names={"jpg","JPG","jpeg","JPEG"}; static final String[] suffixes={"jpg","JPG","jpeg","JPEG"}; static final String[] MIMETypes={"image/jpeg"}; static final String[] writerSpiNames=null; // static final String[] writerSpiNames={"uk.co.mmscomputing.imageio.jpeg.JPEGImageWriterSpi"}; static final boolean supportsStandardStreamMetadataFormat = false; static final String nativeStreamMetadataFormatName = null; static final String nativeStreamMetadataFormatClassName = null; static final String[] extraStreamMetadataFormatNames = null; static final String[] extraStreamMetadataFormatClassNames = null; static final boolean supportsStandardImageMetadataFormat = false; static final String nativeImageMetadataFormatName = null; static final String nativeImageMetadataFormatClassName = null; static final String[] extraImageMetadataFormatNames = null; static final String[] extraImageMetadataFormatClassNames = null; public JPEGImageReaderSpi(){ super( vendorName,version, names,suffixes, MIMETypes,readerClassName, STANDARD_INPUT_TYPE, writerSpiNames, supportsStandardStreamMetadataFormat, nativeStreamMetadataFormatName, nativeStreamMetadataFormatClassName, extraStreamMetadataFormatNames, extraStreamMetadataFormatClassNames, supportsStandardImageMetadataFormat, nativeImageMetadataFormatName, nativeImageMetadataFormatClassName, extraImageMetadataFormatNames, extraImageMetadataFormatClassNames ); } public ImageReader createReaderInstance(Object extension)throws IOException{ return new JPEGImageReader(this); } public boolean canDecodeInput(Object source)throws IOException{ if(!(source instanceof ImageInputStream)) { return false; } ImageInputStream in = (ImageInputStream)source; if(in.read()!=JPEGConstants.MARK){return false;} if(in.read()!=JPEGConstants.SOI){return false;} if(in.read()!=JPEGConstants.MARK){return false;} if(in.read()!=JPEGConstants.APP0){return false;} in.read();in.read(); if(in.read()!='J'){return false;} if(in.read()!='F'){return false;} if(in.read()!='I'){return false;} if(in.read()!='F'){return false;} if(in.read()!= 0 ){return false;} return true; } public String getDescription(Locale locale){ return "mmsc jpeg decoder"; } } // [1] JPEG File Interchange Format Version 1.02 // http://www.jpeg.org/public/jfif.pdf [last accessed 2005-11-24]