NiceLeeのBlog 用爱发电 bilibili~

Java 真香!如何给Gif添加对白(二)

2020-06-14
nIceLee

阅读:


如何对单帧图像进行处理。

前言

  • 光是文字没啥具体指向,先把网上的一个成品贴出来:
  • 要实现这个功能,得先搞清楚大致原理,其中最主要的实际上就是对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;
}

源码

https://github.com/ButterAndButterfly/Q-Gif


内容
隐藏