如何对单帧图像进行处理。
前言
- 光是文字没啥具体指向,先把网上的一个成品贴出来:
- 要实现这个功能,得先搞清楚大致原理,其中最主要的实际上就是对GIF这种格式的文件进行操作。
当然,在这里我们可以细分:- 从GIF里面读取每一帧的图像
- 对图像进行处理,比如缩放/拉伸、添加文字等等
- 有了若干图像帧,如何按照恒定帧率生成GIF
实现
- 这里讲如何对单帧图片进行处理
这里的图像专指BufferedImage
。
/**
* 裁剪图片
*
* @param img
* @param offsetX
* @param offsetY
* @param width
* @param height
* @return 裁剪后的图片
*/
public static BufferedImage cut(BufferedImage img, int offsetX, int offsetY, int width, int height) {
BufferedImage img0 = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
Graphics g = img0.getGraphics();
g.drawImage(img, 0, 0, width, height, offsetX, offsetY, offsetX + width, offsetY + height, null);
g.dispose();
return img0;
}
/**
* 缩放/拉伸图片
* @param img 待处理图片
* @param width
* @param height
* @return 处理后的图片
*/
public static BufferedImage resize(BufferedImage img, int width, int height) {
Image scaled = img.getScaledInstance(width , height, Image.SCALE_DEFAULT);
// 创建一个新的画布,在上面画裁剪后的图
BufferedImage img0 = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
Graphics g = img0.getGraphics();
g.drawImage(scaled, 0, 0,null);
g.dispose();
return img0;
}
/**
* 给图片添加文字(原图片会有改动)
* @param img
* @param text
* @param offsetX
* @param OffsetY
* @param font
* @param color
* @return 处理后的图片
*/
public static BufferedImage addText(BufferedImage img, String text, int offsetX, int OffsetY, Font font, Color color) {
Graphics g = img.getGraphics();
g.setFont(font);
g.setColor(color);
g.drawString(text, offsetX, OffsetY);
g.dispose();
return img;
}
/**
* 给图片添加文字(原图片会有改动)
* @param img
* @param text
* @param offsetX
* @param OffsetY
* @return 处理后的图片
*/
public static BufferedImage addText(BufferedImage img, String text, int offsetX, int OffsetY) {
Graphics g = img.getGraphics();
g.drawString(text, offsetX, OffsetY);
g.dispose();
return img;
}