如何将两个动画 gif 与 javascript 合并?

Posted

技术标签:

【中文标题】如何将两个动画 gif 与 javascript 合并?【英文标题】:How to merge two animated gif with javascript? 【发布时间】:2020-07-01 04:31:33 【问题描述】:

我有一个允许用户上传动画 GIF 的网络应用程序。 gif 使用<img> 标签显示在同一页面上,用户可以在页面中移动它们。当用户完成移动 gif 时,我需要将结果导出到一个包含所有这些的 gif 中。

例如,用户可能会上传两个动画 gif 文件并将它们并排放置在网页上,我需要将它们导出到一个 gif 文件中并排显示两个 gif。

我正在考虑从每个上传的 gif 中提取所有帧,将每个 gif 中的帧组合成一个帧(如 result_frame_1 = gif1_frame_1 + gif2_frame1、result_frame_2 = gif1_frame_2 + gif2_frame2 等)并重新排列生成的帧以获得新的gif。

我需要使用 javascript 来执行此操作,是否有库可以帮助我完成此任务?基本上我需要一个库来从 gif 中提取帧,对其进行操作并从中重新创建 gif。

【问题讨论】:

据我所知,你不能用 javascript 做到这一点。您所依赖的图像显示体现在网络浏览器软件中,不会暴露给您。 您可以使用canvasContext.drawImage 将图像放在一个元素中后,将它们放在画布上。然后您可以通过XMLHttpRequestFormDataInstance.append('fileName.png', blob) 中发送const blob = canvas.toBlob(),然后在您的服务器上写入文件,但我只会将图像网址发送到服务器(通过 XMLHttpRequest),您可以在其中在服务器上获取并合并它们。 【参考方案1】:

目前没有这方面的库。但是您可以使用 ffmpg wasm 从 gif 或任何其他帧提取器中提取帧。将这些帧传递给画布 imagedraw。图像的所有结果帧形成一个新的 gif。

【讨论】:

以上是关于如何将两个动画 gif 与 javascript 合并?的主要内容,如果未能解决你的问题,请参考以下文章

将动画 .GIF 设置为背景 Android

如何在视图和动态壁纸中适合 GIF 动画的内容?

将两个动画情节组合成一个 GIF/MP4

将 SVG 动画录制并保存为动画 GIF [关闭]

如何使用ScreenToGif创建一个GIF动画视频

使用javascript裁剪GIF图像而不会丢失动画[重复]