JAVA 通过URL生成水印图

Posted on   jiaoqing。  阅读(770)  评论(0编辑  收藏  举报
@Override
public OutputStream watermark1(String ossURL, String logoOsskey, HttpServletResponse response) {
lock.lock();
OutputStream os = null;
InputStream imageStream=null;
//水印
String logoPath = ossService.getOssURL(logoOsskey,bucket);
//原图ossURL
try {
os=response.getOutputStream();
imageStream = getImageStream(ossURL);
Image image2 = ImageIO.read(imageStream);

//获取原图信息
int width = image2.getWidth(null);
int height = image2.getHeight(null);

BufferedImage bufferedImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_BGR);
Graphics2D g = bufferedImage.createGraphics();
g.drawImage(image2, 0, 0, width, height, null);

// //设置多个图片水印
InputStream logo = getImageStream(logoPath);
Image imageLogo = ImageIO.read(logo);

int logoWidth = imageLogo.getWidth(null);
int logoHeight = imageLogo.getHeight(null);
//设置透明度,ALPHA为接口中自定义的值透明度 0.3F
g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP, ALPHA));

//完成图片旋转30
g.rotate(Math.toRadians(0), bufferedImage.getWidth() / 2, bufferedImage.getHeight() / 2);

int x = -width / 2;
int y = -height / 2;
while (x < width * 1.5) {
y = -height / 2;
while (y < height * 1.5) {

g.drawImage(imageLogo, x, y, null);
y += logoHeight + 200;
}
x += logoHeight + 300;
}
g.dispose();
Thumbnails.Builder thumbnail = Thumbnails.of(bufferedImage);
thumbnail.size(x,y);
ImageIO.write(thumbnail.asBufferedImage(),"png",os);
//JPEGImageEncoder en = JPEGCodec.createJPEGEncoder(os);
//en.encode(bufferedImage);
} catch (IOException e) {
e.printStackTrace();
} finally {
if (os != null) {
try {
os.flush();
os.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if(imageStream!=null){
try {
imageStream.close();
}catch (IOException e){
e.printStackTrace();
}
}
}
lock.unlock();
return os;
}
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· .NET Core 中如何实现缓存的预热?
· 三行代码完成国际化适配,妙~啊~
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?

随笔 - 287, 文章 - 0, 评论 - 3, 阅读 - 42万

Copyright © 2025 jiaoqing。
Powered by .NET 9.0 on Kubernetes

点击右上角即可分享
微信分享提示