From 0e647a5cbcffb5d109cee0e4fa183a02ff8d4bd0 Mon Sep 17 00:00:00 2001 From: liushaofeng Date: Mon, 13 Jul 2020 11:38:02 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=B7=B1=E5=BA=A6=E6=8B=B7?= =?UTF-8?q?=E8=B4=9D=E5=9B=BE=E7=89=87=E6=96=B9=E6=B3=95=EF=BC=8C=E7=AE=80?= =?UTF-8?q?=E5=8D=95=E4=BC=98=E5=8C=96=E6=80=A7=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../template/slider/SliderCaptchaTemplate.java | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/src/main/java/cloud/tianai/captcha/template/slider/SliderCaptchaTemplate.java b/src/main/java/cloud/tianai/captcha/template/slider/SliderCaptchaTemplate.java index 1253e97..4c61922 100644 --- a/src/main/java/cloud/tianai/captcha/template/slider/SliderCaptchaTemplate.java +++ b/src/main/java/cloud/tianai/captcha/template/slider/SliderCaptchaTemplate.java @@ -6,7 +6,9 @@ import javax.imageio.ImageIO; import java.awt.*; import java.awt.geom.Area; import java.awt.image.BufferedImage; +import java.awt.image.ColorModel; import java.awt.image.PixelGrabber; +import java.awt.image.WritableRaster; import java.io.ByteArrayOutputStream; import java.math.BigDecimal; import java.net.URL; @@ -149,7 +151,8 @@ public class SliderCaptchaTemplate { Map templateImages = getRandomTemplateImages(); BufferedImage cutBackground = warpFile2BufferedImage(resourceImage); - BufferedImage targetBackground = warpFile2BufferedImage(resourceImage); + // 拷贝一份图片 + BufferedImage targetBackground = deepCopyBufferedImage(cutBackground); BufferedImage fixedTemplate = warpFile2BufferedImage(getTemplateFile(templateImages, FIXED_IMAGE_NAME)); BufferedImage activeTemplate = warpFile2BufferedImage(getTemplateFile(templateImages, ACTIVE_IMAGE_NAME)); @@ -248,6 +251,19 @@ public class SliderCaptchaTemplate { return image; } + + /** + * 深度拷贝图片 + * @param bi 原图片 + * @return BufferedImage + */ + public static BufferedImage deepCopyBufferedImage(BufferedImage bi) { + ColorModel cm = bi.getColorModel(); + boolean isAlphaPremultiplied = cm.isAlphaPremultiplied(); + WritableRaster raster = bi.copyData(bi.getRaster().createCompatibleWritableRaster()); + return new BufferedImage(cm, raster, isAlphaPremultiplied, null); + } + /** * 将Image图像中的透明/不透明部分转换为Shape图形 *