1. /*
  2. * @(#)GIFImageReaderSpi.java 1.19 03/12/19
  3. *
  4. * Copyright 2004 Sun Microsystems, Inc. All rights reserved.
  5. * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
  6. */
  7. package com.sun.imageio.plugins.gif;
  8. import java.io.IOException;
  9. import java.util.Locale;
  10. import java.util.Iterator;
  11. import javax.imageio.ImageReader;
  12. import javax.imageio.metadata.IIOMetadataFormat;
  13. import javax.imageio.metadata.IIOMetadataFormatImpl;
  14. import javax.imageio.spi.ImageReaderSpi;
  15. import javax.imageio.stream.ImageInputStream;
  16. /**
  17. * @version 0.5
  18. */
  19. public class GIFImageReaderSpi extends ImageReaderSpi {
  20. private static final String vendorName = "Sun Microsystems, Inc.";
  21. private static final String version = "1.0";
  22. private static final String[] names = { "gif" };
  23. private static final String[] suffixes = { "gif" };
  24. private static final String[] MIMETypes = { "image/gif" };
  25. private static final String readerClassName =
  26. "com.sun.imageio.plugins.gif.GIFImageReader";
  27. private static final String[] writerSpiNames = null;
  28. public GIFImageReaderSpi() {
  29. super(vendorName,
  30. version,
  31. names,
  32. suffixes,
  33. MIMETypes,
  34. readerClassName,
  35. STANDARD_INPUT_TYPE,
  36. writerSpiNames,
  37. true,
  38. GIFStreamMetadata.nativeMetadataFormatName,
  39. "com.sun.imageio.plugins.gif.GIFStreamMetadataFormat",
  40. null, null,
  41. true,
  42. GIFImageMetadata.nativeMetadataFormatName,
  43. "com.sun.imageio.plugins.gif.GIFImageMetadataFormat",
  44. null, null
  45. );
  46. }
  47. public String getDescription(Locale locale) {
  48. return "Standard GIF image reader";
  49. }
  50. public boolean canDecodeInput(Object input) throws IOException {
  51. if (!(input instanceof ImageInputStream)) {
  52. return false;
  53. }
  54. ImageInputStream stream = (ImageInputStream)input;
  55. byte[] b = new byte[6];
  56. stream.mark();
  57. stream.readFully(b);
  58. stream.reset();
  59. return b[0] == 'G' && b[1] == 'I' && b[2] == 'F' && b[3] == '8' &&
  60. (b[4] == '7' || b[4] == '9') && b[5] == 'a';
  61. }
  62. public ImageReader createReaderInstance(Object extension) {
  63. return new GIFImageReader(this);
  64. }
  65. }