public static void reencode(String orig, FilterType filterType, int cLevel) { long t0 = System.currentTimeMillis(); String suffix = filterType.toString().replace("FILTER_", "").toLowerCase() + "_" + String.valueOf(cLevel); String dest = orig.replaceAll("\\.png$", "") + "_" + suffix + ".png"; PngReader pngr = FileHelper.createPngReader(new File(orig)); PngWriter pngw = FileHelper.createPngWriter(new File(dest), pngr.imgInfo, true); pngw.setFilterType(filterType); pngw.setCompLevel(cLevel); pngw.copyChunksFirst(pngr, ChunkCopyBehaviour.COPY_ALL); for (int row = 0; row < pngr.imgInfo.rows; row++) { ImageLine l1 = pngr.readRow(row); pngw.writeRow(l1, row); } pngr.end(); pngw.copyChunksLast(pngr, ChunkCopyBehaviour.COPY_ALL); pngw.end(); long t1 = System.currentTimeMillis(); long size0 = (new File(orig)).length(); long size1 = (new File(dest)).length(); double sizerel = (size1 * 1000.0) / size0; System.out.printf("%s\t%d\t%.2f\n", dest, (t1 - t0), sizerel); }
public static void tryAllFilters(String file, int clevel) { for (FilterType filter : FilterType.values()) { reencode(file, filter, clevel); } }