使用时将图片显示模块代码保存并命名为 image2lua.py,置于本篇代码同目录下
开发环境:python3.11.8 + pillow
使用时可以手动更改path, w, h也可以在控制台输入
运行完成后同级目录下出现out-gif.lua 文件名可以在入口处更改。
如果遇到文件过大无法通过游戏内导入的情况,可以手动拷贝至
*\.minecraft\*\saves\{存档名}\computercraft\computer\{电脑编号}\
目录下。
测试图像:
连接显示器后在显示器上显示
(为了本地上传牺牲了画质的示例)
没剪的示例(图源GitHub,没加载出来属于正常现象)
如何获取图像宽和高:
在显示平台(外接显示器就是在显示器内)执行
term.getSize()
即可获取w, h (宽高)
完整代码:
from PIL import Image
import textwrap
from image2lua import main, list_sub, head, line
def open_gif(path, iw, ih, name):
out : list[tuple[Image, int]] = []
gif = Image.open(path)
with open(f"{name}-gif.lua", 'w+') as file:
for _ in range(gif.n_frames):
line("处理图片", _+1, gif.n_frames)
gif.seek(_)
delay = gif.info['duration']
img = Image.new("RGB", gif.size)
img.paste(gif, (0, 0))
# print(list(img.getdata()))
file.write(f"function F{_}()\n")
# '''
f_co, b_co, te = main(img, iw, ih)
for i in range(len(f_co)):
f = f_co[i]
b = b_co[i]
t = te[i]
t = textwrap.wrap(t, 2)
file.write('term.scroll(-1)\nterm.setCursorPos(1,1)\n')
file.write(f"term.blit('{list_sub([head + x for x in t])}', '{f}', '{b}')\n")
file.write(f'os.sleep({delay/1000})\n')
file.write("end\n")
# '''
file.write("while(0)\ndo\n")
for _ in range(gif.n_frames):
file.write(f"F{_}()\n")
file.write("end\n")
path = None
w = None
h = None
if __name__ == "__main__":
if path is None:
path = input("输入图片完整路径")
if w is None or h is None:
w, h = int(*input("输入图片宽高,以空格分割").split(" "))
open_gif(path, w, h, 'out')
PS:环境问题见原教程,不想多个文件可以手动替换模块