TCAX 字幕特效制作工具官方论坛 | ASS | TCAS | Python | Aegisub | Lua

标题: 有些疑惑关于像素字的透明度,希望各位大大伸出●手~ [打印本页]

作者: yyxxlc    时间: 2013-6-15 23:11:46     标题: 有些疑惑关于像素字的透明度,希望各位大大伸出●手~

本帖最后由 yyxxlc 于 2013-6-16 13:00 编辑

       color = MakeRGB(255, 0, 0)              # 字体颜色
    _Font = InitFont(fontFileName, faceID, _Fs, spacing, spaceScale, color, bord, isOutline)
......
    PIX = TextPix(_Font, _txt)  
......
     pixA = PIX[2][idx + 3]                        # 当前像素的透明度
            if pixA != 0:      
                ass_main(ASS_BUF, SubL(_start, _end, 0, Pix_Style), pos(posX, posY) + color1(FmtRGB(pixR, pixG, pixB)) + alpha1(255 - pixA), PixPt())         

问题1:我有些疑惑,像素字的颜色应该都是取前面定义Font里的color = MakeRGB(XX, XX, XX)的颜色吧,但是Font里面没有对透明度说明过的呀 那pixA = PIX[2][idx + 3]  是怎么知道透明度的。我尝试过去掉ass_main里的color1(FmtRGB(pixR, pixG, pixB))   只保留alpha1的话,字还是在的,如果改变255-PixA的成160-PixA的话 字的不透明度会增加。那应该是说明了设置透明度是存在的,但我不知道脚本里哪里说明了?还是它可以自动识别balabala?

-----------------------------------------------------------------------------------------------------------
问题2:像素字就是把字变成用一个一个像素堆起来的图片吧,那我们在assdraw里画出的矢量图 那一串儿代码放在脚本里 可以算像素字的一种吗?如果是的话,milk大的asura脚本和sai大030脚本,都用了outline = TextOutlineDraw(Font, _txt, dx, dy)  应该是把字变成矢量图代码的函数吧,在    ass_main(ASS_BUF, SubL(t2, t2 + 100, 11, Pix_Style), pos(0, 0) + fad(0, 900) + alpha1(0) + alpha3(HexToDec('77')) + blur(5) + bord(5) + t(bord(0)), '{\\p7}' + outline + '{\\p0}')          里 pos、fad、alpha1、alpha3、blur、bord都是起了作用的,

但是如果把blur(5) + bord(5) 复制到 奶大放出的那个像素字基础脚本里(就是最上面的那个) 边框效果根本就没有。那是说这个不是像素字么,那又为什么SubL里用的是Pix_Style?   

其实我还好奇怪,为什么使用了pos(0, 0) 字不会挤成一团的问题?

最后 alpha3(HexToDec('77')) 和alpha3(119)是一样的吗?




作者: milkyjing    时间: 2013-6-16 01:37:48

关于第一个问题, 解释起来可能有点复杂,

可以通过如下实验帮忙理解, 将 alpha1(255 - pixA) 改成alpha1(0), 看看效果会是咋样.

结果会是, 文字看起来很不平滑 (有锯齿), 这是很显然的, 因为像素点不可能无限的小, 可以把像素点看成是一个小的正方形.

因此边缘部分注定不平滑, 如何使其 "看起来更平滑" 呢, 这里就用到了一种 "抗锯齿"技术 --> Anti-Aliasing, 或者称为 过采样技术

Super-Sampling

具体如何可以Google一下.

两张效果图

images.jpg

anti-allias-1.gif

因此一个文字上的点不全部都是一种灰度的, 边缘某些点可能淡一些. 将该灰度作为透明度通道,
就可以为Anti-Aliasing处理过的文字, 染上任何颜色了.

关于具体应用, PIX[2][idx + 3] 中保存的就是 透明度信息.

至于为什么使用 "255 - "  实际上是由于一般图形图像处理中, 使用的都是不透明度, 0表示透明, 255表示不透明, ASS中的刚好相反 (使用的是透明度).


-----------------------------------------------

问题2:像素字就是把字变成用一个一个像素堆起来的图片吧,那我们在assdraw里画出的矢量图 那一串儿代码放在脚本里 可以算像素字的一种吗?

对于前面半句, 可以这么理解, 但是后面半句是不合适的, 你都说了是矢量图了... 怎么又认为是像素图(位图)呢...  像素字其实没有特别定义, 通常可以理解成 "点凑字", 或者 "位图文字" (已区别ASS内部实现的矢量文字). 其构成要素可以简单到一个像素点, 或者是接近像素点级别的其他图元(广义上理解) (这句话也许我说的不明白, 举个粒子, 你可以把点换成是一个矢量图, 不过这个矢量图缩的很小, 然后由大量的矢量图拼凑成一个字--->也可以理解为广义上的一种 "像素字")

