1. /*
  2. * @(#)PNGImageReaderSpi.java 1.24 03/01/23
  3. *
  4. * Copyright 2003 Sun Microsystems, Inc. All rights reserved.
  5. * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
  6. */
  7. package com.sun.imageio.plugins.png;
  8. import java.io.IOException;
  9. import java.util.Locale;
  10. import java.util.Iterator;
  11. import javax.imageio.ImageReader;
  12. import javax.imageio.spi.ImageReaderSpi;
  13. import javax.imageio.metadata.IIOMetadataFormat;
  14. import javax.imageio.metadata.IIOMetadataFormatImpl;
  15. import javax.imageio.stream.ImageInputStream;
  16. /**
  17. * @version 0.5
  18. */
  19. public class PNGImageReaderSpi 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 = { "png" };
  23. private static final String[] suffixes = { "png" };
  24. private static final String[] MIMETypes = { "image/png", "image/x-png" };
  25. private static final String readerClassName =
  26. "com.sun.imageio.plugins.png.PNGImageReader";
  27. private static final String[] writerSpiNames = {
  28. "com.sun.imageio.plugins.png.PNGImageWriterSpi"
  29. };
  30. public PNGImageReaderSpi() {
  31. super(vendorName,
  32. version,
  33. names,
  34. suffixes,
  35. MIMETypes,
  36. readerClassName,
  37. STANDARD_INPUT_TYPE,
  38. writerSpiNames,
  39. false,
  40. null, null,
  41. null, null,
  42. true,
  43. PNGMetadata.nativeMetadataFormatName,
  44. "com.sun.imageio.plugins.png.PNGMetadataFormat",
  45. null, null
  46. );
  47. }
  48. public String getDescription(Locale locale) {
  49. return "Standard PNG image reader";
  50. }
  51. public boolean canDecodeInput(Object input) throws IOException {
  52. if (!(input instanceof ImageInputStream)) {
  53. return false;
  54. }
  55. ImageInputStream stream = (ImageInputStream)input;
  56. byte[] b = new byte[8];
  57. stream.mark();
  58. stream.readFully(b);
  59. stream.reset();
  60. return (b[0] == (byte)137 &&
  61. b[1] == (byte)80 &&
  62. b[2] == (byte)78 &&
  63. b[3] == (byte)71 &&
  64. b[4] == (byte)13 &&
  65. b[5] == (byte)10 &&
  66. b[6] == (byte)26 &&
  67. b[7] == (byte)10);
  68. }
  69. public ImageReader createReaderInstance(Object extension) {
  70. return new PNGImageReader(this);
  71. }
  72. }