Compare commits
2 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| af566888ab | |||
| e72bc283f8 |
@ -141,17 +141,61 @@ async def _(
|
|||||||
output_img = BytesIO()
|
output_img = BytesIO()
|
||||||
|
|
||||||
adjusted_durations = [
|
adjusted_durations = [
|
||||||
max(10, int(dur / speed_factor)) for dur in selected_durations
|
dur / speed_factor for dur in selected_durations
|
||||||
]
|
]
|
||||||
|
|
||||||
if selected_frames:
|
rframes = []
|
||||||
selected_frames[0].save(
|
rdur = []
|
||||||
|
|
||||||
|
acc_mod_20 = 0
|
||||||
|
|
||||||
|
for i in range(len(selected_frames)):
|
||||||
|
fr = selected_frames[i]
|
||||||
|
du: float = adjusted_durations[i]
|
||||||
|
|
||||||
|
if du >= 20:
|
||||||
|
rframes.append(fr)
|
||||||
|
rdur.append(int(du))
|
||||||
|
acc_mod_20 = 0
|
||||||
|
else:
|
||||||
|
if acc_mod_20 == 0:
|
||||||
|
rframes.append(fr)
|
||||||
|
rdur.append(20)
|
||||||
|
acc_mod_20 += du
|
||||||
|
else:
|
||||||
|
acc_mod_20 += du
|
||||||
|
if acc_mod_20 >= 20:
|
||||||
|
acc_mod_20 = 0
|
||||||
|
|
||||||
|
if len(rframes) == 1 and len(selected_frames) > 1:
|
||||||
|
rframes.append(selected_frames[max(2, len(selected_frames) // 2)])
|
||||||
|
rdur.append(20)
|
||||||
|
|
||||||
|
transparency_flag = False
|
||||||
|
for f in rframes:
|
||||||
|
if f.mode == "RGBA":
|
||||||
|
if any(pix < 255 for pix in f.getchannel("A").getdata()):
|
||||||
|
transparency_flag = True
|
||||||
|
break
|
||||||
|
elif f.mode == "P" and "transparency" in f.info:
|
||||||
|
transparency_flag = True
|
||||||
|
break
|
||||||
|
|
||||||
|
tf = {}
|
||||||
|
if transparency_flag:
|
||||||
|
tf['transparency'] = 0
|
||||||
|
|
||||||
|
if rframes:
|
||||||
|
rframes[0].save(
|
||||||
output_img,
|
output_img,
|
||||||
format="GIF",
|
format="GIF",
|
||||||
save_all=True,
|
save_all=True,
|
||||||
append_images=selected_frames[1:],
|
append_images=rframes[1:],
|
||||||
duration=adjusted_durations,
|
duration=rdur,
|
||||||
loop=0,
|
loop=0,
|
||||||
|
optimize=False,
|
||||||
|
disposal=2,
|
||||||
|
**tf,
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
raise BotExceptionMessage("错误:没有可输出的帧")
|
raise BotExceptionMessage("错误:没有可输出的帧")
|
||||||
|
|||||||
Reference in New Issue
Block a user