From 25c0e629c68fec5d35edb0ae7556baeb8161a460 Mon Sep 17 00:00:00 2001 From: Jerry Yan <792602257@qq.com> Date: Fri, 7 Nov 2025 21:47:30 +0800 Subject: [PATCH] =?UTF-8?q?feat(image):=20=E6=B7=BB=E5=8A=A0=E4=BA=8C?= =?UTF-8?q?=E7=BB=B4=E7=A0=81=E5=9C=86=E5=BD=A2=E7=99=BD=E8=89=B2=E8=83=8C?= =?UTF-8?q?=E6=99=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 创建比二维码大10像素的白色圆形背景 - 绘制白色圆形背景以突出显示二维码 - 裁剪二维码为圆形并绘制在白色背景上 --- .../operator/NormalWatermarkOperator.java | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/ycwl/basic/image/watermark/operator/NormalWatermarkOperator.java b/src/main/java/com/ycwl/basic/image/watermark/operator/NormalWatermarkOperator.java index 9dea395e..9476e1d7 100644 --- a/src/main/java/com/ycwl/basic/image/watermark/operator/NormalWatermarkOperator.java +++ b/src/main/java/com/ycwl/basic/image/watermark/operator/NormalWatermarkOperator.java @@ -93,8 +93,20 @@ public class NormalWatermarkOperator implements IOperator { int offsetX = (newImage.getWidth() - newQrcodeWidth - QRCODE_OFFSET_X - Math.max(scenicLineWidth, datetimeLineWidth)) / 2; int offsetY = EXTRA_BORDER_PX + baseImage.getHeight() - OFFSET_Y - newQrcodeHeight; Shape originalClip = g2d.getClip(); - Ellipse2D circle = new Ellipse2D.Double(offsetX, offsetY + QRCODE_OFFSET_Y, newQrcodeWidth, newQrcodeHeight); - g2d.setClip(circle); + + // 创建比二维码大10像素的白色圆形背景 + int whiteCircleSize = Math.max(newQrcodeWidth, newQrcodeHeight) + 10; + int whiteCircleX = offsetX - (whiteCircleSize - newQrcodeWidth) / 2; + int whiteCircleY = offsetY + QRCODE_OFFSET_Y - (whiteCircleSize - newQrcodeHeight) / 2; + + // 绘制白色圆形背景 + g2d.setColor(Color.WHITE); + Ellipse2D whiteCircle = new Ellipse2D.Double(whiteCircleX, whiteCircleY, whiteCircleSize, whiteCircleSize); + g2d.fill(whiteCircle); + + // 用白色圆形尺寸裁切二维码(保持二维码原始尺寸,但用大圆裁切) + Ellipse2D qrcodeCircle = new Ellipse2D.Double(whiteCircleX, whiteCircleY, whiteCircleSize, whiteCircleSize); + g2d.setClip(qrcodeCircle); g2d.drawImage(qrcodeImage, offsetX, offsetY + QRCODE_OFFSET_Y, newQrcodeWidth, newQrcodeHeight, null); g2d.setClip(originalClip);