iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >使用com.sun.imageio.plugins.png.PNGMetadata读取图片的元数据
  • 818
分享到

使用com.sun.imageio.plugins.png.PNGMetadata读取图片的元数据

2023-06-02 21:06:08 818人浏览 八月长安
摘要

所谓图片元数据,就是除了我们肉眼看到的图片内容外,隐藏在这些内容背后的一些技术数据。本文介绍如何使用Java代码将一张图片的隐藏信息读取出来。首先不需要下载任何额外的Java库,用jdk自带的库就能工作。import java.i

所谓图片元数据,就是除了我们肉眼看到的图片内容外,隐藏在这些内容背后的一些技术数据。

本文介绍如何使用Java代码将一张图片的隐藏信息读取出来。

首先不需要下载任何额外的Java库,用jdk自带的库就能工作。

import java.io.ByteArrayInputStream;import java.io.File;import java.io.FileInputStream;import java.io.IOException;import javax.imageio.ImageIO;import javax.imageio.ImageReader;import javax.imageio.metadata.IIOMetadata;import javax.imageio.metadata.IIOMetadatanode;import org.w3c.dom.NamedNodeMap;import org.w3c.dom.Node;import org.w3c.dom.NodeList;import com.sun.imageio.plugins.png.PNGMetadata;新建一个Java类,这个类的main方法也是非常直接的:static public void main(String[] arg) throws IOException{byte[] content = getContent("C:\Users\i042416\Desktop\test\clipboard1.png");readCustomData(content);}

首先把桌面上名叫clipboard1.png的图片文件的内容读到字节数组content中。

getContent方法的代码:

使用com.sun.imageio.plugins.png.PNGMetadata读取图片的元数据

一张png图片的元数据,散布在下面这些节点里:

printNode(pngmeta.getStandardChromaNode());printNode(pngmeta.getStandardCompressionNode());printNode(pngmeta.getStandardDataNode());printNode(pngmeta.getStandardDimensionNode());printNode(pngmeta.getStandardDocumentNode());printNode(pngmeta.getStandardTextNode());printNode(pngmeta.getStandardTransparencyNode());

通过printNode打印出来:

使用com.sun.imageio.plugins.png.PNGMetadata读取图片的元数据

printNode方法的源代码:

使用com.sun.imageio.plugins.png.PNGMetadata读取图片的元数据

打印出来的元数据:

使用com.sun.imageio.plugins.png.PNGMetadata读取图片的元数据

如果大家想要复制粘贴,这是全部的源代码:

package image;import java.io.ByteArrayInputStream;import java.io.File;import java.io.FileInputStream;import java.io.IOException;import javax.imageio.ImageIO;import javax.imageio.ImageReader;import javax.imageio.metadata.IIOMetadata;import javax.imageio.metadata.IIOMetadataNode;import org.w3c.dom.NamedNodeMap;import org.w3c.dom.Node;import org.w3c.dom.NodeList;import com.sun.imageio.plugins.png.PNGMetadata;public class pngTest {static private byte[] getContent(String filePath) throws IOException {File file = new File(filePath);long fileSize = file.length();if (fileSize > Integer.MAX_VALUE) {System.out.println("file too big...");return null;}FileInputStream fi = new FileInputStream(file);byte[] buffer = new byte[(int) fileSize];int offset = 0;int numRead = 0;while (offset < buffer.length&& (numRead = fi.read(buffer, offset, buffer.length - offset)) >= 0) {offset += numRead;}if (offset != buffer.length) {fi.close();throw new IOException("Could not completely read file "+ file.getName());}fi.close();return buffer;}static private void readCustomData(byte[] imageData) throws IOException{ImageReader imageReader = ImageIO.getImageReadersByFORMatName("png").next();imageReader.setInput(ImageIO.createImageInputStream(new ByteArrayInputStream(imageData)), true);IIOMetadata metadata = imageReader.getImageMetadata(0);PNGMetadata pngmeta = (PNGMetadata) metadata;printNode(pngmeta.getStandardChromaNode());printNode(pngmeta.getStandardCompressionNode());printNode(pngmeta.getStandardDataNode());printNode(pngmeta.getStandardDimensionNode());printNode(pngmeta.getStandardDocumentNode());printNode(pngmeta.getStandardTextNode());printNode(pngmeta.getStandardTransparencyNode());}static private void printNode(IIOMetadataNode metanode){if (metanode == null)return;NodeList childNodes = metanode.getChildNodes();if( childNodes == null)return;for (int i = 0; i < childNodes.getLength(); i++) {Node node = childNodes.item(i);NamedNodeMap attribute = node.getAttributes();if( attribute == null)continue;int length = attribute.getLength();for( int j = 0; j < length; j++){Node each = attribute.item(j);String value = each.getNodeValue();String name = each.getNodeName();System.out.println("Name: " + name + " value: " + value);}}}static public void main(String[] arg) throws IOException{byte[] content = getContent("C:\Users\i042416\Desktop\test\clipboard1.png");readCustomData(content);}}

要获取更多Jerry的原创文章,请关注公众号"汪子熙":

使用com.sun.imageio.plugins.png.PNGMetadata读取图片的元数据

--结束END--

本文标题: 使用com.sun.imageio.plugins.png.PNGMetadata读取图片的元数据

