From 583b19a42090d32d5e2732a12d7c7d3be3508389 Mon Sep 17 00:00:00 2001 From: jueyue Date: Sat, 30 Nov 2019 19:56:55 +0800 Subject: [PATCH] fixed png red color --- .../afterturn/easypoi/cache/ImageCache.java | 63 +++++++++++++++---- .../html/css/impl/AlignCssConvertImpl.java | 6 +- 2 files changed, 54 insertions(+), 15 deletions(-) diff --git a/easypoi-base/src/main/java/cn/afterturn/easypoi/cache/ImageCache.java b/easypoi-base/src/main/java/cn/afterturn/easypoi/cache/ImageCache.java index 82215d7..6fec9cc 100644 --- a/easypoi-base/src/main/java/cn/afterturn/easypoi/cache/ImageCache.java +++ b/easypoi-base/src/main/java/cn/afterturn/easypoi/cache/ImageCache.java @@ -15,23 +15,23 @@ */ package cn.afterturn.easypoi.cache; -import java.awt.image.BufferedImage; -import java.io.ByteArrayOutputStream; -import java.io.InputStream; - -import javax.imageio.ImageIO; - -import org.apache.poi.util.IOUtils; - import cn.afterturn.easypoi.cache.manager.POICacheManager; +import org.apache.poi.util.IOUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import javax.imageio.ImageIO; +import javax.swing.*; +import java.awt.*; +import java.awt.image.BufferedImage; +import java.io.ByteArrayOutputStream; +import java.io.InputStream; + /** * 图片缓存处理 * * @author JueYue - * 2016年1月8日 下午4:16:32 + * 2016年1月8日 下午4:16:32 */ public class ImageCache { @@ -39,10 +39,16 @@ public class ImageCache { .getLogger(ImageCache.class); public static byte[] getImage(String imagePath) { - InputStream is = POICacheManager.getFile(imagePath); - ByteArrayOutputStream byteArrayOut = new ByteArrayOutputStream(); + InputStream is = POICacheManager.getFile(imagePath); + ByteArrayOutputStream byteArrayOut = new ByteArrayOutputStream(); + final ByteArrayOutputStream swapStream = new ByteArrayOutputStream(); try { - BufferedImage bufferImg = ImageIO.read(is); + int ch; + while ((ch = is.read()) != -1) { + swapStream.write(ch); + } + Image image = Toolkit.getDefaultToolkit().createImage(swapStream.toByteArray()); + BufferedImage bufferImg = toBufferedImage(image); ImageIO.write(bufferImg, imagePath.substring(imagePath.lastIndexOf(".") + 1, imagePath.length()), byteArrayOut); @@ -52,9 +58,42 @@ public class ImageCache { return null; } finally { IOUtils.closeQuietly(is); + IOUtils.closeQuietly(swapStream); IOUtils.closeQuietly(byteArrayOut); } } + + public static BufferedImage toBufferedImage(Image image) { + if (image instanceof BufferedImage) { + return (BufferedImage) image; + } + // This code ensures that all the pixels in the image are loaded + image = new ImageIcon(image).getImage(); + BufferedImage bimage = null; + GraphicsEnvironment ge = GraphicsEnvironment + .getLocalGraphicsEnvironment(); + try { + int transparency = Transparency.OPAQUE; + GraphicsDevice gs = ge.getDefaultScreenDevice(); + GraphicsConfiguration gc = gs.getDefaultConfiguration(); + bimage = gc.createCompatibleImage(image.getWidth(null), + image.getHeight(null), transparency); + } catch (HeadlessException e) { + // The system does not have a screen + } + if (bimage == null) { + // Create a buffered image using the default color model + int type = BufferedImage.TYPE_INT_RGB; + bimage = new BufferedImage(image.getWidth(null), + image.getHeight(null), type); + } + // Copy image to buffered image + Graphics g = bimage.createGraphics(); + // Paint the image onto the buffered image + g.drawImage(image, 0, 0, null); + g.dispose(); + return bimage; + } } diff --git a/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/html/css/impl/AlignCssConvertImpl.java b/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/html/css/impl/AlignCssConvertImpl.java index c4b9134..8886f78 100644 --- a/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/html/css/impl/AlignCssConvertImpl.java +++ b/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/html/css/impl/AlignCssConvertImpl.java @@ -33,11 +33,11 @@ public class AlignCssConvertImpl implements ICssConvertToExcel, ICssConvertToHtm // vertical align if (HtmlCssConstant.TOP.equals(style.getVetical())) { cellStyle.setVerticalAlignment(VerticalAlignment.TOP); - } else if (HtmlCssConstant.CENTER.equals(style.getAlign())) { + } else if (HtmlCssConstant.CENTER.equals(style.getVetical())) { cellStyle.setVerticalAlignment(VerticalAlignment.CENTER); - } else if (HtmlCssConstant.BOTTOM.equals(style.getAlign())) { + } else if (HtmlCssConstant.BOTTOM.equals(style.getVetical())) { cellStyle.setVerticalAlignment(VerticalAlignment.BOTTOM); - } else if (HtmlCssConstant.JUSTIFY.equals(style.getAlign())) { + } else if (HtmlCssConstant.JUSTIFY.equals(style.getVetical())) { cellStyle.setVerticalAlignment(VerticalAlignment.JUSTIFY); } }