feat(image): 添加二维码圆形白色背景

- 创建比二维码大10像素的白色圆形背景
- 绘制白色圆形背景以突出显示二维码
- 裁剪二维码为圆形并绘制在白色背景上
This commit is contained in:
2025-11-07 21:47:30 +08:00
parent 48c8518ae6
commit 25c0e629c6

View File

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