成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

使用com.sun.imageio.plugins.png.PNGMetadata讀取圖片的元數(shù)據(jù)

hersion / 1685人閱讀

摘要:所謂圖片元數(shù)據(jù),就是除了我們?nèi)庋劭吹降膱D片內(nèi)容外,隱藏在這些內(nèi)容背后的一些技術(shù)數(shù)據(jù)。本文介紹如何使用代碼將一張圖片的隱藏信息讀取出來。新建一個(gè)類,這個(gè)類的方法也是非常直接的首先把桌面上名叫的圖片文件的內(nèi)容讀到字節(jié)數(shù)組中。

所謂圖片元數(shù)據(jù),就是除了我們?nèi)庋劭吹降膱D片內(nèi)容外,隱藏在這些內(nèi)容背后的一些技術(shù)數(shù)據(jù)。

本文介紹如何使用Java代碼將一張圖片的隱藏信息讀取出來。

首先不需要下載任何額外的Java庫(kù),用JDK自帶的庫(kù)就能工作。

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;

新建一個(gè)Java類,這個(gè)類的main方法也是非常直接的:

static public void main(String[] arg) throws IOException{

byte[] content = getContent("C:Usersi042416Desktop	estclipboard1.png");

readCustomData(content);

}

首先把桌面上名叫clipboard1.png的圖片文件的內(nèi)容讀到字節(jié)數(shù)組content中。

getContent方法的代碼:

一張png圖片的元數(shù)據(jù),散布在下面這些節(jié)點(diǎn)里:

printNode(pngmeta.getStandardChromaNode());

printNode(pngmeta.getStandardCompressionNode());

printNode(pngmeta.getStandardDataNode());

printNode(pngmeta.getStandardDimensionNode());

printNode(pngmeta.getStandardDocumentNode());

printNode(pngmeta.getStandardTextNode());

printNode(pngmeta.getStandardTransparencyNode());

通過printNode打印出來:

printNode方法的源代碼:

打印出來的元數(shù)據(jù):

如果大家想要復(fù)制粘貼,這是全部的源代碼:

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:Usersi042416Desktop	estclipboard1.png");

readCustomData(content);

}

}

要獲取更多Jerry的原創(chuàng)文章,請(qǐng)關(guān)注公眾號(hào)"汪子熙":

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/71897.html

相關(guān)文章

  • 場(chǎng)景化封裝,一站式使用,普惠AI集成 ——阿里云發(fā)布智能媒體管理產(chǎn)品

    摘要:摘要導(dǎo)語近日,阿里云發(fā)布了智能媒體管理服務(wù),通過離線處理能力關(guān)聯(lián)授權(quán)的云存儲(chǔ),提供便捷的海量多媒體數(shù)據(jù)一鍵分析,并通過該分析過程構(gòu)建價(jià)值元數(shù)據(jù),更好支撐內(nèi)容檢索。標(biāo)準(zhǔn)統(tǒng)一,訪問接口統(tǒng)一為阿里云的標(biāo)準(zhǔn)。場(chǎng)景化一鍵式處理,提高易用性。 摘要: 導(dǎo)語 近日,阿里云發(fā)布了智能媒體管理(Intelligent Media Management)服務(wù), 通過離線處理能力關(guān)聯(lián)授權(quán)的云存儲(chǔ),提供便捷的...

    big_cat 評(píng)論0 收藏0
  • 通用圖床服務(wù)架構(gòu)解析(百萬級(jí)回源/天)

    摘要:轉(zhuǎn)發(fā)通過,將請(qǐng)求通過負(fù)載均衡,均衡給后端處理的服務(wù)。圖床同時(shí)也支持同步上傳回調(diào)通知的方式,將圖片上傳結(jié)果反饋給業(yè)務(wù)方。 Hulk 圖床是支持 360 公司絕大部分業(yè)務(wù)的圖片服務(wù),支持多種圖片處理功能,如:裁剪、壓縮、濾鏡、pHash 計(jì)算、人臉識(shí)別、格式轉(zhuǎn)換、gif 首幀提取……等等,支持的業(yè)務(wù)線包括:搜索、圖搜、新聞、信息流、廣告……等等,每天 CDN 回源圖床后端 150+ 億 P...

    XFLY 評(píng)論0 收藏0
  • 通用圖床服務(wù)架構(gòu)解析(百萬級(jí)回源/天)

    摘要:轉(zhuǎn)發(fā)通過,將請(qǐng)求通過負(fù)載均衡,均衡給后端處理的服務(wù)。圖床同時(shí)也支持同步上傳回調(diào)通知的方式,將圖片上傳結(jié)果反饋給業(yè)務(wù)方。 Hulk 圖床是支持 360 公司絕大部分業(yè)務(wù)的圖片服務(wù),支持多種圖片處理功能,如:裁剪、壓縮、濾鏡、pHash 計(jì)算、人臉識(shí)別、格式轉(zhuǎn)換、gif 首幀提取……等等,支持的業(yè)務(wù)線包括:搜索、圖搜、新聞、信息流、廣告……等等,每天 CDN 回源圖床后端 150+ 億 P...

    Karrdy 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<