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 ca4bc71..1c295f6 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 @@ -9,6 +9,7 @@ import javax.imageio.ImageWriteParam; import javax.imageio.ImageWriter; import javax.imageio.stream.ImageOutputStream; import java.awt.*; +import java.awt.geom.Ellipse2D; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; @@ -45,8 +46,9 @@ public class NormalWatermarkOperator implements IOperator { public static int EXTRA_BORDER_PX = 0; public static int OFFSET_Y = 90; public static Color BG_COLOR = Color.WHITE; - public static int QRCODE_SIZE = 100; + public static int QRCODE_SIZE = 150; public static int QRCODE_OFFSET_X = 10; + public static int QRCODE_OFFSET_Y = -20; public static int SCENIC_FONT_SIZE = 42; public static Color scenicColor = Color.white; @@ -82,7 +84,11 @@ public class NormalWatermarkOperator implements IOperator { int datetimeLineWidth = scenicFontMetrics.stringWidth(info.getDatetimeLine()); int offsetX = (newImage.getWidth() - newQrcodeWidth - QRCODE_OFFSET_X - Math.max(scenicLineWidth, datetimeLineWidth)) / 2; int offsetY = EXTRA_BORDER_PX + baseImage.getHeight() - OFFSET_Y - newQrcodeHeight; - g2d.drawImage(qrcodeImage, offsetX, offsetY, newQrcodeWidth, newQrcodeHeight, null); + Shape originalClip = g2d.getClip(); + Ellipse2D circle = new Ellipse2D.Double(offsetX, offsetY + QRCODE_OFFSET_Y, newQrcodeWidth, newQrcodeHeight); + g2d.setClip(circle); + g2d.drawImage(qrcodeImage, offsetX, offsetY + QRCODE_OFFSET_Y, newQrcodeWidth, newQrcodeHeight, null); + g2d.setClip(originalClip); g2d.setFont(scenicFont); g2d.setColor(scenicColor); g2d.drawString(info.getScenicLine(), offsetX + newQrcodeWidth + QRCODE_OFFSET_X, offsetY + scenicLineHeight + FONT_GLOBAL_OFFSET_PERCENT * scenicLineHeight);