mirror of
https://github.com/lifegpc/pythonscript.git
synced 2026-06-06 11:19:48 +08:00
84 lines
2.9 KiB
Python
84 lines
2.9 KiB
Python
from ctypes import (
|
|
CDLL,
|
|
c_void_p,
|
|
c_char_p,
|
|
c_int
|
|
)
|
|
|
|
|
|
libass = CDLL('ass.dll')
|
|
libass.ass_library_init.restype = c_void_p
|
|
libass.ass_library_done.argtypes = [c_void_p]
|
|
libass.ass_set_fonts_dir.argtypes = [c_void_p, c_char_p]
|
|
libass.ass_set_fonts.argtypes = [c_void_p, c_char_p, c_char_p, c_int, c_char_p,
|
|
c_int]
|
|
libass.ass_renderer_init.restype = c_void_p
|
|
libass.ass_renderer_init.argtypes = [c_void_p]
|
|
libass.ass_renderer_done.argtypes = [c_void_p]
|
|
|
|
|
|
def ass_library_init() -> int:
|
|
return libass.ass_library_init()
|
|
|
|
|
|
def ass_library_done(priv: int):
|
|
libass.ass_library_done(c_void_p(priv))
|
|
|
|
|
|
def ass_set_fonts_dir(priv: int, fonts_dir: str, encoding: str = 'UTF-8'):
|
|
libass.ass_set_fonts_dir(c_void_p(priv),
|
|
fonts_dir.encode(encoding) if fonts_dir else None)
|
|
|
|
|
|
def ass_renderer_init(priv: int) -> int:
|
|
return libass.ass_renderer_init(c_void_p(priv))
|
|
|
|
|
|
def ass_renderer_done(priv: int):
|
|
libass.ass_renderer_done(c_void_p(priv))
|
|
|
|
|
|
def ass_set_fonts(priv: int, default_font: str, default_family: str, dfp: int,
|
|
config: str, update: int, encoding: str = 'UTF-8'):
|
|
libass.ass_set_fonts(c_void_p(priv),
|
|
default_font.encode(encoding) if default_font else None, # noqa: E501
|
|
default_family.encode(encoding) if default_family else None, # noqa: E501
|
|
dfp, config.encode(encoding) if config else None,
|
|
update)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
priv = ass_library_init()
|
|
print(f'Created ASS_LIBARAY Handle: {priv}')
|
|
font_dir = "E:\\fonts-test-来点中文\\"
|
|
ass_set_fonts_dir(priv, font_dir)
|
|
print(f'Set fonts dir to "{font_dir}" (UTF-8)')
|
|
da_font = font_dir + "\\文道奶酪体.ttf"
|
|
fconfig = "D:\\programs\\fonts"
|
|
print('Call ass_renderer_init')
|
|
red = ass_renderer_init(priv)
|
|
print(f'Call ass_set_fonts with {da_font}, NULL, 1, {fconfig}, 1)')
|
|
ass_set_fonts(red, da_font, None, 1, fconfig, 1)
|
|
print('Free ass_renderer')
|
|
ass_renderer_done(red)
|
|
ass_set_fonts_dir(priv, font_dir, 'GB2312')
|
|
print(f'Set fonts dir to "{font_dir}" (GB2312(ANSI))')
|
|
print('Call ass_renderer_init')
|
|
red = ass_renderer_init(priv)
|
|
print(f'Call ass_set_fonts with {da_font}, NULL, 1, {fconfig}, 1)')
|
|
ass_set_fonts(red, da_font, None, 1, fconfig, 1, 'GB2312')
|
|
print('Free ass_renderer')
|
|
ass_renderer_done(red)
|
|
print('Test chars don\'t exist in GB2312.')
|
|
font_dir = 'E:\\微软必须死个🐴'
|
|
ass_set_fonts_dir(priv, font_dir)
|
|
print(f'Set fonts dir to "{font_dir}" (UTF-8)')
|
|
print('Call ass_renderer_init')
|
|
red = ass_renderer_init(priv)
|
|
print(f'Call ass_set_fonts with {da_font}, NULL, 1, {fconfig}, 1)')
|
|
ass_set_fonts(red, da_font, None, 1, fconfig, 1)
|
|
print('Free ass_renderer')
|
|
ass_renderer_done(red)
|
|
ass_library_done(priv)
|
|
print('Free Handle.')
|