图片可指定格式,可推荐格式,压缩
This commit is contained in:
parent
fd85b7ad77
commit
a8601548c6
@ -4,14 +4,16 @@ import lombok.Getter;
|
|||||||
|
|
||||||
@Getter
|
@Getter
|
||||||
public enum ImageWatermarkOperatorEnum {
|
public enum ImageWatermarkOperatorEnum {
|
||||||
WATERMARK("defW"),
|
WATERMARK("defW", "jpg"),
|
||||||
LEICA("leica"),
|
LEICA("leica", "png"),
|
||||||
NORMAL("normal");
|
NORMAL("normal", "png");
|
||||||
|
|
||||||
private final String type;
|
private final String type;
|
||||||
|
private final String preferFileType;
|
||||||
|
|
||||||
ImageWatermarkOperatorEnum(String type) {
|
ImageWatermarkOperatorEnum(String type, String preferFileType) {
|
||||||
this.type = type;
|
this.type = type;
|
||||||
|
this.preferFileType = preferFileType;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static ImageWatermarkOperatorEnum getByCode(String type) {
|
public static ImageWatermarkOperatorEnum getByCode(String type) {
|
||||||
|
@ -5,6 +5,9 @@ import com.ycwl.basic.image.watermark.exception.ImageWatermarkException;
|
|||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
|
||||||
import javax.imageio.ImageIO;
|
import javax.imageio.ImageIO;
|
||||||
|
import javax.imageio.ImageWriteParam;
|
||||||
|
import javax.imageio.ImageWriter;
|
||||||
|
import javax.imageio.stream.ImageOutputStream;
|
||||||
import java.awt.*;
|
import java.awt.*;
|
||||||
import java.awt.image.BufferedImage;
|
import java.awt.image.BufferedImage;
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
@ -34,12 +37,39 @@ public class DefaultImageWatermarkOperator implements IOperator {
|
|||||||
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
|
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
|
||||||
g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP, 0.5f));
|
g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP, 0.5f));
|
||||||
g2d.drawImage(watermarkImage, 0, 0, baseImage.getWidth(), baseImage.getHeight(), null);
|
g2d.drawImage(watermarkImage, 0, 0, baseImage.getWidth(), baseImage.getHeight(), null);
|
||||||
|
String fileName = info.getWatermarkedFile().getName();
|
||||||
|
String formatName = "jpg"; // 默认格式为 jpg
|
||||||
|
if (fileName.endsWith(".png")) {
|
||||||
|
formatName = "png";
|
||||||
|
} else if (fileName.endsWith(".jpg") || fileName.endsWith(".jpeg")) {
|
||||||
|
formatName = "jpg";
|
||||||
|
}
|
||||||
|
ImageWriter writer = ImageIO.getImageWritersByFormatName(formatName).next();
|
||||||
|
ImageOutputStream ios;
|
||||||
try {
|
try {
|
||||||
ImageIO.write(newImage, "jpg", info.getWatermarkedFile());
|
ios = ImageIO.createImageOutputStream(info.getWatermarkedFile());
|
||||||
|
} catch (IOException e) {
|
||||||
|
throw new ImageWatermarkException("图片保存失败,目标文件无法写入");
|
||||||
|
}
|
||||||
|
writer.setOutput(ios);
|
||||||
|
try {
|
||||||
|
// 使用 ImageWriter 设置写入质量
|
||||||
|
ImageWriteParam writeParam = writer.getDefaultWriteParam();
|
||||||
|
if (writeParam.canWriteCompressed()) {
|
||||||
|
writeParam.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
|
||||||
|
writeParam.setCompressionQuality(0.8f); // 设置写入质量为 80%
|
||||||
|
}
|
||||||
|
writer.write(null, new javax.imageio.IIOImage(newImage, null, null), writeParam);
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
throw new ImageWatermarkException("图片保存失败");
|
throw new ImageWatermarkException("图片保存失败");
|
||||||
} finally {
|
}
|
||||||
|
finally {
|
||||||
g2d.dispose();
|
g2d.dispose();
|
||||||
|
try {
|
||||||
|
ios.close();
|
||||||
|
} catch (IOException ignore) {
|
||||||
|
}
|
||||||
|
writer.dispose();
|
||||||
}
|
}
|
||||||
return info.getWatermarkedFile();
|
return info.getWatermarkedFile();
|
||||||
}
|
}
|
||||||
|
@ -5,6 +5,9 @@ import com.ycwl.basic.image.watermark.exception.ImageWatermarkException;
|
|||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
|
||||||
import javax.imageio.ImageIO;
|
import javax.imageio.ImageIO;
|
||||||
|
import javax.imageio.ImageWriteParam;
|
||||||
|
import javax.imageio.ImageWriter;
|
||||||
|
import javax.imageio.stream.ImageOutputStream;
|
||||||
import java.awt.*;
|
import java.awt.*;
|
||||||
import java.awt.image.BufferedImage;
|
import java.awt.image.BufferedImage;
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
@ -110,12 +113,39 @@ public class LeicaWatermarkOperator implements IOperator {
|
|||||||
g2d.setFont(datetimeFont);
|
g2d.setFont(datetimeFont);
|
||||||
g2d.setColor(datetimeColor);
|
g2d.setColor(datetimeColor);
|
||||||
g2d.drawString(info.getDatetimeLine(), newImage.getWidth() + EXTRA_BORDER_PX - OFFSET_X - Math.max(scenicLineWidth, datetimeLineWidth), EXTRA_BORDER_PX + baseImage.getHeight() + + OFFSET_Y + scenicLineHeight + dtLineHeight + dtLineHeight * FONT_GLOBAL_OFFSET_PERCENT);
|
g2d.drawString(info.getDatetimeLine(), newImage.getWidth() + EXTRA_BORDER_PX - OFFSET_X - Math.max(scenicLineWidth, datetimeLineWidth), EXTRA_BORDER_PX + baseImage.getHeight() + + OFFSET_Y + scenicLineHeight + dtLineHeight + dtLineHeight * FONT_GLOBAL_OFFSET_PERCENT);
|
||||||
|
String fileName = info.getWatermarkedFile().getName();
|
||||||
|
String formatName = "jpg"; // 默认格式为 jpg
|
||||||
|
if (fileName.endsWith(".png")) {
|
||||||
|
formatName = "png";
|
||||||
|
} else if (fileName.endsWith(".jpg") || fileName.endsWith(".jpeg")) {
|
||||||
|
formatName = "jpg";
|
||||||
|
}
|
||||||
|
ImageWriter writer = ImageIO.getImageWritersByFormatName(formatName).next();
|
||||||
|
ImageOutputStream ios;
|
||||||
try {
|
try {
|
||||||
ImageIO.write(newImage, "png", info.getWatermarkedFile());
|
ios = ImageIO.createImageOutputStream(info.getWatermarkedFile());
|
||||||
|
} catch (IOException e) {
|
||||||
|
throw new ImageWatermarkException("图片保存失败,目标文件无法写入");
|
||||||
|
}
|
||||||
|
writer.setOutput(ios);
|
||||||
|
try {
|
||||||
|
// 使用 ImageWriter 设置写入质量
|
||||||
|
ImageWriteParam writeParam = writer.getDefaultWriteParam();
|
||||||
|
if (writeParam.canWriteCompressed()) {
|
||||||
|
writeParam.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
|
||||||
|
writeParam.setCompressionQuality(0.95f); // 设置写入质量为 95%
|
||||||
|
}
|
||||||
|
writer.write(null, new javax.imageio.IIOImage(newImage, null, null), writeParam);
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
throw new ImageWatermarkException("图片保存失败");
|
throw new ImageWatermarkException("图片保存失败");
|
||||||
} finally {
|
}
|
||||||
|
finally {
|
||||||
g2d.dispose();
|
g2d.dispose();
|
||||||
|
try {
|
||||||
|
ios.close();
|
||||||
|
} catch (IOException ignore) {
|
||||||
|
}
|
||||||
|
writer.dispose();
|
||||||
}
|
}
|
||||||
return info.getWatermarkedFile();
|
return info.getWatermarkedFile();
|
||||||
}
|
}
|
||||||
|
@ -5,6 +5,9 @@ import com.ycwl.basic.image.watermark.exception.ImageWatermarkException;
|
|||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
|
||||||
import javax.imageio.ImageIO;
|
import javax.imageio.ImageIO;
|
||||||
|
import javax.imageio.ImageWriteParam;
|
||||||
|
import javax.imageio.ImageWriter;
|
||||||
|
import javax.imageio.stream.ImageOutputStream;
|
||||||
import java.awt.*;
|
import java.awt.*;
|
||||||
import java.awt.image.BufferedImage;
|
import java.awt.image.BufferedImage;
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
@ -86,12 +89,39 @@ public class NormalWatermarkOperator implements IOperator {
|
|||||||
g2d.setFont(datetimeFont);
|
g2d.setFont(datetimeFont);
|
||||||
g2d.setColor(datetimeColor);
|
g2d.setColor(datetimeColor);
|
||||||
g2d.drawString(info.getDatetimeLine(), offsetX + newQrcodeWidth + QRCODE_OFFSET_X, offsetY + scenicLineHeight + dtLineHeight + FONT_GLOBAL_OFFSET_PERCENT * dtLineHeight);
|
g2d.drawString(info.getDatetimeLine(), offsetX + newQrcodeWidth + QRCODE_OFFSET_X, offsetY + scenicLineHeight + dtLineHeight + FONT_GLOBAL_OFFSET_PERCENT * dtLineHeight);
|
||||||
|
String fileName = info.getWatermarkedFile().getName();
|
||||||
|
String formatName = "jpg"; // 默认格式为 jpg
|
||||||
|
if (fileName.endsWith(".png")) {
|
||||||
|
formatName = "png";
|
||||||
|
} else if (fileName.endsWith(".jpg") || fileName.endsWith(".jpeg")) {
|
||||||
|
formatName = "jpg";
|
||||||
|
}
|
||||||
|
ImageWriter writer = ImageIO.getImageWritersByFormatName(formatName).next();
|
||||||
|
ImageOutputStream ios;
|
||||||
try {
|
try {
|
||||||
ImageIO.write(newImage, "png", info.getWatermarkedFile());
|
ios = ImageIO.createImageOutputStream(info.getWatermarkedFile());
|
||||||
|
} catch (IOException e) {
|
||||||
|
throw new ImageWatermarkException("图片保存失败,目标文件无法写入");
|
||||||
|
}
|
||||||
|
writer.setOutput(ios);
|
||||||
|
try {
|
||||||
|
// 使用 ImageWriter 设置写入质量
|
||||||
|
ImageWriteParam writeParam = writer.getDefaultWriteParam();
|
||||||
|
if (writeParam.canWriteCompressed()) {
|
||||||
|
writeParam.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
|
||||||
|
writeParam.setCompressionQuality(0.95f); // 设置写入质量为 95%
|
||||||
|
}
|
||||||
|
writer.write(null, new javax.imageio.IIOImage(newImage, null, null), writeParam);
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
throw new ImageWatermarkException("图片保存失败");
|
throw new ImageWatermarkException("图片保存失败");
|
||||||
} finally {
|
}
|
||||||
|
finally {
|
||||||
g2d.dispose();
|
g2d.dispose();
|
||||||
|
try {
|
||||||
|
ios.close();
|
||||||
|
} catch (IOException ignore) {
|
||||||
|
}
|
||||||
|
writer.dispose();
|
||||||
}
|
}
|
||||||
return info.getWatermarkedFile();
|
return info.getWatermarkedFile();
|
||||||
}
|
}
|
||||||
|
@ -505,7 +505,7 @@ public class GoodsServiceImpl implements GoodsService {
|
|||||||
} else {
|
} else {
|
||||||
// 生成
|
// 生成
|
||||||
File dstFile = new File(item.getGoodsId() + ".jpg");
|
File dstFile = new File(item.getGoodsId() + ".jpg");
|
||||||
File watermarkedFile = new File(item.getGoodsId() + "_" + ImageWatermarkOperatorEnum.WATERMARK.getType() + ".png");
|
File watermarkedFile = new File(item.getGoodsId() + "_" + ImageWatermarkOperatorEnum.WATERMARK.getType() + "." + ImageWatermarkOperatorEnum.WATERMARK.getPreferFileType());
|
||||||
try {
|
try {
|
||||||
HttpUtil.downloadFile(item.getUrl().replace("oss.zhentuai.com", "frametour-assets.oss-cn-shanghai-internal.aliyuncs.com"), dstFile);
|
HttpUtil.downloadFile(item.getUrl().replace("oss.zhentuai.com", "frametour-assets.oss-cn-shanghai-internal.aliyuncs.com"), dstFile);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
@ -613,7 +613,7 @@ public class GoodsServiceImpl implements GoodsService {
|
|||||||
} else {
|
} else {
|
||||||
// 生成
|
// 生成
|
||||||
File dstFile = new File(item.getGoodsId() + ".jpg");
|
File dstFile = new File(item.getGoodsId() + ".jpg");
|
||||||
File watermarkedFile = new File(item.getGoodsId() + "_" + type.getType() + ".png");
|
File watermarkedFile = new File(item.getGoodsId() + "_" + type.getType() + "." + type.getPreferFileType());
|
||||||
try {
|
try {
|
||||||
HttpUtil.downloadFile(item.getUrl().replace("oss.zhentuai.com", "frametour-assets.oss-cn-shanghai-internal.aliyuncs.com"), dstFile);
|
HttpUtil.downloadFile(item.getUrl().replace("oss.zhentuai.com", "frametour-assets.oss-cn-shanghai-internal.aliyuncs.com"), dstFile);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user