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

 找回密码
 新人加入
查看: 4211|回复: 8
打印 上一主题 下一主题

[特效算法] 毛刺文字效果(修正像素字与普通字的定位偏差) [复制链接]

Administrator

TCAX Dev.

Rank: 7Rank: 7Rank: 7

跳转到指定楼层
楼主
发表于 2012-4-24 11:40:39 |只看该作者 |倒序浏览
执行此例子可能需要新模块 gdiFont.rar (6.37 KB, 下载次数: 2392)
解压后放到TCAX根目录下, 或者是当前特效工程目录下.
完整特效工程 stab_text.rar (3.41 KB, 下载次数: 2524)

该例子同时展示了利用新模块来消除像素字(包括Mask文字)与普通字之间的定位偏差.
  1. from tcaxPy import *
  2. from gdiFont import *

  3. def tcaxPy_Init():
  4.     global _Fs
  5.     global _FD          # 一帧的持续时间, 约40毫秒
  6.     global _Spacing     # 字体间距
  7.     global Font         # 首要字体
  8.     global GdiFont      # GDI 字体
  9.     _Fs = GetVal(val_FontSize)
  10.     _FD = 1000 / GetVal(val_FXFPS)
  11.     _FontFileName = GetVal(val_FontFileName)
  12.     _FaceID = GetVal(val_FaceID)
  13.     _Spacing = GetVal(val_Spacing)
  14.     Font = InitFont(_FontFileName, _FaceID, _Fs, _Spacing, GetVal(val_SpaceScale), MakeRGB(255, 255, 255), 0, False)
  15.     GdiFont = gfInitFont(GetVal(val_FontFaceName), _Fs, _Spacing, GetVal(val_SpaceScale), 0, False)

  16. def tcaxPy_Fin():
  17.     FinFont(Font)
  18.     gfFinFont(GdiFont)

  19. def tcaxPy_Main(_i, _j, _n, _start, _end, _elapk, _k, _x, _y, _a, _txt):
  20.     ASS_BUF  = []        # 保存ASS特效
  21.     TCAS_BUF = []        # 保存TCAS特效
  22.     ##### 主要特效编写操作 ####
  23.     dx = _x - int((_a + _Spacing) / 2 + 0.5)     # 一个固定操作, 将an5的坐标转换为an7
  24.     dy = _y - int(_Fs / 2 + 0.5)                 # ASS特效默认采用an5坐标, TCAS特效则采用an7坐标
  25.     # 文字主体
  26.     shap = 'm 1 0 l 0 -70 l 0 0 l -60 1 l 0 1 l 1 62 l 1 1 l 60 0 l 0 0' # DRAWING BY Alkoon
  27.     shap2 = 'm 0 -1 l 50 -50 l 1 0 l 50 50 l 0 1 l -50 50 l -1 0 l -50 -50'  # DRAWING BY Tenka
  28.     c1 = 'FFFFFF'
  29.     c3 = '000000'
  30.     ts1 = _start - 70 + _j * 2
  31.     te1 = ts1 + 62
  32.     EFT1 = an(7) + color1(c1) + color3(c3) + move(dx + 120, dy, dx, dy) + fad(120, 0) + org(dx, dy)
  33.     EFT2 = bord(1) + fsc(80, 80) + t(100, 400, fsc(150, 150) + frz(50)) + t(450, 800, fsc(100, 100) + frz(0))
  34.     ts2 = te1
  35.     te2 = _start + _elapk + _k
  36.     ass_main(ASS_BUF, SubL(ts1, te1, 2), EFT1 + EFT2, _txt)
  37.     EFT = an(7) + color1(c1) + color3(c3) + move(dx, dy, dx, dy) + bord(1)
  38.     ass_main(ASS_BUF, SubL(ts2, te2, 2), EFT, _txt)
  39.     ###PIX = TextPix(Font, _txt)
  40.     points = gfGetPoints(GdiFont, _txt) ###PixPoints(PIX)
  41.     pt_num = len(points)
  42.     dx = _x - int((_a + _Spacing) / 2 + 0.5) ### + PIX[0][0]
  43.     dy = _y - int(_Fs / 2 + 0.5)  ### + PIX[0][1] + 1
  44.     dur = _k * 10
  45.     ts1 = _start + _elapk
  46.     te1 = _start + _elapk + _k
  47.     ts2 = te1
  48.     te2 = _start + _elapk + 100
  49.     for i in range(pt_num):
  50.         rand = randint(-100, 100)
  51.         randx = randint(-200, 200)
  52.         randy = randint(-500, 500)
  53.         x = dx + points[i][0]
  54.         y = dy + points[i][1]
  55.         EFT1 = an(7) + color1(c1) + shad(0) + bord(0) + fsc(20, 20) + fr(rand)
  56.         EFT2 = t(0, dur / 2, fr(randx) + fsc(60, 60)) + t(dur / 2, dur, fr(randy) + fsc(25, 25)) + move(x, y, x, y) + p(2)
  57.         ass_main(ASS_BUF, SubL(ts1, te1, 3), EFT1 + EFT2, shap)
  58.         EFT1 = an(7) + color1(c1) + shad(0) + bord(0) + fsc(26, 26)
  59.         EFT2 = t(0, 1000, fsc(10, 10) + fad(0, 250)) + t(fr(randy)) + move(x, y, x, y) + p(2)
  60.         ass_main(ASS_BUF, SubL(ts2, te2 + 10 * i / pt_num, 3), EFT1 + EFT2, shap)
  61.     ##### 将结果返回给tcax进行处理 #####
  62.     return (ASS_BUF, TCAS_BUF)
