📄 pngreader.java
字号:
// Decompiled by Jad v1.5.7g. Copyright 2000 Pavel Kouznetsov.
// Jad home page: http://www.geocities.com/SiliconValley/Bridge/8617/jad.html
// Decompiler options: packimports(3) fieldsfirst ansi
// Source File Name: PNGReader.java
package jxl.biff.drawing;
import java.io.*;
import java.util.Arrays;
// Referenced classes of package jxl.biff.drawing:
// Chunk, ChunkType
public class PNGReader
{
private byte pngData[];
private Chunk ihdr;
private Chunk phys;
private int pixelWidth;
private int pixelHeight;
private int verticalResolution;
private int horizontalResolution;
private int resolutionUnit;
private static byte PNG_MAGIC_NUMBER[] = {
-119, 80, 78, 71, 13, 10, 26, 10
};
public PNGReader(byte data[])
{
pngData = data;
}
void read()
{
byte header[] = new byte[PNG_MAGIC_NUMBER.length];
System.arraycopy(pngData, 0, header, 0, header.length);
boolean pngFile = Arrays.equals(PNG_MAGIC_NUMBER, header);
if(!pngFile)
{
System.out.println("Not a png file");
return;
}
int length;
for(int pos = 8; pos < pngData.length; pos += length + 12)
{
length = getInt(pngData[pos], pngData[pos + 1], pngData[pos + 2], pngData[pos + 3]);
ChunkType chunkType = ChunkType.getChunkType(pngData[pos + 4], pngData[pos + 5], pngData[pos + 6], pngData[pos + 7]);
if(chunkType == ChunkType.IHDR)
{
ihdr = new Chunk(pos + 8, length, chunkType, pngData);
continue;
}
if(chunkType == ChunkType.PHYS)
phys = new Chunk(pos + 8, length, chunkType, pngData);
}
byte ihdrData[] = ihdr.getData();
pixelWidth = getInt(ihdrData[0], ihdrData[1], ihdrData[2], ihdrData[3]);
pixelHeight = getInt(ihdrData[4], ihdrData[5], ihdrData[6], ihdrData[7]);
if(phys != null)
{
byte physData[] = phys.getData();
resolutionUnit = physData[8];
horizontalResolution = getInt(physData[0], physData[1], physData[2], physData[3]);
verticalResolution = getInt(physData[4], physData[5], physData[6], physData[7]);
}
}
private int getInt(byte d1, byte d2, byte d3, byte d4)
{
int i1 = d1 & 0xff;
int i2 = d2 & 0xff;
int i3 = d3 & 0xff;
int i4 = d4 & 0xff;
int val = i1 << 24 | i2 << 16 | i3 << 8 | i4;
return val;
}
public int getHeight()
{
return pixelHeight;
}
public int getWidth()
{
return pixelWidth;
}
public int getHorizontalResolution()
{
return resolutionUnit != 1 ? 0 : horizontalResolution;
}
public int getVerticalResolution()
{
return resolutionUnit != 1 ? 0 : verticalResolution;
}
public static void main(String args[])
{
try
{
File f = new File(args[0]);
int size = (int)f.length();
System.out.println("File is " + args[0]);
byte data[] = new byte[size];
FileInputStream fis = new FileInputStream(f);
fis.read(data);
fis.close();
PNGReader reader = new PNGReader(data);
reader.read();
System.out.println("Height in pixels: " + reader.getHeight());
System.out.println("Width in pixels: " + reader.getWidth());
System.out.println("Horizontal res: " + reader.getHorizontalResolution());
System.out.println("Vertical res: " + reader.getVerticalResolution());
}
catch(Throwable t)
{
t.printStackTrace();
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -