Uses 170K of libraries. Click here for Pure Java version (8071L/46K).
lib 1400572 // pngj import ar.com.hjg.pngj.*; import ar.com.hjg.pngj.chunks.*; svoid printPNGChunks(File pngFile) { PngReaderDumb png = new(pngFile); png.setIncludeIdat(true); png.readAll(); print(f2s(pngFile)); pnlMap("Chunk ", png.getChunks(), chunk -> chunk + ", crcval=" + bytesToHex(chunk.crcval)); } /** * Sample implementation of a very basic reader that only loads the empty chunks * (except the IHDR). The IDAT are optional. */ sclass PngReaderDumb { protected ChunkSeqReader chunkseq; protected final BufferedStreamFeeder streamFeeder; protected List<ChunkRaw> chunks = new ArrayList<ChunkRaw>(); protected boolean includeIdat = true; protected ImageInfo imgInfo; private boolean interlaced = false; public PngReaderDumb(InputStream inputStream) { streamFeeder = new BufferedStreamFeeder(inputStream); } public PngReaderDumb(File file) { this(PngHelperInternal.istreamFromFile(file)); } public void readAll() { chunkseq = createChunkSeqReader(); try { streamFeeder.feedAll(chunkseq); } finally { close(); } } protected ChunkSeqReader createChunkSeqReader() { ChunkSeqSkipping cs = new ChunkSeqSkipping(false) { // don't check CRC @Override protected void postProcessChunk(ChunkReader chunkR) { super.postProcessChunk(chunkR); if (!(chunkR.getChunkRaw().id.equals(ChunkHelper.IDAT) && !includeIdat)) chunks.add(chunkR.getChunkRaw()); } @Override protected void startNewChunk(int len, String id, long offset) { super.startNewChunk(len, id, offset); // } @Override protected boolean shouldSkipContent(int len, String id) { return !id.equals(ChunkHelper.IHDR); // we skip everything } }; return cs; } public ImageInfo getImageInfo() { if (imgInfo == null) { if (chunks.size() > 0) { PngChunkIHDR ihdr = new PngChunkIHDR(null); ihdr.parseFromRaw(chunks.get(0)); imgInfo = ihdr.createImageInfo(); interlaced = ihdr.isInterlaced(); } } return imgInfo; } public ChunkSeqReader getChunkseq() { return chunkseq; } public List<ChunkRaw> getChunks() { return chunks; } public void setIncludeIdat(boolean includeIdat) { this.includeIdat = includeIdat; } protected boolean shouldStoreChunkOnList(ChunkRaw raw) { return raw.id.equals("IDAT") && !includeIdat ? false : true; } public void setShouldCloseStream(boolean shouldCloseStream) { streamFeeder.setCloseStream(shouldCloseStream); } public void close() { if (chunkseq != null) chunkseq.close(); streamFeeder.close(); } public String toStringCompact() { return imgInfo.toStringBrief() + (interlaced ? "i" : ""); } }
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: | 135 / 211 |
Version history: | 4 change(s) |
Referenced in: | #1006654 - Standard functions list 2 (LIVE, continuation of #761) |