0xAA55 发表于 2014-12-4 10:45:32

这样的GIF是怎么制作出来的?

simakeng 发表于 2017-2-8 20:12:40

我的天0xAA55大大居然会问问题,那好吧我就口胡几句当是个回答吧
这种GTF中的图形不难看出是用字符构成,但是仔细看发现他是用字符构成色块的线条的,而且帧与帧之间没有很明显的闪烁,所以肯定不是一般的像素转字符那么简单
头脑风暴一番之后,个人感觉应该是这样:
1.首先把一段视频解码出来,做成帧序列。
2.对每一个帧序列进行 查找边缘 算法,求出边缘。
3.对每一个求出边缘的图形进行模糊匹配,计算出色块的变形和移动
4.根据前后帧计算每一个色块的颜色值
5.用查表大法算出每一个字符像素位点的线条方向和颜色
6.合成成一个文本序列
7.将每一帧的文本序列写成一个图片序列
8.图片序列转换GIF

大体说一下所用的软件吧
1:众多视频编辑软件都可以,亲测C4D 导入视频之后可以导出帧序列,但建议用PR或者AE之类的软件
2,3,4,5,6,7:这些恐怕得要自己编程了,但是难度不是很大,毕竟资料百度都能找到
8:同1,大多数视频编辑软件都可以

= =
以上内容如有谬误,则纯属口胡

hapro 发表于 2015-7-5 00:00:36

可能有两种做法:
1、人工敲的ASCII画面组成动画;
2、使用ascii animator之类的工具将原本的动画gif转成字符画面gif。such as http://www.pc6.com/softview/SoftView_57332.html

0xAA55 发表于 2017-2-8 20:57:05

simakeng 发表于 2017-2-8 20:12
我的天0xAA55大大居然会问问题,那好吧我就口胡几句当是个回答吧
这种GTF中的图形不难看出是用字符构成,但 ...

难点就是这个模糊匹配了,怎么匹配边缘,是个问题。
顺带。。我是想知道这个编程的算法原理,而非用什么软件能做。
谢谢解答

simakeng 发表于 2017-2-8 23:44:43

0xAA55 发表于 2017-2-8 20:57
难点就是这个模糊匹配了,怎么匹配边缘,是个问题。
顺带。。我是想知道这个编程的算法原理,而非用什么 ...

Git上应该有很多这样的算法,可惜英语渣= =
这里是一个sobel算子进行计算的算法原理:
http://baike.baidu.com/link?url=LJrVekDxuZko_5BNM3jzYA6GGlnw-kk3Y9WGwwPVwHhX91r-GEoC01zj-xSxex3Ju9gV1AMvjG2WlX6YQrKYoXoIgAI9RALAXd70fYPLK9fNFyqt--jsR_WnybKYXTPZ
这里是sobel算子算法的解析:
http://www.cnblogs.com/lancidie/archive/2011/07/17/2108885.html
这里有对这个算法的一些研究:
http://www.cnblogs.com/Imageshop/p/3171425.html

用OpenGL或者Dx的comput shader去计算效率会高很多,但是做这个GIF图纯C应该够用了

= =

simakeng 发表于 2017-2-8 23:45:51

0xAA55 发表于 2017-2-8 20:57
难点就是这个模糊匹配了,怎么匹配边缘,是个问题。
顺带。。我是想知道这个编程的算法原理,而非用什么 ...

从这个GIF上看,这是炮姐吧23333
动漫的边缘查找相对来说会简单很多
毕竟制作方式决定了这个

tx7790 发表于 2017-2-23 15:00:02

这效果有点叼啊

半懵半懂 发表于 2018-7-22 13:07:12

找到照片然后用gif生成器制作

besteast 发表于 2018-9-16 17:22:17

:lol:lol:lol:lol:lol:lol

Tao0Lu 发表于 2020-2-12 13:45:59

本帖最后由 套路 于 2020-2-12 14:14 编辑

这个叫字符画吧,普通的字符画差不多是这个样子吧

首先是这个字符,就和站长的Fill wool将方块显示像素一样 这里用字符(只有黑白所以只能取灰度)来显示像素
调色板(由灰度大到灰度小0(黑)→255(白))例如:@#&$%*o!;. 或者 叕叒双又三二一

先把图片每8*16(如果调色板是半角字符)或16*16(如果调色板是全角字符)获取灰度值 wiki上的算法
然后用调色板第[四舍五入的(灰度值*调色板字符个数/255)]个字符来替换这8*16或16*16的像素

如果要提高这个的清晰度,可以增加调色板字符的数目,把每8*16改成4*8、2*4等等

但你要是要是看这gif,不可能是这样算出来了的
1 上面的再修改 比如将边框的字符精处理了,比如_\/|这样的,在有连续像素值突然差别特别大的时候匹配上去
2 暴力方法 给每8*8这样的像素做个字典
页: [1]
查看完整版本: 这样的GIF是怎么制作出来的?