根据调试好的参数,以没有对话的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();
}
}