diff --git a/konabot/plugins/image_process/__init__.py b/konabot/plugins/image_process/__init__.py index 2a518a8..288748a 100644 --- a/konabot/plugins/image_process/__init__.py +++ b/konabot/plugins/image_process/__init__.py @@ -141,17 +141,47 @@ async def _( output_img = BytesIO() adjusted_durations = [ - max(10, int(dur / speed_factor)) for dur in selected_durations + dur / speed_factor for dur in selected_durations ] - if selected_frames: - selected_frames[0].save( + rframes = [] + 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) + + if rframes: + rframes[0].save( output_img, format="GIF", save_all=True, - append_images=selected_frames[1:], - duration=adjusted_durations, + append_images=rframes[1:], + duration=rdur, loop=0, + optimize=False, + disposal=2, + transparency=0, ) else: raise BotExceptionMessage("错误:没有可输出的帧")