复制代码
1

查看全部评分

正式会员

妖木

Rank: 4

沙发
发表于 2012-4-24 12:01:55 |只看该作者
四月 你的偏差定位好了……

牛奶大

Administrator

TCAX Dev.

Rank: 7Rank: 7Rank: 7

板凳
发表于 2012-4-24 12:04:00 |只看该作者
mzlmcx 发表于 2012-4-24 12:01
四月 你的偏差定位好了……

牛奶大

恩, 好深的一个坑...

Rank: 4

地板
发表于 2012-4-24 12:43:08 |只看该作者
表示搞定 了牛奶大辛苦了XD

Rank: 5Rank: 5

5#
发表于 2012-4-24 13:16:09 |只看该作者
咱膜拜了...
四月很强大..

Rank: 4

6#
发表于 2012-4-24 13:19:55 |只看该作者
忘却の小伊 发表于 2012-4-24 13:16
咱膜拜了...
四月很强大..

牛奶大填的坑 要膜拜牛奶大

Rank: 5Rank: 5

7#
发表于 2012-4-24 13:21:45 |只看该作者
youkaze 发表于 2012-4-24 13:19
牛奶大填的坑 要膜拜牛奶大

这不是你做的么??
这个不是那个009里面的那个么?

Rank: 4

8#
发表于 2012-4-24 13:24:14 |只看该作者
本帖最后由 youkaze 于 2012-4-24 13:36 编辑
忘却の小伊 发表于 2012-4-24 13:21
这不是你做的么??
这个不是那个009里面的那个么?


嗯加速世界是有个贝兹 原理是一样的
PS:额瞬间发现这个脚本没用贝兹(表示自己写的贝兹线太那啥了不好看就直接用了牛奶大这根)

Moderator

疯子

Rank: 5Rank: 5

9#
发表于 2012-4-29 18:15:18 |只看该作者
好吧,我来晚了。。。学校依旧很折腾人。。。我等事彻底清了再静下来好好看
您需要登录后才可以回帖 登录 | 新人加入

GitHub|TCAX 主页

GMT+8, 2024-4-25 15:19

Powered by Discuz! X2

© 2001-2011 Comsenz Inc.

回顶部
RealH