javax.imageio.metadata.IIOMetadataNode#item ( )源码实例Demo

下面列出了javax.imageio.metadata.IIOMetadataNode#item ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。

源代码1 项目: scrimage   文件: GifSequenceWriter.java
/**
 * Returns an existing child node, or creates and returns a new child node (if
 * the requested node does not exist).
 *
 * @param rootNode the <tt>IIOMetadataNode</tt> to search for the child node.
 * @param nodeName the name of the child node.
 * @return the child node, if found or a new node created with the given name.
 */
private IIOMetadataNode getNode(IIOMetadataNode rootNode, String nodeName) {

    IIOMetadataNode[] nodes = new IIOMetadataNode[rootNode.getLength()];

    for (int i = 0; i < rootNode.getLength(); i++) {
        nodes[i] = (IIOMetadataNode) rootNode.item(i);
    }

    return Arrays.stream(nodes)
            .filter(n -> n.getNodeName().equalsIgnoreCase(nodeName))
            .findFirst().orElseGet(() -> {
                IIOMetadataNode node = new IIOMetadataNode(nodeName);
                rootNode.appendChild(node);
                return node;
            });
}
 
源代码2 项目: BlockMap   文件: GifSequenceWriter.java
/**
 * Returns an existing child node, or creates and returns a new child node (if the requested node does not exist).
 * 
 * @param rootNode
 *            the <tt>IIOMetadataNode</tt> to search for the child node.
 * @param nodeName
 *            the name of the child node.
 * 
 * @return the child node, if found or a new node created with the given name.
 */
private static IIOMetadataNode getNode(
		IIOMetadataNode rootNode,
		String nodeName) {
	int nNodes = rootNode.getLength();
	for (int i = 0; i < nNodes; i++) {
		if (rootNode.item(i).getNodeName().compareToIgnoreCase(nodeName) == 0) {
			return ((IIOMetadataNode) rootNode.item(i));
		}
	}
	IIOMetadataNode node = new IIOMetadataNode(nodeName);
	rootNode.appendChild(node);
	return (node);
}
 
源代码3 项目: graphicsfuzz   文件: GifSequenceWriter.java
/**
 * Returns an existing child node, or creates and returns a new child node (if
 * the requested node does not exist).
 *
 * @param rootNode the <tt>IIOMetadataNode</tt> to search for the child node.
 * @param nodeName the name of the child node.
 *
 * @return the child node, if found or a new node created with the given name.
 */
private static IIOMetadataNode getNode(
    IIOMetadataNode rootNode,
    String nodeName) {
  int numNodes = rootNode.getLength();
  for (int i = 0; i < numNodes; i++) {
    if (rootNode.item(i).getNodeName().compareToIgnoreCase(nodeName)
        == 0) {
      return ((IIOMetadataNode) rootNode.item(i));
    }
  }
  IIOMetadataNode node = new IIOMetadataNode(nodeName);
  rootNode.appendChild(node);
  return (node);
}
 
源代码4 项目: Digital   文件: GifSequenceWriter.java
/**
 * Returns an existing child node, or creates and returns a new child node (if
 * the requested node does not exist).
 *
 * @param rootNode the <tt>IIOMetadataNode</tt> to search for the child node.
 * @param nodeName the name of the child node.
 * @return the child node, if found or a new node created with the given name.
 */
private static IIOMetadataNode getNode(
        IIOMetadataNode rootNode,
        String nodeName) {
    int nNodes = rootNode.getLength();
    for (int i = 0; i < nNodes; i++) {
        if (rootNode.item(i).getNodeName().compareToIgnoreCase(nodeName)
                == 0) {
            return ((IIOMetadataNode) rootNode.item(i));
        }
    }
    IIOMetadataNode node = new IIOMetadataNode(nodeName);
    rootNode.appendChild(node);
    return (node);
}
 
源代码5 项目: open-ig   文件: GifSequenceWriter.java
/**
 * Returns an existing child node, or creates and returns a new child node
 * (if the requested node does not exist).
 * 
 * @param rootNode
 *            the <tt>IIOMetadataNode</tt> to search for the child node.
 * @param nodeName
 *            the name of the child node.
 * 
 * @return the child node, if found or a new node created with the given
 *         name.
 */
private static IIOMetadataNode getNode(IIOMetadataNode rootNode,
		String nodeName) {
	int nNodes = rootNode.getLength();
	for (int i = 0; i < nNodes; i++) {
		if (rootNode.item(i).getNodeName().compareToIgnoreCase(nodeName) == 0) {
			return ((IIOMetadataNode) rootNode.item(i));
		}
	}
	IIOMetadataNode node = new IIOMetadataNode(nodeName);
	rootNode.appendChild(node);
	return (node);
}
 
