Uses 170K of libraries. Click here for Pure Java version (8071L/46K).
1 | lib 1400572 // pngj |
2 | |
3 | import ar.com.hjg.pngj.*; |
4 | import ar.com.hjg.pngj.chunks.*; |
5 | |
6 | svoid printPNGChunks(File pngFile) {
|
7 | PngReaderDumb png = new(pngFile); |
8 | png.setIncludeIdat(true); |
9 | png.readAll(); |
10 | print(f2s(pngFile)); |
11 | pnlMap("Chunk ", png.getChunks(), chunk ->
|
12 | chunk + ", crcval=" + bytesToHex(chunk.crcval)); |
13 | } |
14 | |
15 | /** |
16 | * Sample implementation of a very basic reader that only loads the empty chunks |
17 | * (except the IHDR). The IDAT are optional. |
18 | */ |
19 | sclass PngReaderDumb {
|
20 | protected ChunkSeqReader chunkseq; |
21 | protected final BufferedStreamFeeder streamFeeder; |
22 | protected List<ChunkRaw> chunks = new ArrayList<ChunkRaw>(); |
23 | protected boolean includeIdat = true; |
24 | protected ImageInfo imgInfo; |
25 | private boolean interlaced = false; |
26 | |
27 | public PngReaderDumb(InputStream inputStream) {
|
28 | streamFeeder = new BufferedStreamFeeder(inputStream); |
29 | } |
30 | |
31 | public PngReaderDumb(File file) {
|
32 | this(PngHelperInternal.istreamFromFile(file)); |
33 | } |
34 | |
35 | public void readAll() {
|
36 | chunkseq = createChunkSeqReader(); |
37 | try {
|
38 | streamFeeder.feedAll(chunkseq); |
39 | } finally {
|
40 | close(); |
41 | } |
42 | } |
43 | |
44 | protected ChunkSeqReader createChunkSeqReader() {
|
45 | ChunkSeqSkipping cs = new ChunkSeqSkipping(false) { // don't check CRC
|
46 | @Override |
47 | protected void postProcessChunk(ChunkReader chunkR) {
|
48 | super.postProcessChunk(chunkR); |
49 | if (!(chunkR.getChunkRaw().id.equals(ChunkHelper.IDAT) && !includeIdat)) |
50 | chunks.add(chunkR.getChunkRaw()); |
51 | } |
52 | |
53 | @Override |
54 | protected void startNewChunk(int len, String id, long offset) {
|
55 | super.startNewChunk(len, id, offset); |
56 | // |
57 | } |
58 | |
59 | @Override |
60 | protected boolean shouldSkipContent(int len, String id) {
|
61 | return !id.equals(ChunkHelper.IHDR); // we skip everything |
62 | } |
63 | }; |
64 | return cs; |
65 | } |
66 | |
67 | public ImageInfo getImageInfo() {
|
68 | if (imgInfo == null) {
|
69 | if (chunks.size() > 0) {
|
70 | PngChunkIHDR ihdr = new PngChunkIHDR(null); |
71 | ihdr.parseFromRaw(chunks.get(0)); |
72 | imgInfo = ihdr.createImageInfo(); |
73 | interlaced = ihdr.isInterlaced(); |
74 | } |
75 | } |
76 | return imgInfo; |
77 | } |
78 | |
79 | public ChunkSeqReader getChunkseq() {
|
80 | return chunkseq; |
81 | } |
82 | |
83 | public List<ChunkRaw> getChunks() {
|
84 | return chunks; |
85 | } |
86 | |
87 | public void setIncludeIdat(boolean includeIdat) {
|
88 | this.includeIdat = includeIdat; |
89 | } |
90 | |
91 | protected boolean shouldStoreChunkOnList(ChunkRaw raw) {
|
92 | return raw.id.equals("IDAT") && !includeIdat ? false : true;
|
93 | } |
94 | |
95 | public void setShouldCloseStream(boolean shouldCloseStream) {
|
96 | streamFeeder.setCloseStream(shouldCloseStream); |
97 | } |
98 | |
99 | public void close() {
|
100 | if (chunkseq != null) |
101 | chunkseq.close(); |
102 | streamFeeder.close(); |
103 | } |
104 | |
105 | public String toStringCompact() {
|
106 | return imgInfo.toStringBrief() + (interlaced ? "i" : ""); |
107 | } |
108 | } |
download show line numbers debug dex old transpilations
Travelled to 3 computer(s): bhatertpkbcr, mowyntqkapby, mqqgnosmbjvj
No comments. add comment
| Snippet ID: | #1035064 |
| Snippet name: | printPNGChunks |
| Eternal ID of this version: | #1035064/5 |
| Text MD5: | 1f8bedadb745067043d9576e2bb16e68 |
| Transpilation MD5: | cbc89e825ac1f9591dc3eba9b1c75678 |
| Author: | stefan |
| Category: | javax / imaging |
| Type: | JavaX fragment (include) |
| Public (visible to everyone): | Yes |
| Archived (hidden from active list): | No |
| Created/modified: | 2022-03-28 15:01:43 |
| Source code size: | 2911 bytes / 108 lines |
| Pitched / IR pitched: | No / No |
| Views / Downloads: | 341 / 458 |
| Version history: | 4 change(s) |
| Referenced in: | [show references] |