java实现图片加水印

package com.example.demo;

import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;

import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileOutputStream;

@SpringBootTest
class DemoApplicationTests {

    @Test
    void contextLoads() {
        try {
            //读取网络图片
            // URL url = new URL("https://zyq2022.oss-cn-chengdu.aliyuncs.com/test.png");
            // BufferedImage image = ImageIO.read(url.openStream());
            // 读取图片文件(读取本地图片)
            File file = new File("E:\\opt\\IMG_8992.JPG");
            System.out.println("图片名称:" + file.getName());
            System.out.println("图片大小:" + file.length() / 2 + " kb");
            // 将文件对象转化为图片对象
            BufferedImage image = ImageIO.read(file);
            System.out.println("图片宽度:" + image.getWidth() + " px");
            System.out.println("图片高度:" + image.getHeight() + " px");
            // 创建画笔
            Graphics2D pen = image.createGraphics();
            // 设置画笔颜色为白色
            pen.setColor(Color.RED);
//        pen.setColor(new Color(179, 250, 233, 200));
            // 设置画笔字体样式为微软雅黑,斜体,文字大小为20px
            pen.setFont(new Font("微软雅黑", Font.ITALIC, 50));
            // 写上水印文字和坐标
            pen.drawString("出版社出版水印", 8, 950);
            // 创建新图片文件
            File files = new File("E:\\opt\\test2.jpg");
            // 将处理好的图片数据写入到新图片文件中
            FileOutputStream fos = new FileOutputStream(files);
            ImageIO.write(image, "jpg", fos);
        } catch (Exception e) {

        }
    }

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
你可以使用 Java 中的 `javax.imageio.ImageIO` 和 `java.awt.Graphics2D` 类来实现图片水印的功能,并将结果转换为 Base64 格式返回。以下是一个示例代码: ```java import javax.imageio.ImageIO; import java.awt.*; import java.awt.image.BufferedImage; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import java.util.Base64; public class WatermarkUtil { public static String addWatermark(InputStream imageStream, String watermarkText) throws IOException { // 读取输入流中的图片 BufferedImage image = ImageIO.read(imageStream); // 创建一个新的 BufferedImage,并使用原始图片的宽度、高度和类型 BufferedImage watermarkedImage = new BufferedImage( image.getWidth(), image.getHeight(), image.getType()); // 创建 Graphics2D 对象,用于在新图片上绘制水印 Graphics2D g2d = watermarkedImage.createGraphics(); // 在新图片上绘制原始图片 g2d.drawImage(image, 0, 0, null); // 设置水印的字体、大小和颜色 Font font = new Font("Arial", Font.BOLD, 36); g2d.setFont(font); g2d.setColor(Color.RED); // 计算水印文本的坐标,居中显示在图片上 FontMetrics fontMetrics = g2d.getFontMetrics(); int x = (image.getWidth() - fontMetrics.stringWidth(watermarkText)) / 2; int y = image.getHeight() / 2; // 绘制水印文本 g2d.drawString(watermarkText, x, y); // 释放资源 g2d.dispose(); // 将水印图片转换为 Base64 字符串 ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); ImageIO.write(watermarkedImage, "png", outputStream); byte[] imageBytes = outputStream.toByteArray(); String base64Image = Base64.getEncoder().encodeToString(imageBytes); return base64Image; } } ``` 你可以调用 `addWatermark` 方法,传入原始图片的输入流和水印文本,它将返回添水印后的图片的 Base64 字符串。 请注意,上述代码假设输入的图片格式为 PNG,并使用了默认的字体、大小、颜色等设置。你可以根据实际需求进行修改。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IT界的一只菜鸟

你的鼓励是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值