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);