You've already forked FrameTour-BE
加个普通水印、推送订单纠正、水印预览和下载
This commit is contained in:
@@ -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());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -9,6 +9,9 @@ import java.util.Date;
|
||||
@Data
|
||||
public class WatermarkInfo {
|
||||
private File originalFile;
|
||||
/**
|
||||
* 输出文件
|
||||
*/
|
||||
private File watermarkedFile;
|
||||
private File qrcodeFile;
|
||||
private String scenicLine;
|
||||
|
@@ -1,6 +1,10 @@
|
||||
package com.ycwl.basic.image.watermark.enums;
|
||||
|
||||
import lombok.Getter;
|
||||
|
||||
@Getter
|
||||
public enum ImageWatermarkOperatorEnum {
|
||||
WATERMARK("defW"),
|
||||
LEICA("leica"),
|
||||
NORMAL("normal");
|
||||
|
||||
|
@@ -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();
|
||||
}
|
||||
}
|
@@ -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;
|
||||
|
Reference in New Issue
Block a user