outline = TextOutlineDraw(Font, _txt, dx, dy)  应该是把字变成矢量图代码的函数吧

是的, ASS中, 直接写一个文字, 和给一个绘图代码 (最终显示效果可以和文字一模一样) 可以是等价的, 唯一区别是, 我们可以对矢量图形进行操作 (扭曲变形什么的). 还可以用于做Mask (遮罩) 等 ---> ASS 代码 clip 可以接受一个矢量绘图区域.

但是如果把blur(5) + bord(5) 复制到 奶大放出的那个像素字基础脚本里(就是最上面的那个) 边框效果根本就没有。那是说这个不是像素字么,那又为什么SubL里用的是Pix_Style
要具体问题具体分析, 没有效果的原因不止一种, 比如边框的透明度为255 (完全透明). (这里只是一个例子, 具体为什么不行, 你再分析下)

其实我还好奇怪,为什么使用了pos(0, 0) 字不会挤成一团的问题?
因为矢量绘图中可以包含初始点的坐标 (所以才在那个函数中给了 dx, dy这两个参数, 把这两个参数改成0试试)

最后 alpha3(HexToDec('77')) 和alpha3(119)是一样的吗?


效果上是等价的, 看你习惯那种数值计算了 (一般特效做多了, 会对数值有个经验性的认识)


p.s.1. 关于矢量图转像素图, 论坛上放过几个例子, 四月和疯子应该都用过的.
p.s.2. 牢骚一下, 能不能不要一下子提这么多问题... 有问题及时提出嘛, 分开几个帖, 交流起来也方便. 况且同时回答这么多问题, 也不一定一下子全部能接收...
p.s.3. 码这么多字真的很累耶.



图片附件: images.jpg (2013-6-16 01:38:08, 6.25 KB) / 下载次数 1642
http://tcax.org/forum.php?mod=attachment&aid=MTM1Nnw3ZWI1ZGViMnwxNzMyMzI5MjQ0fDB8MA%3D%3D



图片附件: anti-allias-1.gif (2013-6-16 01:38:07, 6.58 KB) / 下载次数 1685
http://tcax.org/forum.php?mod=attachment&aid=MTM1NXwzY2YxNWViMHwxNzMyMzI5MjQ0fDB8MA%3D%3D


作者: yyxxlc    时间: 2013-6-16 12:59:36

milkyjing 发表于 2013-6-16 01:37
关于第一个问题, 解释起来可能有点复杂,

可以通过如下实验帮忙理解, 将 alpha1(255 - pixA) 改成alpha1(0 ...

奶、奶大  你真好! 我还以为是小问题来着,居然这么复杂,真没想到~ 下次不会啦~ 半夜三更让乃码这么多字 我、我真的心里也好过不去!  奶大 乃真好T_T!  milk大神,你是个全才呢,越发觉得太厉害了!
作者: milkyjing    时间: 2013-6-16 20:37:15

yyxxlc 发表于 2013-6-16 12:59
奶、奶大  你真好! 我还以为是小问题来着,居然这么复杂,真没想到~ 下次不会啦~ 半夜三更让乃码这么多 ...

高级黑潜质妥妥的
作者: yyxxlc    时间: 2013-6-16 21:24:29

milkyjing 发表于 2013-6-16 20:37
高级黑潜质妥妥的

哪儿能啊  我黑谁也不会黑您老啊~  而且 我绝对是那种只被人黑绝不黑人的正义的存在!(发誓)
作者: 渣渣疯子    时间: 2013-6-16 23:09:34

yyxxlc 发表于 2013-6-16 21:24
哪儿能啊  我黑谁也不会黑您老啊~  而且 我绝对是那种只被人黑绝不黑人的正义的存在!(发誓) ...

M大这么一说,这怎么解释都感觉苍白了啊
作者: yyxxlc    时间: 2013-6-18 09:18:36

渣渣疯子 发表于 2013-6-16 23:09
M大这么一说,这怎么解释都感觉苍白了啊

ORZ  大、大失败! 真正黑的是你们吧  T_T  一定是那种皮子雪白馅儿都黑完了的神级存在




欢迎光临 TCAX 字幕特效制作工具官方论坛 | ASS | TCAS | Python | Aegisub | Lua (http://tcax.org/) Powered by Discuz! X2