用javaweb代码实现从本地拿去两张图片,将一张图片重叠到另一张图片的右下角并生成新图片
时间: 2024-05-06 10:15:25 浏览: 10
以下是一个简单的 JavaWeb 代码示例,演示如何从本地获取两张图片,将其中一张图片重叠到另一张图片的右下角并生成新图片:
```java
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.*;
@WebServlet("/image-overlay")
public class ImageOverlayServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException {
try {
// 获取本地图片文件的路径
String image1Path = "path/to/image1.jpg";
String image2Path = "path/to/image2.jpg";
// 读取两张图片
BufferedImage image1 = ImageIO.read(new File(image1Path));
BufferedImage image2 = ImageIO.read(new File(image2Path));
// 获取图片的宽度和高度
int width1 = image1.getWidth();
int height1 = image1.getHeight();
int width2 = image2.getWidth();
int height2 = image2.getHeight();
// 创建一个新的 BufferedImage,宽度和高度为两张图片宽度和高度的最大值
int maxWidth = Math.max(width1, width2);
int maxHeight = Math.max(height1, height2);
BufferedImage combined = new BufferedImage(maxWidth, maxHeight, BufferedImage.TYPE_INT_RGB);
// 在新的 BufferedImage 上绘制两张图片
Graphics2D g = combined.createGraphics();
g.drawImage(image1, 0, 0, null);
g.drawImage(image2, maxWidth - width2, maxHeight - height2, null);
g.dispose();
// 将新的 BufferedImage 写入到输出流中
ImageIO.write(combined, "jpg", response.getOutputStream());
} catch (Exception e) {
e.printStackTrace();
}
}
}
```
在本例中,我们使用 `javax.imageio.ImageIO` 和 `java.awt.image.BufferedImage` 类来读取和操作图像。我们首先读取两张图片,然后获取它们的宽度和高度。接下来,我们创建一个新的 BufferedImage,宽度和高度为两张图片宽度和高度的最大值。然后,我们在新的 BufferedImage 上绘制两张图片,将第二张图片重叠到第一张图片的右下角。最后,我们将新的 BufferedImage 写入到输出流中,以便客户端可以下载或查看它。