PNG图像有自己特殊的格式,而这个格式可以通过十六进制字节流很清楚地看出。
有关PNG格式的讲解我是参考这位老师的:http://www.cnblogs.com/lidabo/p/3701197.html
将图片转为十六进制字节数组的代码是参考这位老师的:http://blog.csdn.net/evangel_z/article/details/7453402
为了能更直观地比较,我稍做了些改动。代码如下:
<span style="font-size:14px;">package png;
import java.io.FileInputStream;
/**
* 图片转成十六进制
*/
public class PngBytes {
public static void main(String[] args) throws Exception {
try {
FileInputStream fis = new FileInputStream("image/1.png");
java.io.ByteArrayOutputStream bos = new java.io.ByteArrayOutputStream();
byte[] buff = new byte[1024];
int len = 0;
while ((len = fis.read(buff)) != -1)
{
bos.write(buff, 0, len);
}
// 得到图片的字节数组
byte[] result = bos.toByteArray();
System.out.println("图片的字节数组:\n" + byte2HexStr(result));
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
/*
* 实现字节数组向十六进制的转换方法一
*/
public static String byte2HexStr(byte[] b)
{
System.out.print("b.length:"+b.length+"\n");
String hs = "";
String stmp = "";
for (int n = 0; n < b.length; n++)
{
stmp = (Integer.toHexString(b[n] & 0XFF));
if (stmp.length() == 1) {
hs = hs + "0" + stmp;
}else{
hs = hs + stmp;
}
hs+=' ';
if(n!=0 && (n+1)%16==0){
hs+='\n';
}
}
return hs.toUpperCase();
}
}
</span>
之前新建了一个8*8的PNG图像用来测试,其在Ultra Edit中打开的效果如下:
java项目的控制台效果如下:
啊这个排版看着好难受,我贴个图吧。
先这些,我的第一篇博客,希望大神们多多指正~