📄 pngmetadata.java
字号:
if (pHYs_present && pHYs_unitSpecifier == PHYS_UNIT_METER) { node = new IIOMetadataNode("HorizontalPixelSize"); node.setAttribute("value", Float.toString(1000.0F/pHYs_pixelsPerUnitXAxis)); dimension_node.appendChild(node); node = new IIOMetadataNode("VerticalPixelSize"); node.setAttribute("value", Float.toString(1000.0F/pHYs_pixelsPerUnitYAxis)); dimension_node.appendChild(node); } return dimension_node; } public IIOMetadataNode getStandardDocumentNode() { if (!tIME_present) { return null; } IIOMetadataNode document_node = new IIOMetadataNode("Document"); IIOMetadataNode node = null; // scratch node node = new IIOMetadataNode("ImageModificationTime"); node.setAttribute("year", Integer.toString(tIME_year)); node.setAttribute("month", Integer.toString(tIME_month)); node.setAttribute("day", Integer.toString(tIME_day)); node.setAttribute("hour", Integer.toString(tIME_hour)); node.setAttribute("minute", Integer.toString(tIME_minute)); node.setAttribute("second", Integer.toString(tIME_second)); document_node.appendChild(node); return document_node; } public IIOMetadataNode getStandardTextNode() { int numEntries = tEXt_keyword.size() + iTXt_keyword.size() + zTXt_keyword.size(); if (numEntries == 0) { return null; } IIOMetadataNode text_node = new IIOMetadataNode("Text"); IIOMetadataNode node = null; // scratch node for (int i = 0; i < tEXt_keyword.size(); i++) { node = new IIOMetadataNode("TextEntry"); node.setAttribute("keyword", (String)tEXt_keyword.get(i)); node.setAttribute("value", (String)tEXt_text.get(i)); node.setAttribute("encoding", "ISO-8859-1"); node.setAttribute("compression", "none"); text_node.appendChild(node); } for (int i = 0; i < iTXt_keyword.size(); i++) { node = new IIOMetadataNode("TextEntry"); node.setAttribute("keyword", (String)iTXt_keyword.get(i)); node.setAttribute("value", (String)iTXt_text.get(i)); node.setAttribute("language", (String)iTXt_languageTag.get(i)); if (((Integer)iTXt_compressionFlag.get(i)).intValue() == 1) { node.setAttribute("compression", "deflate"); } else { node.setAttribute("compression", "none"); } text_node.appendChild(node); } for (int i = 0; i < zTXt_keyword.size(); i++) { node = new IIOMetadataNode("TextEntry"); node.setAttribute("keyword", (String)zTXt_keyword.get(i)); node.setAttribute("value", (String)zTXt_text.get(i)); node.setAttribute("compression", "deflate"); text_node.appendChild(node); } return text_node; } public IIOMetadataNode getStandardTransparencyNode() { IIOMetadataNode transparency_node = new IIOMetadataNode("Transparency"); IIOMetadataNode node = null; // scratch node node = new IIOMetadataNode("Alpha"); boolean hasAlpha = (IHDR_colorType == PNGImageReader.PNG_COLOR_RGB_ALPHA) || (IHDR_colorType == PNGImageReader.PNG_COLOR_GRAY_ALPHA) || (IHDR_colorType == PNGImageReader.PNG_COLOR_PALETTE && tRNS_present && (tRNS_colorType == IHDR_colorType) && (tRNS_alpha != null)); node.setAttribute("value", hasAlpha ? "nonpremultipled" : "none"); transparency_node.appendChild(node); if (tRNS_present) { node = new IIOMetadataNode("TransparentColor"); if (tRNS_colorType == PNGImageReader.PNG_COLOR_RGB) { node.setAttribute("value", Integer.toString(tRNS_red) + " " + Integer.toString(tRNS_green) + " " + Integer.toString(tRNS_blue)); } else if (tRNS_colorType == PNGImageReader.PNG_COLOR_GRAY) { node.setAttribute("value", Integer.toString(tRNS_gray)); } transparency_node.appendChild(node); } return transparency_node; } // Shorthand for throwing an IIOInvalidTreeException private void fatal(Node node, String reason) throws IIOInvalidTreeException { throw new IIOInvalidTreeException(reason, node); } // Get an integer-valued attribute private String getStringAttribute(Node node, String name, String defaultValue, boolean required) throws IIOInvalidTreeException { Node attr = node.getAttributes().getNamedItem(name); if (attr == null) { if (!required) { return defaultValue; } else { fatal(node, "Required attribute " + name + " not present!"); } } return attr.getNodeValue(); } // Get an integer-valued attribute private int getIntAttribute(Node node, String name, int defaultValue, boolean required) throws IIOInvalidTreeException { String value = getStringAttribute(node, name, null, required); if (value == null) { return defaultValue; } return Integer.parseInt(value); } // Get a float-valued attribute private float getFloatAttribute(Node node, String name, float defaultValue, boolean required) throws IIOInvalidTreeException { String value = getStringAttribute(node, name, null, required); if (value == null) { return defaultValue; } return Float.parseFloat(value); } // Get a required integer-valued attribute private int getIntAttribute(Node node, String name) throws IIOInvalidTreeException { return getIntAttribute(node, name, -1, true); } // Get a required float-valued attribute private float getFloatAttribute(Node node, String name) throws IIOInvalidTreeException { return getFloatAttribute(node, name, -1.0F, true); } // Get a boolean-valued attribute private boolean getBooleanAttribute(Node node, String name, boolean defaultValue, boolean required) throws IIOInvalidTreeException { Node attr = node.getAttributes().getNamedItem(name); if (attr == null) { if (!required) { return defaultValue; } else { fatal(node, "Required attribute " + name + " not present!"); } } String value = attr.getNodeValue(); if (value.equals("true")) { return true; } else if (value.equals("false")) { return false; } else { fatal(node, "Attribute " + name + " must be 'true' or 'false'!"); return false; } } // Get a required boolean-valued attribute private boolean getBooleanAttribute(Node node, String name) throws IIOInvalidTreeException { return getBooleanAttribute(node, name, false, true); } // Get an enumerated attribute as an index into a String array private int getEnumeratedAttribute(Node node, String name, String[] legalNames, int defaultValue, boolean required) throws IIOInvalidTreeException { Node attr = node.getAttributes().getNamedItem(name); if (attr == null) { if (!required) { return defaultValue; } else { fatal(node, "Required attribute " + name + " not present!"); } } String value = attr.getNodeValue(); for (int i = 0; i < legalNames.length; i++) { if (value.equals(legalNames[i])) { return i; } } fatal(node, "Illegal value for attribute " + name + "!"); return -1; } // Get a required enumerated attribute as an index into a String array private int getEnumeratedAttribute(Node node, String name, String[] legalNames) throws IIOInvalidTreeException { return getEnumeratedAttribute(node, name, legalNames, -1, true); } // Get a String-valued attribute private String getAttribute(Node node, String name, String defaultValue, boolean required) throws IIOInvalidTreeException { Node attr = node.getAttributes().getNamedItem(name); if (attr == null) { if (!required) { return defaultValue; } else { fatal(node, "Required attribute " + name + " not present!"); } } return attr.getNodeValue(); } // Get a required String-valued attribute private String getAttribute(Node node, String name) throws IIOInvalidTreeException { return getAttribute(node, name, null, true); } public void mergeTree(String formatName, Node root) throws IIOInvalidTreeException { if (formatName.equals(nativeMetadataFormatName)) { if (root == null) { throw new IllegalArgumentException("root == null!"); } mergeNativeTree(root); } else if (formatName.equals (IIOMetadataFormatImpl.standardMetadataFormatName)) { if (root == null) { throw new IllegalArgumentException("root == null!"); } mergeStandardTree(root); } else { throw new IllegalArgumentException("Not a recognized format!"); } } private void mergeNativeTree(Node root) throws IIOInvalidTreeException { Node node = root; if (!node.getNodeName().equals(nativeMetadataFormatName)) { fatal(node, "Root must be " + nativeMetadataFormatName); } node = node.getFirstChild(); while (node != null) { String name = node.getNodeName(); if (name.equals("IHDR")) { IHDR_width = getIntAttribute(node, "width"); IHDR_height = getIntAttribute(node, "height"); IHDR_bitDepth = getEnumeratedAttribute(node, "bitDepth", IHDR_bitDepths); IHDR_colorType = getEnumeratedAttribute(node, "colorType", IHDR_colorTypeNames); IHDR_compressionMethod = getEnumeratedAttribute(node, "compressionMethod", IHDR_compressionMethodNames); IHDR_filterMethod = getEnumeratedAttribute(node, "filterMethod", IHDR_filterMethodNames); IHDR_interlaceMethod = getEnumeratedAttribute(node, "interlaceMethod", IHDR_interlaceMethodNames); IHDR_present = true; } else if (name.equals("PLTE")) { byte[] red = new byte[256]; byte[] green = new byte[256]; byte[] blue = new byte[256]; int maxindex = -1; Node PLTE_entry = node.getFirstChild(); if (PLTE_entry == null) { fatal(node, "Palette has no entries!"); } while (PLTE_entry != null) { if (!PLTE_entry.getNodeName().equals("PLTEEntry")) { fatal(node, "Only a PLTEEntry may be a child of a PLTE!"); } int index = getIntAttribute(PLTE_entry, "index"); if (index < 0 || index > 255) { fatal(node, "Bad value for PLTEEntry attribute index!"); }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -