NiceLeeのBlog 用爱发电 bilibili~

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

2020-06-17
nIceLee

阅读:


根据调试好的参数,以没有对话的GIF为模板,加上自定义对话,生成GIF

前言

  • 光是文字没啥具体指向,先把网上的一个成品贴出来:
  • 前面已经把工具基本都做好了(好吧,只是讲了简单的原理,复杂的功能实现其实就是拼积木)。
    接下来要开始正式动工了。以真香.gif为例,我们应该怎么做呢?
    • 获取素材(没有对话的GIF + 标准对话的GIF)
    • 分离有对话的GIF,观察各个jpg图像,弄清楚有几段对话,分别出现在第几帧到第几帧,比如:
      • 我就是饿死: 第0~8帧
      • 死外边,从这里跳下去: 第12~23帧
      • 不会吃你们一点东西: 第25~34帧
      • 真香: 第37~47帧
    • 对话的文字应当摆放到图像的哪个位置
      • 这里主要是Y坐标要微调,X坐标可以根据对话长度自动计算
    • 根据调试好的参数,以没有对话的GIF为模板,加上自定义对话,生成GIF

实现

根据调试好的参数,以没有对话的GIF为模板,加上自定义对话,生成GIF。

public static void main(String[] a) {
    zhenxiang("我就是饿死", "死外边,从这里跳下去", "不会吃你们一点东西", "真香");
}

/**
 * 给真香.gif 自定义对白
 * 
 * @param strs 4句对白
 */
public static void zhenxiang(String... strs) {
    if(strs.length < 4)
        return;
    Font font = new Font("", Font.BOLD, 12);
    Color color = Color.white;
    TextOption.setDefault(font, color);
    
    try {
        FileInputStream source = new FileInputStream("pics/真香/notext.gif");
        File dest = new File("pics/真香.gif");
        List<TextOption> options = new ArrayList<TextOption>();
        TextOption option1 = new TextOption(0, 8, strs[0], ImgUtil.offsetXCenter(298, strs[0], font), 165);
        TextOption option2 = new TextOption(12, 23, strs[1], ImgUtil.offsetXCenter(298, strs[1], font), 165);
        TextOption option3 = new TextOption(25, 34, strs[2], ImgUtil.offsetXCenter(298, strs[2], font), 165);
        TextOption option4 = new TextOption(37, 47, strs[3], ImgUtil.offsetXCenter(298, strs[3], font), 165);
        options.add(option1);
        options.add(option2);
        options.add(option3);
        options.add(option4);
        GifUtil.addText(source, dest, options, 10);
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    }
    
}

源码

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


内容
隐藏