newBing帮我写的图片处理代码

这边仅仅作为记录 还没去实现 等我实践再删了这篇重新写一篇随笔吧

当然可以。下面是两个简单的工具类,分别用于压缩图片和添加水印。

ImageCompressor类提供了一个compress方法,用于压缩JPEG图片的质量:

import javax.imageio.ImageIO;
import javax.imageio.ImageWriteParam;
import javax.imageio.ImageWriter;
import javax.imageio.stream.FileImageOutputStream;
import javax.imageio.stream.ImageOutputStream;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

public class ImageCompressor {
    /**
     * 压缩JPEG图片的质量
     *
     * @param imageFile 原始图片文件
     * @param compressedImageFile 压缩后的图片文件
     * @param quality 压缩质量(0.0 ~ 1.0)
     * @throws IOException
     */
    public static void compress(File imageFile, File compressedImageFile, float quality) throws IOException {
        // 读取原始图片
        BufferedImage image = ImageIO.read(imageFile);
        // 设置压缩质量
        ImageWriter writer = ImageIO.getImageWritersByFormatName("jpg").next();
        ImageWriteParam param = writer.getDefaultWriteParam();
        param.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
        param.setCompressionQuality(quality);
        // 将压缩后的图片写入文件
        try (ImageOutputStream output = new FileImageOutputStream(compressedImageFile)) {
            writer.setOutput(output);
            IIOImage iioImage = new IIOImage(image, null, null);
            writer.write(null, iioImage, param);
        }
        writer.dispose();
    }
}

Watermarker类提供了一个addWatermark方法,用于在图片上添加文本或图像水印:

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

public class Watermarker {
    /**
     * 在图片上添加文本水印
     *
     * @param imageFile 原始图片文件
     * @param watermarkedImageFile 添加水印后的图片文件
     * @param text 水印文本
     * @param font 水印字体
     * @param color 水印颜色
     * @param x 水印x坐标
     * @param y 水印y坐标
     * @throws IOException
     */
    public static void addWatermark(File imageFile, File watermarkedImageFile, String text, Font font, Color color, int x, int y) throws IOException {
        // 读取原始图片
        BufferedImage image = ImageIO.read(imageFile);
        // 获取图形上下文
        Graphics2D g = image.createGraphics();
        // 设置水印字体和颜色
        g.setFont(font);
        g.setColor(color);
        // 绘制水印
        g.drawString(text, x, y);
        g.dispose();
        // 将添加了水印的图片写入文件
        ImageIO.write(image, "jpg", watermarkedImageFile);
    }

    /**
     * 在图片上添加图像水印
     *
     * @param imageFile 原始图片文件
     * @param watermarkedImageFile 添加水印后的图片文件
     * @param watermarkFile 水印图片文件
     * @param x 水印x坐标
     * @param y 水印y坐标
     * @throws IOException
     */
    public static void addWatermark(File imageFile, File watermarkedImageFile, File watermarkFile, int x, int y) throws IOException {
        // 读取原始图片和水印图片
        BufferedImage image = ImageIO.read(imageFile);
        BufferedImage watermark = ImageIO.read(watermarkFile);
        // 获取图形上下文
        Graphics2D g = image.createGraphics();
        // 绘制水印
        g.drawImage(watermark, x, y, null);
        g.dispose();
        // 将添加了水印的图片写入文件
        ImageIO.write(image, "jpg", watermarkedImageFile);
    }
}

您可以根据需要使用这些工具类来压缩图片和添加水印。例如,下面是一个简单的示例,演示如何使用这些工具类来压缩图片并添加文本水印:

File imageFile = new File("image.jpg");
File compressedImageFile = new File("compressedImage.jpg");
File watermarkedImageFile = new File("watermarkedImage.jpg");

// 压缩图片
ImageCompressor.compress(imageFile, compressedImageFile, 0.5f);

// 添加文本水印
Font font = new Font("宋体", Font.BOLD, 30);
Color color = Color.RED;
int x = 10;
int y = 50;
Watermarker.addWatermark(compressedImageFile, watermarkedImageFile, "水印文字", font, color, x, y);

希望这对您有所帮助。如果您还有其他问题,请随时告诉我。

posted @ 2023-06-28 15:54  伊芙宁西普  阅读(66)  评论(0)    收藏  举报