本文链接: https://www.lsjlt.com/news/231342.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 使用com.sun.imageio.plugins.png.PNGMetadata读取图片的元数据
    所谓图片元数据,就是除了我们肉眼看到的图片内容外,隐藏在这些内容背后的一些技术数据。本文介绍如何使用Java代码将一张图片的隐藏信息读取出来。首先不需要下载任何额外的Java库,用JDK自带的库就能工作。import java.i...
    99+
    2023-06-02
  • php怎么读取数据库中的图片
    在PHP中,可以使用MySQLi或PDO等库来连接数据库并读取图片。 以下是使用MySQLi库的示例代码: 在上面的示例中,首先使...
    99+
    2023-10-25
    php 数据库
  • mysql数据库怎样储存读取图片
    这篇文章主要介绍了mysql数据库怎样储存读取图片,具有一定借鉴价值,需要的朋友可以参考下。希望大家阅读完这篇文章后大有收获。下面让小编带着大家一起了解一下。mysql储存读取图片的方法:首先将图片转换成缓...
    99+
    2024-04-02
  • unity 文件流读取图片与www读取图片的区别介绍
    IO流代码: void LoadByIO() { float time = Time.time; FileStream fs = new File...
    99+
    2024-04-02
  • 使用python怎么读取图片并显示
    今天就跟大家聊聊有关使用python怎么读取图片并显示,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。OpenCVOpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉和机器学...
    99+
    2023-06-14
  • 使用ServletInputStream()输入流读取图片方式
    目录问题描述项目结构问题原因解决方法总结回顾问题描述 最近遇到需要用到上传图片到服务器上,学习了一下原生servlet中的form上传图片保存到指定目录的情况 思路:前端提交–ser...
    99+
    2024-04-02
  • C++使用opencv读取图片的操作代码(图像处理)
    目录代码理解全部代码读取结果参考代码理解 using namespace cv; 解释:加入此代码,后面就不需要在函数前加入cv:: 如从cv::imread(),可以直接写成imr...
    99+
    2024-04-02
  • 使用pytorch读取数据集
    目录pytorch读取数据集第一种第二种第三种pytorch学习记录注意事项pytorch读取数据集 使用pytorch读取数据集一般有三种情况 第一种 读取官方给的数据集,例如Im...
    99+
    2024-04-02
  • Python数据获取实现图片数据提取
    目录一、利用exifread提取图片的EXIF信息二、循环遍历图片信息比如我随便从手机上传一张图片到我的电脑里,通过python可以获取这张照片的所有信息。如果是数码相机拍摄的照片,...
    99+
    2024-04-02
  • OpenCV使用imread读取图片失败解决方案
    使用一下代码读取图像,出现[ WARN:0@1.635] global D:\a\opencv-python\opencv-python\opencv\modules\imgcodecs\src\lo...
    99+
    2023-09-01
    opencv python 计算机视觉
  • PyQt5简单读取&显示图片的应用
    前言 本文为PyQt5入门教程,具体为以下四步骤 一、程序界面简单设计二、通过下拉列表框读取读取指定路径的图片三、通过读取到的图片显示在界面上四、退出事件 最终效果如下:    一、程序界面简单设计 程序初始构成如下 #利用P...
    99+
    2023-09-04
    python 机器学习 qt5 人工智能
  • Python中怎么读取Excel的图片
    这篇文章给大家介绍Python中怎么读取Excel的图片,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。一、准备由于此次包比较多,我们需要在命令行中使用pip进行安装pip install pillo...
    99+
    2023-06-15
  • 如何使用C#扫描并读取图片中的文字
    目录程序测试环境:详细步骤程序测试环境: Visual Studio版本要求不低于2017 图片扫描工具:Spire.OCR for .NET 图片格式:p...
    99+
    2024-04-02
  • .NET Core使用C#扫描并读取图片中的文字
    本文介绍如何通过C# 程序来扫描并读取图片中的文字,这里以创建一个.Net Core程序为例。下面是具体步骤,供参考。 程序测试环境: Visual Studio版本要求不...
    99+
    2024-04-02
  • 使用PyTorch怎么读取数据
    本篇文章给大家分享的是有关使用PyTorch怎么读取数据,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。模块介绍pandas 用于方便操作含有字符串的表文件,如csvzipfil...
    99+
    2023-06-14
  • 怎么使用pandas读取数据
    要使用pandas读取数据,首先需要导入pandas库,然后使用pandas提供的函数来读取数据文件。以下是一个简单的示例,演示如何...
    99+
    2024-04-02
  • 怎么使用datareader读取数据
    要使用DataReader来读取数据,需要按照以下步骤操作:1. 创建一个数据库连接对象。2. 打开数据库连接。3. 创建一个Com...
    99+
    2023-09-08
    datareader
  • 如何使用ADO.NET读取数据
    小编给大家分享一下如何使用ADO.NET读取数据,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!ADO.NET还是比较常用的,于是我研究了一下ADO.NET读取数据...
    99+
    2023-06-17
  • Java使用pulsar-flink-connector读取pulsar catalog元数据代码剖析
    简介 通过 pulsar-flink-connector 读取到 Apache pulsar 中的namespaces、topics的元数据信息。 pulsar-flink-conn...
    99+
    2024-04-02
  • 如何使用.NET向SQL Server数据库存取图片
    这篇文章主要介绍“如何使用.NET向SQL Server数据库存取图片”,在日常操作中,相信很多人在如何使用.NET向SQL Server数据库存取图片问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何使用....
    99+
    2023-06-18
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作