源代码6 项目: AsciidocFX   文件: GifSequenceWriter.java
/**
 * Returns an existing child node, or creates and returns a new child node (if
 * the requested node does not exist).
 *
 * @param rootNode the <tt>IIOMetadataNode</tt> to search for the child node.
 * @param nodeName the name of the child node.
 * @return the child node, if found or a new node created with the given name.
 */
private IIOMetadataNode getNode(
        IIOMetadataNode rootNode,
        String nodeName) {
    int nNodes = rootNode.getLength();
    for (int i = 0; i < nNodes; i++) {
        if (rootNode.item(i).getNodeName().compareToIgnoreCase(nodeName)
                == 0) {
            return ((IIOMetadataNode) rootNode.item(i));
        }
    }
    IIOMetadataNode node = new IIOMetadataNode(nodeName);
    rootNode.appendChild(node);
    return (node);
}
 
源代码7 项目: ChatGameFontificator   文件: AnimatedGifUtil.java
/**
 * Fix (ditto) for Java's animated GIF interpretation
 * 
 * Adapted from http://stackoverflow.com/questions/26801433/fix-frame-rate-of-animated-gif-in-java#answer-26829534
 * 
 * @param url
 *            The URL for the animated GIF to be loaded
 * @param dim
 *            The dimension object to be filled by the width and height of the loaded animated GIF
 * @return The loaded animated GIF
 * @throws Exception
 */
public static Image loadDittoAnimatedGif(final URL url, Dimension dim)
{
    final Image dimImage = new ImageIcon(url).getImage();

    Image image = null;
    try
    {
        ImageReader gifReader = ImageIO.getImageReadersByFormatName(GIF_EXTENSION).next();
        InputStream imageStream = url.openStream();
        gifReader.setInput(ImageIO.createImageInputStream(imageStream));
        IIOMetadata imageMetaData = gifReader.getImageMetadata(0);
        String metaFormatName = imageMetaData.getNativeMetadataFormatName();
        final int frameCount = gifReader.getNumImages(true);

        ByteArrayOutputStream baoStream = new ByteArrayOutputStream();
        ImageOutputStream ios = ImageIO.createImageOutputStream(baoStream);
        ImageWriter writer = ImageIO.getImageWriter(gifReader);
        writer.setOutput(ios);
        writer.prepareWriteSequence(null);

        final int imgWidth = dimImage.getWidth(null);
        final int imgHeight = dimImage.getHeight(null);
        dim.setSize(imgWidth, imgHeight);

        for (int i = 0; i < frameCount; i++)
        {
            // This read method takes into account the frame's top and left coordinates
            BufferedImage frame = gifReader.read(i);
            IIOMetadataNode nodes = (IIOMetadataNode) gifReader.getImageMetadata(i).getAsTree(metaFormatName);

            for (int j = 0; j < nodes.getLength(); j++)
            {
                IIOMetadataNode node = (IIOMetadataNode) nodes.item(j);
                if (GRAPHIC_CTRL_EXT.equalsIgnoreCase(node.getNodeName()))
                {
                    int delay = Integer.parseInt(node.getAttribute(ATTRIBUTE_DELAY_TIME));
                    // Minimum delay for browsers, which delay animated GIFs much more than would be to spec
                    if (delay < MIN_ANI_GIF_DELAY)
                    {
                        node.setAttribute(ATTRIBUTE_DELAY_TIME, Integer.toString(MIN_ANI_GIF_DELAY));
                    }
                    // Java's interpretation of restore to previous doesn't seem to work correctly, 
                    // at least not for BTTV's (ditto)
                    if (node.getAttribute(ATTRIBUTE_DISPOSAL_METHOD).equals(DISPOSE_RESTORE_TO_PREVIOUS))
                    {
                        node.setAttribute(ATTRIBUTE_DISPOSAL_METHOD, DISPOSE_RESTORE_TO_BGCOLOR);
                    }
                }
            }

            IIOMetadata metadata = writer.getDefaultImageMetadata(new ImageTypeSpecifier(frame), null);
            metadata.setFromTree(metadata.getNativeMetadataFormatName(), nodes);

            // This modified frame is necessary to get the correct image placement, width, and height in the final GIF
            BufferedImage frameMod = new BufferedImage(imgWidth, imgHeight, BufferedImage.TYPE_INT_ARGB);
            Graphics big = frameMod.getGraphics();
            big.drawImage(frame, 0, 0, null);

            IIOImage fixedFrame = new IIOImage(frameMod, null, metadata);
            writer.writeToSequence(fixedFrame, writer.getDefaultWriteParam());
        }
        writer.endWriteSequence();

        if (ios != null)
        {
            ios.close();
        }

        image = Toolkit.getDefaultToolkit().createImage(baoStream.toByteArray());
    }
    catch (Exception e)
    {
        // If anything goes wrong, just load it normally
        logger.error("Error loading animated GIF (ditto) from " + url, e);
        image = new ImageIcon(url).getImage();
        dim.setSize(image.getWidth(null), image.getHeight(null));
    }

    return image;
}