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

 找回密码
 新人加入
查看: 3646|回复: 4

[完整特效] [J]036_Accel_World_OP特效脚本 (附完整工程) [复制链接]

Administrator

TCAX Dev.

Rank: 7Rank: 7Rank: 7

发表于 2012-5-10 12:59:22 |显示全部楼层
说明: 代码可以写得紧凑点(几个main函数可以合成一个), 之所以分开写是为了提供一个这样的参考----在必要的时候可以分成多个来写.
Accel_World_OP_FX.rar (5.75 MB, 下载次数: 53092)
  1. from tcaxPy import *
  2. from util.magick import *

  3. def tcaxPy_Init():
  4.     global _Fs
  5.     global _FD          # 一帧的持续时间, 约40毫秒
  6.     global Font         # 首要字体
  7.     global FontAll      # 加粗字体
  8.     global IMG_blast
  9.     global IMG_star
  10.     global IMG_revball
  11.     global IMG_star2
  12.     global IMG_flare
  13.     #global PIX_mask
  14.     _Fs = GetVal(val_FontSize)
  15.     _FD = 1000 / GetVal(val_FXFPS)
  16.     _FontFileName = GetVal(val_FontFileName)
  17.     _FaceID = GetVal(val_FaceID)
  18.     Font = InitFont(_FontFileName, _FaceID, _Fs, GetVal(val_Spacing), GetVal(val_SpaceScale), 0xFFFFFF, 0, 0)
  19.     FontAll = InitFont(_FontFileName, _FaceID, _Fs, GetVal(val_Spacing), GetVal(val_SpaceScale), 0xFFFFFF, 4, 0)
  20.     # images
  21.     img = Image(abspath('images/cosmic-blast-02.png'))  #flare-0005.png'))
  22.     img.resize('100x100000')
  23.     img.backgroundColor('Transparent')
  24.     IMG_blast = img
  25.     img = Image(abspath('images/star-027.png'))
  26.     img.resize('300x100000')
  27.     img.backgroundColor('Transparent')
  28.     IMG_star = img
  29.     img = Image(abspath('images/revolution-ball-04.png'))
  30.     img.resize('200x100000')
  31.     img.backgroundColor('Transparent')
  32.     IMG_revball = img
  33.     img = Image(abspath('images/star-036.png'))
  34.     img.resize('300x100000')
  35.     img.backgroundColor('Transparent')
  36.     IMG_star2 = img
  37.     img = Image(abspath('images/flare-soft-spikey-violet-star.png'))
  38.     img.backgroundColor('Transparent')
  39.     IMG_flare = img
  40. #    img = Image(abspath('images/dmsk0003.jpg'))  #flare-0005.png'))
  41. #    img.resize('200x100000')
  42. #    img.crop('200x200+100+100')
  43. #    img.write(abspath('images/mask.png'))
  44. #    Pause()
  45. #    PIX_mask = PixColorMul(addA(r2a(ImagePix(abspath('images/mask.png'))), 40), 1, 1, 1, 1.2)
  46. #    img = Image(abspath('images/backdrop-0016.jpg'))
  47. #    img.crop('800x300+0+200')
  48. #    img.write(abspath('images/a.png'))
  49. #    Pause()
  50. #    img = Image(abspath('images/gradient.png'))
  51. #    img.rotate(90)
  52. #    img.resize('!800x300')
  53. #    img.write(abspath('images/gradient2.png'))
  54. #    Pause()
  55. #    PIX = ImagePix(abspath('images/a.png'))
  56. #    mask = PixColorMul(addA(invertA(ImagePix(abspath('images/gradient2.png'))), -40), 1, 1, 1, 2)
  57. #    PIX = PixMask(PIX, mask)
  58. #    SavePix(abspath('images/b.png'), PIX)
  59. #    Pause()
  60. #    img = Image(abspath('images/purple-spin.png'))
  61. #    img.crop('800x240+0+0')
  62. #    img.write(abspath('images/c.png'))
  63. #    Pause()

  64. def tcaxPy_Fin():
  65.     FinFont(Font)
  66.     FinFont(FontAll)

  67. def tcaxPy_User():
  68.     file_name = GetVal(val_OutFile) + '.tcas'
  69.     fx_width = GetVal(val_ResolutionX)
  70.     fx_height = GetVal(val_ResolutionY)
  71.     fx_fps = GetVal(val_FXFPS)
  72.     TCAS_FILE = CreateTcasFile(file_name, fx_width, fx_height, fx_fps)
  73.     # basic metrics
  74.     fontSize   = GetVal(val_FontSize)
  75.     marginX    = GetVal(val_OffsetX)
  76.     marginY    = GetVal(val_OffsetY)
  77.     spacing    = GetVal(val_Spacing)
  78.     lineNum    = GetVal(val_nLines)
  79.     textNum    = GetVal(val_nTexts)
  80.     start      = GetVal(val_BegTime)
  81.     end        = GetVal(val_EndTime)
  82.     kar        = GetVal(val_KarTime)
  83.     elapKar    = GetVal(val_KarTimeDiff)
  84.     text       = GetVal(val_Text)
  85.     textLength = GetVal(val_TextLength)
  86.     advance    = GetVal(val_TextAdvance)
  87.     advDiff    = GetVal(val_TextAdvanceDiff)
  88.     # main loop
  89.     # part1
  90.     for i in range(3):  #3
  91.         initPosX = fx_width - textLength[i] - marginX
  92.         initPosY = marginY
  93.         BIG_PIX = InitBigPix()
  94.         for j in range(textNum[i]):
  95.             if text[i][j] == '' or text[i][j] == ' ' or text[i][j] == ' ':
  96.                 continue
  97.             posX = initPosX + advDiff[i][j] + advance[i][j] / 2
  98.             posY = initPosY + fontSize / 2
  99.             foo_bar = 0     # 实际上想传什么样的参数, 完全由我们自己决定, 数量也不受限制
  100.             param = [BIG_PIX, foo_bar]
  101.             ASS_BUF, TCAS_BUF = tcaxPy_Main_part1(i, j, textNum[i], start[i], end[i], elapKar[i][j], kar[i][j], posX, posY, advance[i][j], text[i][j], param)
  102.             WriteTcasFile(TCAS_FILE, TCAS_BUF)
  103.             Progress(i, j)
  104.         PIX_mask = ConvertBigPix(BIG_PIX)
  105.         num = textNum[i] + 6
  106.         PIX_i = ImagePix(abspath('images/b.png'), PIX_mask[1][0], PIX_mask[1][1])
  107.         for ii in range(num):
  108.             TCAS_BUF = []
  109.             PIX = PixPos(PIX_i, PIX_mask[0][0] + 1.5 * PIX_i[1][0] * (-0.5 + (ii + 1) / num), PIX_mask[0][1])
  110.             PIX = PixMask(PIX, PIX_mask)
  111.             PIX = PixColorMul(PIX, 1, 1, 1, sqrFactor(-0.5 + ii / num))
  112.             tcas_main(TCAS_BUF, PIX, start[i] * 10 - 6 * _FD + ii * _FD, start[i] * 10 - 6 * _FD + (ii + 1) * _FD, 0, 0, 1)
  113.             WriteTcasFile(TCAS_FILE, TCAS_BUF)
  114.             progress(ii + 1, num)
  115.     # part2
  116.     for i in range(3, 4):  # 3, 4
  117.         initPosX = fx_width - textLength[i] - marginX
  118.         initPosY = marginY
  119.         BIG_PIX = InitBigPix()
  120.         for j in range(textNum[i]):
  121.             if text[i][j] == '' or text[i][j] == ' ' or text[i][j] == ' ':
  122.                 continue
  123.             posX = initPosX + advDiff[i][j] + advance[i][j] / 2
  124.             posY = initPosY + fontSize / 2
  125.             foo_bar = 0     # 实际上想传什么样的参数, 完全由我们自己决定, 数量也不受限制
  126.             param = [BIG_PIX, foo_bar]
  127.             ASS_BUF, TCAS_BUF = tcaxPy_Main_part2(i, j, textNum[i], start[i], end[i], elapKar[i][j], kar[i][j], posX, posY, advance[i][j], text[i][j], param)
  128.             WriteTcasFile(TCAS_FILE, TCAS_BUF)
  129.             Progress(i, j)
  130.         PIX_mask = ConvertBigPix(BIG_PIX)
  131.         num = textNum[i] + 6
  132.         PIX_i = switchRB(ImagePix(abspath('images/transportation-beam-01.png'), PIX_mask[1][0], PIX_mask[1][1]))
  133.         for ii in range(num):
  134.             TCAS_BUF = []
  135.             PIX = PixPos(PIX_i, PIX_mask[0][0] + 1.5 * PIX_i[1][0] * (-0.5 + (ii + 1) / num), PIX_mask[0][1])
  136.             PIX = PixMask(PIX, PIX_mask)
  137.             PIX = PixColorMul(PIX, 1, 1, 1, sqrFactor(-0.5 + ii / num))
  138.             tcas_main(TCAS_BUF, PIX, start[i] * 10 - 6 * _FD + ii * _FD, start[i] * 10 - 6 * _FD + (ii + 1) * _FD, 0, 0, 1)
  139.             WriteTcasFile(TCAS_FILE, TCAS_BUF)
  140.             progress(ii + 1, num)
  141.     # part3
  142.     for i in range(4, 6):  # 4, 6
  143.         initPosX = fx_width - textLength[i] - marginX
  144.         initPosY = marginY
  145.         BIG_PIX = InitBigPix()
  146.         for j in range(textNum[i]):
  147.             if text[i][j] == '' or text[i][j] == ' ' or text[i][j] == ' ':
  148.                 continue
  149.             posX = initPosX + advDiff[i][j] + advance[i][j] / 2
  150.             posY = initPosY + fontSize / 2
  151.             foo_bar = 0     # 实际上想传什么样的参数, 完全由我们自己决定, 数量也不受限制
  152.             param = [BIG_PIX, foo_bar]
  153.             ASS_BUF, TCAS_BUF = tcaxPy_Main_part3(i, j, textNum[i], start[i], end[i], elapKar[i][j], kar[i][j], posX, posY, advance[i][j], text[i][j], param)
  154.             WriteTcasFile(TCAS_FILE, TCAS_BUF)
  155.             Progress(i, j)
  156.         PIX_mask = ConvertBigPix(BIG_PIX)
  157.         num = textNum[i] + 6
  158.         PIX_i = ImagePix(abspath('images/c.png'), PIX_mask[1][0], PIX_mask[1][1])
  159.         for ii in range(num):
  160.             TCAS_BUF = []
  161.             PIX = PixPos(PIX_i, PIX_mask[0][0] + 1.5 * PIX_i[1][0] * (-0.5 + (ii + 1) / num), PIX_mask[0][1])
  162.             PIX = PixMask(PIX, PIX_mask)
  163.             PIX = PixColorMul(PIX, 1, 1, 1, sqrFactor(-0.5 + ii / num))
  164.             tcas_main(TCAS_BUF, PIX, start[i] * 10 - 6 * _FD + ii * _FD, start[i] * 10 - 6 * _FD + (ii + 1) * _FD, 0, 0, 1)
  165.             WriteTcasFile(TCAS_FILE, TCAS_BUF)
  166.             progress(ii + 1, num)
  167.     # part4
  168.     for i in range(6, 7):  # 6, 7
  169.         initPosX = fx_width - textLength[i] - marginX
  170.         initPosY = marginY
  171.         BIG_PIX = InitBigPix()
  172.         for j in range(textNum[i]):
  173.             if text[i][j] == '' or text[i][j] == ' ' or text[i][j] == ' ':
  174.                 continue
  175.             posX = initPosX + advDiff[i][j] + advance[i][j] / 2
  176.             posY = initPosY + fontSize / 2
  177.             foo_bar = 0     # 实际上想传什么样的参数, 完全由我们自己决定, 数量也不受限制
  178.             param = [BIG_PIX, foo_bar]
  179.             ASS_BUF, TCAS_BUF = tcaxPy_Main_part4(i, j, textNum[i], start[i], end[i], elapKar[i][j], kar[i][j], posX, posY, advance[i][j], text[i][j], param)
  180.             WriteTcasFile(TCAS_FILE, TCAS_BUF)
  181.             Progress(i, j)
  182.         PIX_mask = ConvertBigPix(BIG_PIX)
  183.         num = textNum[i] + 6
  184.         PIX_i = ImagePix(abspath('images/star-018.png'), PIX_mask[1][0], PIX_mask[1][1])
  185.         for ii in range(num):
  186.             TCAS_BUF = []
  187.             PIX = PixPos(PIX_i, PIX_mask[0][0] + 1.5 * PIX_i[1][0] * (-0.5 + (ii + 1) / num), PIX_mask[0][1])
  188.             PIX = PixMask(PIX, PIX_mask)
  189.             PIX = PixColorMul(PIX, 1, 1, 1, sqrFactor(-0.5 + ii / num))
  190.             tcas_main(TCAS_BUF, PIX, start[i] * 10 - 6 * _FD + ii * _FD, start[i] * 10 - 6 * _FD + (ii + 1) * _FD, 0, 0, 1)
  191.             WriteTcasFile(TCAS_FILE, TCAS_BUF)
  192.             progress(ii + 1, num)
  193.     # part5
  194.     for i in range(7, 8):  # 7, 8
  195.         initPosX = fx_width - textLength[i] - marginX
  196.         initPosY = marginY
  197.         BIG_PIX = InitBigPix()
  198.         for j in range(textNum[i]):
  199.             if text[i][j] == '' or text[i][j] == ' ' or text[i][j] == ' ':
  200.                 continue
  201.             posX = initPosX + advDiff[i][j] + advance[i][j] / 2
  202.             posY = initPosY + fontSize / 2
  203.             foo_bar = 0     # 实际上想传什么样的参数, 完全由我们自己决定, 数量也不受限制
  204.             param = [BIG_PIX, foo_bar]
  205.             ASS_BUF, TCAS_BUF = tcaxPy_Main_part5(i, j, textNum[i], start[i], end[i], elapKar[i][j], kar[i][j], posX, posY, advance[i][j], text[i][j], param)
  206.             WriteTcasFile(TCAS_FILE, TCAS_BUF)
  207.             Progress(i, j)
  208.         PIX_mask = ConvertBigPix(BIG_PIX)
  209.         num = textNum[i] + 6
  210.         PIX_i = PixResize(PixStrip(ImagePix(abspath('images/explosion-of-colors-001.png'))) , PIX_mask[1][0], PIX_mask[1][1])
  211.         for ii in range(num):
  212.             TCAS_BUF = []
  213.             PIX = PixPos(PIX_i, PIX_mask[0][0] + 1.5 * PIX_i[1][0] * (-0.5 + (ii + 1) / num), PIX_mask[0][1])
  214.             PIX = PixMask(PIX, PIX_mask)
  215.             PIX = PixColorMul(PIX, 1, 1, 1, sqrFactor(-0.5 + ii / num))
  216.             tcas_main(TCAS_BUF, PIX, start[i] * 10 - 6 * _FD + ii * _FD, start[i] * 10 - 6 * _FD + (ii + 1) * _FD, 0, 0, 1)
  217.             WriteTcasFile(TCAS_FILE, TCAS_BUF)
  218.             #progress(ii + 1, num)
  219.     # part6 = part1
  220.     for i in range(8, lineNum):  # 8, lineNum
  221.         initPosX = fx_width - textLength[i] - marginX
  222.         initPosY = marginY
  223.         BIG_PIX = InitBigPix()
  224.         for j in range(textNum[i]):
  225.             if text[i][j] == '' or text[i][j] == ' ' or text[i][j] == ' ':
  226.                 continue
  227.             posX = initPosX + advDiff[i][j] + advance[i][j] / 2
  228.             posY = initPosY + fontSize / 2
  229.             foo_bar = 0     # 实际上想传什么样的参数, 完全由我们自己决定, 数量也不受限制
  230.             param = [BIG_PIX, foo_bar]
  231.             ASS_BUF, TCAS_BUF = tcaxPy_Main_part1(i, j, textNum[i], start[i], end[i], elapKar[i][j], kar[i][j], posX, posY, advance[i][j], text[i][j], param)
  232.             WriteTcasFile(TCAS_FILE, TCAS_BUF)
  233.             Progress(i, j)
  234.         PIX_mask = ConvertBigPix(BIG_PIX)
  235.         num = textNum[i] + 6
  236.         PIX_i = ImagePix(abspath('images/b.png'), PIX_mask[1][0], PIX_mask[1][1])
  237.         for ii in range(num):
  238.             TCAS_BUF = []
  239.             PIX = PixPos(PIX_i, PIX_mask[0][0] + 1.5 * PIX_i[1][0] * (-0.5 + (ii + 1) / num), PIX_mask[0][1])
  240.             PIX = PixMask(PIX, PIX_mask)
  241.             PIX = PixColorMul(PIX, 1, 1, 1, sqrFactor(-0.5 + ii / num))
  242.             tcas_main(TCAS_BUF, PIX, start[i] * 10 - 6 * _FD + ii * _FD, start[i] * 10 - 6 * _FD + (ii + 1) * _FD, 0, 0, 1)
  243.             WriteTcasFile(TCAS_FILE, TCAS_BUF)
  244.             progress(ii + 1, num)
  245.     FinTcasFile(TCAS_FILE)

  246. def tcaxPy_Main_part1(_i, _j, _n, _start, _end, _elapk, _k, _x, _y, _a, _txt, param):
  247.     ASS_BUF  = []        # 保存ASS特效
  248.     TCAS_BUF = []        # 保存TCAS特效
  249.     ##### 主要特效编写操作 ####
  250.     dx = _x - int((_a + GetVal(val_Spacing)) / 2 + 0.5)     # 一个固定操作, 将an5的坐标转换为an7
  251.     dy = _y - int(_Fs / 2 + 0.5)    # ASS特效默认采用an5坐标, TCAS特效则采用an7坐标
  252.     ###
  253.     PIX_t = TextPix(Font, _txt)
  254.     PIX = TextPix(FontAll, _txt)
  255.     PIX_s = PixColorMul(PixBlur(PIX, 20), 1, 1, 1, 0.8)
  256.     PIX = CombinePixs(PIX_s, PIX_t)
  257.     BigPixAdd(param[0], PIX, dx, dy, 0)
  258.     PIX0 = PIX
  259.     # 一些时间的计算
  260.     T0 = 10 * _start - 10 * _FD + 1 * _j * _FD
  261.     T1 = T0 + 4 * _FD
  262.     T2 = 10 * _end + 5 * _FD - 2 * (_n - _j - 1) * _FD
  263.     T3 = T2 + _FD * 4
  264.     # IN 进入方式
  265.     #PIX = PIX0
  266.     img = pmgToImage(a2rgb(PIX))
  267.     img.shade(0, 45, True)
  268.     PIX1 = PixPos(pmgToPix(img), PIX[0][0], PIX[0][1])
  269.     PIX2 = PixColorMul(PixMask(PIX1, PIX), 1, 0, 0, 1)
  270.     tcas_keyframe(TCAS_BUF, PixBlur(PixColorMul(PIX2, 1, 1, 1, 0.2), 10), PIX2, T0, T1, dx, dy, 1, 0)
  271.     # MAIN 存在方式
  272.     #PIX = PIX0
  273.     num = int((10 * (_start + _elapk + min(_k, 80)) - T1) / _FD + 0.5) + 1
  274.     for i in range(num):
  275.         img = pmgToImage(a2rgb(PIX))
  276.         img.shade(i * 10, randint(44, 58), True)
  277.         PIX1 = PixPos(pmgToPix(img), PIX[0][0], PIX[0][1])
  278.         PIX2 = PixColorMul(PixMask(PIX1, PIX), 1, 0.5 * i / num, 0, 1)
  279.         tcas_main(TCAS_BUF, PIX2, T1 + i * _FD, T1 + (i + 1) * _FD, dx, dy, 1)
  280.     # OUT 消失方式
  281.     tcas_keyframe(TCAS_BUF, PIX2, PixColorMul(PixBlur(PIX2, 16), 1, 1, 1, 0), T1 + num * _FD, 10 * (_start + _elapk + min(_k, 80) * 2), dx, dy, 2, 1)
  282.     TK = 10 * (_start + _elapk)
  283.     num = int(10 * min(_k, 80) / _FD + 0.5) + 6
  284.     for i in range(num):
  285.         img = Image(IMG_blast)
  286.         img.rotate(360 * 0.8 * i / num)
  287.         PIX = pmgToPix(img)#PixColorMul(pmgToPix(img), 1, 1, 1, 0.6 + 0.4 * (num - i - 1) / num)
  288.         PIX = PixPos(PIX, PIX_t[0][0] + (PIX_t[1][0] - PIX[1][0]) / 2, PIX_t[0][1] + (PIX_t[1][1] - PIX[1][1]) / 2)
  289.         tcas_main(TCAS_BUF, PIX, TK + i * _FD, TK + (i + 1) * _FD, dx, dy, 0)
  290.     ##### 将结果返回给tcax进行处理 #####
  291.     return (ASS_BUF, TCAS_BUF)

  292. def tcaxPy_Main_part2(_i, _j, _n, _start, _end, _elapk, _k, _x, _y, _a, _txt, param):
  293.     ASS_BUF  = []        # 保存ASS特效
  294.     TCAS_BUF = []        # 保存TCAS特效
  295.     ##### 主要特效编写操作 ####
  296.     dx = _x - int((_a + GetVal(val_Spacing)) / 2 + 0.5)     # 一个固定操作, 将an5的坐标转换为an7
  297.     dy = _y - int(_Fs / 2 + 0.5)    # ASS特效默认采用an5坐标, TCAS特效则采用an7坐标
  298.     ###
  299.     PIX_t = TextPix(Font, _txt)
  300.     PIX = TextPix(FontAll, _txt)
  301.     PIX_s = PixColorMul(PixBlur(PIX, 20), 1, 1, 1, 0.8)
  302.     PIX = CombinePixs(PIX_s, PIX_t)
  303.     BigPixAdd(param[0], PIX, dx, dy, 0)
  304.     PIX0 = PIX
  305.     # 一些时间的计算
  306.     T0 = 10 * _start - 10 * _FD + 1 * _j * _FD
  307.     T1 = T0 + 4 * _FD
  308.     T2 = 10 * _end + 5 * _FD - 2 * (_n - _j - 1) * _FD
  309.     T3 = T2 + _FD * 4
  310.     # IN 进入方式
  311.     #PIX = PIX0
  312.     img = pmgToImage(a2rgb(PIX))
  313.     img.shade(0, 45, True)
  314.     PIX1 = PixPos(pmgToPix(img), PIX[0][0], PIX[0][1])
  315.     PIX2 = PixColorMul(PixMask(PIX1, PIX), 0, 0, 0.7, 1)
  316.     tcas_keyframe(TCAS_BUF, PixBlur(PixColorMul(PIX2, 1, 1, 1, 0.2), 10), PIX2, T0, T1, dx, dy, 1, 0)
  317.     # MAIN 存在方式
  318.     #PIX = PIX0
  319.     num = int((10 * (_start + _elapk + min(_k, 80)) - T1) / _FD + 0.5) + 1
  320.     for i in range(num):
  321.         img = pmgToImage(a2rgb(PIX))
  322.         img.shade(i * 10, randint(44, 58), True)
  323.         PIX1 = PixPos(pmgToPix(img), PIX[0][0], PIX[0][1])
  324.         PIX2 = PixColorMul(PixMask(PIX1, PIX), 0, 0.5 * i / num, 0.7, 1)
  325.         tcas_main(TCAS_BUF, PIX2, T1 + i * _FD, T1 + (i + 1) * _FD, dx, dy, 1)
  326.     # OUT 消失方式
  327.     tcas_keyframe(TCAS_BUF, PIX2, PixColorMul(PixBlur(PIX2, 16), 1, 1, 1, 0), T1 + num * _FD, 10 * (_start + _elapk + min(_k, 80) * 2), dx, dy, 2, 1)
  328.     TK = 10 * (_start + _elapk)
  329.     num = int(10 * min(_k, 80) * 2 / _FD + 0.5) + 6
  330.     for i in range(num):
  331.         img = Image(IMG_star)
  332.         img.rotate(360 * 0.8 * i / num)
  333.         PIX = PixColorMul(pmgToPix(img), 1, 1, 1, linearFactor2(i / num))
  334.         PIX = PixPos(PIX, PIX_t[0][0] + (PIX_t[1][0] - PIX[1][0]) / 2, PIX_t[0][1] + (PIX_t[1][1] - PIX[1][1]) / 2)
  335.         if i / num >= 0.5:
  336.             PIX = PixResize(PIX, PIX[1][0] * linearFactor1(i / num), 0)
  337.         tcas_main(TCAS_BUF, PIX, TK + i * _FD, TK + (i + 1) * _FD, dx, dy, 0)
  338.     ##### 将结果返回给tcax进行处理 #####
  339.     return (ASS_BUF, TCAS_BUF)

  340. def tcaxPy_Main_part3(_i, _j, _n, _start, _end, _elapk, _k, _x, _y, _a, _txt, param):
  341.     ASS_BUF  = []        # 保存ASS特效
  342.     TCAS_BUF = []        # 保存TCAS特效
  343.     ##### 主要特效编写操作 ####
  344.     dx = _x - int((_a + GetVal(val_Spacing)) / 2 + 0.5)     # 一个固定操作, 将an5的坐标转换为an7
  345.     dy = _y - int(_Fs / 2 + 0.5)    # ASS特效默认采用an5坐标, TCAS特效则采用an7坐标
  346.     ###
  347.     PIX_t = TextPix(Font, _txt)
  348.     PIX = TextPix(FontAll, _txt)
  349.     PIX_s = PixColorMul(PixBlur(PIX, 20), 1, 1, 1, 0.8)
  350.     PIX = CombinePixs(PIX_s, PIX_t)
  351.     BigPixAdd(param[0], PIX, dx, dy, 0)
  352.     PIX0 = PIX
  353.     # 一些时间的计算
  354.     T0 = 10 * _start - 10 * _FD + 1 * _j * _FD
  355.     T1 = T0 + 4 * _FD
  356.     T2 = 10 * _end + 5 * _FD - 2 * (_n - _j - 1) * _FD
  357.     T3 = T2 + _FD * 4
  358.     # IN 进入方式
  359.     #PIX = PIX0
  360.     img = pmgToImage(a2rgb(PIX))
  361.     img.shade(0, 45, True)
  362.     PIX1 = PixPos(pmgToPix(img), PIX[0][0], PIX[0][1])
  363.     PIX2 = PixColorMul(PixMask(PIX1, PIX), 248 / 255, 14 / 255, 177 / 255, 1)
  364.     tcas_keyframe(TCAS_BUF, PixBlur(PixColorMul(PIX2, 1, 1, 1, 0.2), 10), PIX2, T0, T1, dx, dy, 1, 0)
  365.     # MAIN 存在方式
  366.     #PIX = PIX0
  367.     num = int((10 * (_start + _elapk + min(_k, 80)) - T1) / _FD + 0.5) + 1
  368.     for i in range(num):
  369.         img = pmgToImage(a2rgb(PIX))
  370.         img.shade(i * 10, randint(44, 58), True)
  371.         PIX1 = PixPos(pmgToPix(img), PIX[0][0], PIX[0][1])
  372.         PIX2 = PixColorMul(PixMask(PIX1, PIX), 248 / 255 + (251 - 248) / 255 * i / num, 14 / 255 + (132 - 14) / 255 * i / num, 177 / 255 + (215 - 177) / 255 * i / num, 1)
  373.         tcas_main(TCAS_BUF, PIX2, T1 + i * _FD, T1 + (i + 1) * _FD, dx, dy, 1)
  374.     # OUT 消失方式
  375.     tcas_keyframe(TCAS_BUF, PIX2, PixColorMul(PixBlur(PIX2, 16), 1, 1, 1, 0), T1 + num * _FD, 10 * (_start + _elapk + min(_k, 80) * 2), dx, dy, 2, 1)
  376.     TK = 10 * (_start + _elapk)
  377.     num = int(10 * min(_k, 80) * 2 / _FD + 0.5) + 6
  378.     for i in range(num):
  379.         img = Image(IMG_revball)
  380.         img.rotate(360 * 0.8 * i / num)
  381.         PIX = PixColorMul(pmgToPix(img), 1, 1, 1, linearFactor2(i / num))
  382.         PIX = PixPos(PIX, PIX_t[0][0] + (PIX_t[1][0] - PIX[1][0]) / 2, PIX_t[0][1] + (PIX_t[1][1] - PIX[1][1]) / 2)
  383.         tcas_main(TCAS_BUF, PIX, TK + i * _FD, TK + (i + 1) * _FD, dx, dy, 0)
  384.     ##### 将结果返回给tcax进行处理 #####
  385.     return (ASS_BUF, TCAS_BUF)

  386. def tcaxPy_Main_part4(_i, _j, _n, _start, _end, _elapk, _k, _x, _y, _a, _txt, param):
  387.     ASS_BUF  = []        # 保存ASS特效
  388.     TCAS_BUF = []        # 保存TCAS特效
  389.     ##### 主要特效编写操作 ####
  390.     dx = _x - int((_a + GetVal(val_Spacing)) / 2 + 0.5)     # 一个固定操作, 将an5的坐标转换为an7
  391.     dy = _y - int(_Fs / 2 + 0.5)    # ASS特效默认采用an5坐标, TCAS特效则采用an7坐标
  392.     ###
  393.     PIX_t = TextPix(Font, _txt)
  394.     PIX = TextPix(FontAll, _txt)
  395.     PIX_s = PixColorMul(PixBlur(PIX, 20), 1, 1, 1, 0.8)
  396.     PIX = CombinePixs(PIX_s, PIX_t)
  397.     BigPixAdd(param[0], PIX, dx, dy, 0)
  398.     PIX0 = PIX
  399.     # 一些时间的计算
  400.     T0 = 10 * _start - 10 * _FD + 1 * _j * _FD
  401.     T1 = T0 + 4 * _FD
  402.     T2 = 10 * _end + 5 * _FD - 2 * (_n - _j - 1) * _FD
  403.     T3 = T2 + _FD * 4
  404.     # IN 进入方式
  405.     #PIX = PIX0
  406.     img = pmgToImage(a2rgb(PIX))
  407.     img.shade(0, 45, True)
  408.     PIX1 = PixPos(pmgToPix(img), PIX[0][0], PIX[0][1])
  409.     PIX2 = PixColorMul(PixMask(PIX1, PIX), 248 / 255, 14 / 255, 177 / 255, 1)
  410.     tcas_keyframe(TCAS_BUF, PixBlur(PixColorMul(PIX2, 1, 1, 1, 0.2), 10), PIX2, T0, T1, dx, dy, 1, 0)
  411.     # MAIN 存在方式
  412.     #PIX = PIX0
  413.     num = int((10 * (_start + _elapk + min(_k, 80)) - T1) / _FD + 0.5) + 1
  414.     for i in range(num):
  415.         img = pmgToImage(a2rgb(PIX))
  416.         img.shade(i * 10, randint(44, 58), True)
  417.         PIX1 = PixPos(pmgToPix(img), PIX[0][0], PIX[0][1])
  418.         PIX2 = PixColorMul(PixMask(PIX1, PIX), 248 / 255 + (251 - 248) / 255 * i / num, 14 / 255 + (132 - 14) / 255 * i / num, 177 / 255 + (215 - 177) / 255 * i / num, 1)
  419.         tcas_main(TCAS_BUF, PIX2, T1 + i * _FD, T1 + (i + 1) * _FD, dx, dy, 1)
  420.     # OUT 消失方式
  421.     tcas_keyframe(TCAS_BUF, PIX2, PixColorMul(PixBlur(PIX2, 16), 1, 1, 1, 0), T1 + num * _FD, 10 * (_start + _elapk + min(_k, 80) * 2), dx, dy, 2, 1)
  422.     TK = 10 * (_start + _elapk)
  423.     num = int(10 * min(_k, 80) * 2 / _FD + 0.5) + 6
  424.     for i in range(num):
  425.         img = Image(IMG_star2)
  426.         img.rotate(360 * 0.8 * i / num)
  427.         PIX = PixColorMul(pmgToPix(img), 1, 1, 1, linearFactor2(i / num))
  428.         PIX = PixPos(PIX, PIX_t[0][0] + (PIX_t[1][0] - PIX[1][0]) / 2, PIX_t[0][1] + (PIX_t[1][1] - PIX[1][1]) / 2)
  429.         tcas_main(TCAS_BUF, PIX, TK + i * _FD, TK + (i + 1) * _FD, dx, dy, 0)
  430.     ##### 将结果返回给tcax进行处理 #####
  431.     return (ASS_BUF, TCAS_BUF)

  432. def tcaxPy_Main_part5(_i, _j, _n, _start, _end, _elapk, _k, _x, _y, _a, _txt, param):
  433.     ASS_BUF  = []        # 保存ASS特效
  434.     TCAS_BUF = []        # 保存TCAS特效
  435.     ##### 主要特效编写操作 ####
  436.     dx = _x - int((_a + GetVal(val_Spacing)) / 2 + 0.5)     # 一个固定操作, 将an5的坐标转换为an7
  437.     dy = _y - int(_Fs / 2 + 0.5)    # ASS特效默认采用an5坐标, TCAS特效则采用an7坐标
  438.     ###
  439.     PIX_t = TextPix(Font, _txt)
  440.     PIX = TextPix(FontAll, _txt)
  441.     PIX_s = PixColorMul(PixBlur(PIX, 20), 1, 1, 1, 0.8)
  442.     PIX = CombinePixs(PIX_s, PIX_t)
  443.     BigPixAdd(param[0], PIX, dx, dy, 0)
  444.     PIX0 = PIX
  445.     # 一些时间的计算
  446.     T0 = 10 * _start - 10 * _FD + 1 * _j * _FD
  447.     T1 = T0 + 4 * _FD
  448.     T2 = 10 * _end + 5 * _FD - 2 * (_n - _j - 1) * _FD
  449.     T3 = T2 + _FD * 4
  450.     # IN 进入方式
  451.     #PIX = PIX0
  452.     img = pmgToImage(a2rgb(PIX))
  453.     img.shade(0, 45, True)
  454.     PIX1 = PixPos(pmgToPix(img), PIX[0][0], PIX[0][1])
  455.     PIX2 = PixColorMul(PixMask(PIX1, PIX), 248 / 255, 14 / 255, 177 / 255, 1)
  456.     tcas_keyframe(TCAS_BUF, PixBlur(PixColorMul(PIX2, 1, 1, 1, 0.2), 10), PIX2, T0, T1, dx, dy, 1, 0)
  457.     # MAIN 存在方式
  458.     #PIX = PIX0
  459.     num = int((10 * (_start + _elapk + min(_k, 80)) - T1) / _FD + 0.5) + 1
  460.     for i in range(num):
  461.         img = pmgToImage(a2rgb(PIX))
  462.         img.shade(i * 10, randint(44, 58), True)
  463.         PIX1 = PixPos(pmgToPix(img), PIX[0][0], PIX[0][1])
  464.         PIX2 = PixColorMul(PixMask(PIX1, PIX), 248 / 255 + (251 - 248) / 255 * i / num, 14 / 255 + (132 - 14) / 255 * i / num, 177 / 255 + (215 - 177) / 255 * i / num, 1)
  465.         tcas_main(TCAS_BUF, PIX2, T1 + i * _FD, T1 + (i + 1) * _FD, dx, dy, 1)
  466.     # OUT 消失方式
  467.     tcas_keyframe(TCAS_BUF, PIX2, PixColorMul(PixBlur(PIX2, 16), 1, 1, 1, 0), T1 + num * _FD, 10 * (_start + _elapk + min(_k, 80) * 2), dx, dy, 2, 1)
  468.     TK = 10 * (_start + _elapk)
  469.     num = int(10 * min(_k, 80) / _FD + 0.5) + 6
  470.     for i in range(num):
  471.         img = Image(IMG_flare)
  472.         img.rotate(360 * 0.8 * i / num)
  473.         PIX = pmgToPix(img)#PixColorMul(pmgToPix(img), 1, 1, 1, 0.6 + 0.4 * (num - i - 1) / num)
  474.         PIX = PixPos(PIX, PIX_t[0][0] + (PIX_t[1][0] - PIX[1][0]) / 2, PIX_t[0][1] + (PIX_t[1][1] - PIX[1][1]) / 2)
  475.         if i / num >= 0.5:
  476.             PIX = PixResize(PIX, PIX[1][0] * linearFactor1(i / num), 0)
  477.         tcas_main(TCAS_BUF, PIX, TK + i * _FD, TK + (i + 1) * _FD, dx, dy, 0)
  478.     ##### 将结果返回给tcax进行处理 #####
  479.     return (ASS_BUF, TCAS_BUF)

  480. # Utility

  481. def sqrFactor(x):
  482.     return -4 * (x - 0.5) * (x + 0.5)

  483. def linearFactor1(x):
  484.     if x < 0.5:
  485.         return 1
  486.     else:
  487.         return 1 - 1 * (x - 0.5)

  488. def linearFactor2(x):
  489.     if x < 0.5:
  490.         return 1
  491.     else:
  492.         return 1 - 2 * (x - 0.5)

  493. def r2a(PIX):
  494.     buf = []
  495.     width = PIX[1][0]
  496.     height = PIX[1][1]
  497.     for h in range(height):
  498.         for w in range(width):
  499.             index = 4 * (h * width + w)
  500. #            if PIX[2][index] != PIX[2][index + 1] or PIX[2][index] != PIX[2][index + 2]:
  501. #                print('note1')
  502. #            if PIX[2][index + 3] != 255:
  503. #                print('note2')
  504.             buf.append(0)
  505.             buf.append(0)
  506.             buf.append(0)
  507.             buf.append(PIX[2][index + 0])
  508.     return (PIX[0], PIX[1], tuple(buf))

  509. def invertA(PIX):
  510.     buf = list(PIX[2])
  511.     width = PIX[1][0]
  512.     height = PIX[1][1]
  513.     for h in range(height):
  514.         for w in range(width):
  515.             index = 4 * (h * width + w) + 3
  516.             buf[index] = 255 - buf[index]
  517.     return (PIX[0], PIX[1], tuple(buf))

  518. def addA(PIX, step):
  519.     buf = list(PIX[2])
  520.     width = PIX[1][0]
  521.     height = PIX[1][1]
  522.     for h in range(height):
  523.         for w in range(width):
  524.             index = 4 * (h * width + w) + 3
  525.             buf[index] += int(step + 0.5)
  526.             if buf[index] < 0:
  527.                 buf[index] = 0
  528.             if buf[index] > 255:
  529.                 buf[index] = 255
  530.     return (PIX[0], PIX[1], tuple(buf))

  531. def a2rgb(PIX):
  532.     buf = list(PIX[2])
  533.     width = PIX[1][0]
  534.     height = PIX[1][1]
  535.     for h in range(height):
  536.         for w in range(width):
  537.             index = 4 * (h * width + w)
  538.             buf[index] = buf[index + 3]
  539.             buf[index + 1] = buf[index + 3]
  540.             buf[index + 2] = buf[index + 3]
  541.             buf[index + 3] = 255
  542.     return (PIX[0], PIX[1], tuple(buf))

  543. def switchRB(PIX):
  544.     buf = list(PIX[2])
  545.     width = PIX[1][0]
  546.     height = PIX[1][1]
  547.     for h in range(height):
  548.         for w in range(width):
  549.             index = 4 * (h * width + w)
  550.             temp = buf[index]
  551.             buf[index] = buf[index + 2]
  552.             buf[index + 2] = temp
  553.     return (PIX[0], PIX[1], tuple(buf))
复制代码
1

查看全部评分

Administrator

TCAX Dev.

Rank: 7Rank: 7Rank: 7

发表于 2012-5-10 13:17:50 |显示全部楼层

Rank: 4

发表于 2012-8-3 13:29:49 |显示全部楼层
好~~~~~~~~~~~~~长~~~~~~~~~~~~~~~天哪。。。我怎么可能写的出来=。=

Administrator

TCAX Dev.

Rank: 7Rank: 7Rank: 7

发表于 2012-8-3 14:10:01 |显示全部楼层
愛萌就要控丶 发表于 2012-8-3 13:29
好~~~~~~~~~~~~~长~~~~~~~~~~~~~~~天哪。。。我怎么可能写的出来=。=

很多重复代码的。。。复制粘贴,然后小量修改。。。

Rank: 4

发表于 2012-8-4 00:39:20 |显示全部楼层
好吧,话说看到几个奇怪的加减法运算= ̄ω ̄=
您需要登录后才可以回帖 登录 | 新人加入

GitHub|TCAX 主页

GMT+8, 2024-4-19 09:39

Powered by Discuz! X2

© 2001-2011 Comsenz Inc.

回顶部
RealH