加个普通水印、推送订单纠正、水印预览和下载

This commit is contained in:
2025-03-18 18:23:18 +08:00
parent 46f6532164
commit 26dc53ca6a
20 changed files with 408 additions and 188 deletions

View File

@@ -3,6 +3,7 @@ package com.ycwl.basic.image.watermark;
import com.ycwl.basic.image.watermark.enums.ImageWatermarkOperatorEnum;
import com.ycwl.basic.image.watermark.exception.ImageWatermarkUnsupportedException;
import com.ycwl.basic.image.watermark.operator.IOperator;
import com.ycwl.basic.image.watermark.operator.DefaultImageWatermarkOperator;
import com.ycwl.basic.image.watermark.operator.LeicaWatermarkOperator;
import com.ycwl.basic.image.watermark.operator.NormalWatermarkOperator;
@@ -12,13 +13,18 @@ public class ImageWatermarkFactory {
if (type == null) {
throw new ImageWatermarkUnsupportedException(watermarkType);
}
return get(type);
}
public static IOperator get(ImageWatermarkOperatorEnum type) {
switch (type) {
case WATERMARK:
return new DefaultImageWatermarkOperator();
case NORMAL:
return new NormalWatermarkOperator();
case LEICA:
return new LeicaWatermarkOperator();
default:
throw new ImageWatermarkUnsupportedException(watermarkType);
throw new ImageWatermarkUnsupportedException("不支持的类型"+type.name());
}
}
}

View File

@@ -9,6 +9,9 @@ import java.util.Date;
@Data
public class WatermarkInfo {
private File originalFile;
/**
* 输出文件
*/
private File watermarkedFile;
private File qrcodeFile;
private String scenicLine;

View File

@@ -1,6 +1,10 @@
package com.ycwl.basic.image.watermark.enums;
import lombok.Getter;
@Getter
public enum ImageWatermarkOperatorEnum {
WATERMARK("defW"),
LEICA("leica"),
NORMAL("normal");

View File

@@ -0,0 +1,46 @@
package com.ycwl.basic.image.watermark.operator;
import com.ycwl.basic.image.watermark.entity.WatermarkInfo;
import com.ycwl.basic.image.watermark.exception.ImageWatermarkException;
import lombok.extern.slf4j.Slf4j;
import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
@Slf4j
public class DefaultImageWatermarkOperator implements IOperator {
@Override
public File process(WatermarkInfo info) throws ImageWatermarkException {
BufferedImage baseImage;
BufferedImage watermarkImage;
InputStream logoInputStream = getClass().getResourceAsStream("/watermark.png");
if (logoInputStream == null) {
throw new ImageWatermarkException("无法找到 watermark.png 资源文件");
}
try {
baseImage = ImageIO.read(info.getOriginalFile());
watermarkImage = ImageIO.read(logoInputStream);
} catch (IOException e) {
throw new ImageWatermarkException("图片打开失败");
}
// 新图像画布
BufferedImage newImage = new BufferedImage(baseImage.getWidth(), baseImage.getHeight(), BufferedImage.TYPE_INT_RGB);
Graphics2D g2d = newImage.createGraphics();
g2d.drawImage(baseImage, 0, 0, null);
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP, 0.5f));
g2d.drawImage(watermarkImage, 0, 0, baseImage.getWidth(), baseImage.getHeight(), null);
try {
ImageIO.write(newImage, "jpg", info.getWatermarkedFile());
} catch (IOException e) {
throw new ImageWatermarkException("图片保存失败");
} finally {
g2d.dispose();
}
return info.getWatermarkedFile();
}
}

View File

@@ -46,7 +46,7 @@ public class LeicaWatermarkOperator implements IOperator {
public static int EXTRA_BORDER_PX = 0;
public static Color BG_COLOR = Color.WHITE;
public static int LOGO_SIZE = 50;
public static int LOGO_EXTRA_BORDER = 10;
public static int LOGO_EXTRA_BORDER = 20;
public static int LOGO_FONT_SIZE = 38;
public static Color logoTextColor = new Color(0x33, 0x33, 0x33);
public static int QRCODE_SIZE = 80;