| | |
| | | import lombok.extern.slf4j.Slf4j; |
| | | |
| | | import javax.imageio.ImageIO; |
| | | import javax.imageio.ImageWriter; |
| | | import javax.imageio.stream.ImageOutputStream; |
| | | import javax.imageio.stream.MemoryCacheImageOutputStream; |
| | | import java.awt.Color; |
| | | import java.awt.Font; |
| | | import java.awt.FontMetrics; |
| | |
| | | import java.awt.RenderingHints; |
| | | import java.awt.image.BufferedImage; |
| | | import java.io.IOException; |
| | | import java.io.FilterOutputStream; |
| | | import java.util.List; |
| | | import java.util.Set; |
| | | import java.util.zip.ZipEntry; |
| | |
| | | public static void writeZipEntry(ZipOutputStream zip, QrLabelInfo label) throws IOException { |
| | | BufferedImage image = createQrLabel(label.getCode(), label.getFileName()); |
| | | zip.putNextEntry(new ZipEntry(label.getFileName() + ".png")); |
| | | ImageIO.write(image, "png", zip); |
| | | zip.closeEntry(); |
| | | try { |
| | | // ImageIO.write(OutputStream) 可能为每张图片创建磁盘缓存;大批量导出改用内存缓存。 |
| | | // 包装流的 close 仅 flush,不能关闭外层 ZIP。 |
| | | ImageWriter writer = ImageIO.getImageWritersByFormatName("png").next(); |
| | | try (ImageOutputStream imageOut = new MemoryCacheImageOutputStream(new FilterOutputStream(zip) { |
| | | @Override |
| | | public void close() throws IOException { |
| | | flush(); |
| | | } |
| | | })) { |
| | | writer.setOutput(imageOut); |
| | | writer.write(image); |
| | | } finally { |
| | | writer.dispose(); |
| | | } |
| | | } finally { |
| | | zip.closeEntry(); |
| | | } |
| | | } |
| | | |
| | | // ==================== 私有方法 ==================== |