Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feature: GIF support #7

Merged
merged 9 commits into from
Aug 3, 2022
Merged

feature: GIF support #7

merged 9 commits into from
Aug 3, 2022

Conversation

HomeArchbishop
Copy link
Collaborator

描述

  • 支持动图包浆

    原图 15年份 + 16%画质
    origin 15-16%
  • 暂不支持 GIF 波普。在动图时,我隐藏了界面上的波普按钮

  • 实现逻辑是「拆解」-> 「渲染」-> 「组装 GIF」

  • 运行效率:上述样例完整运行三次

    1 2 3 AVER
    10302ms 10399ms 10723ms 10474ms

    我在「拆解」步骤加了手动缓存的优化,同一张 GIF 第二次渲染直接跳过「拆解」,速度提升到了 8100ms 左右。

    这是在动图只有11帧的情况下。如果一张 GIF 有上百张图片,渲染速度堪忧。这个是一个迭代,是线性的,异步也行不通。硬伤。或者是我太蠢了(/ω\)

  • 静态图片时,一个参数改变,图片会响应式渲染。如果要改多个参数,就需要等渲染很多遍。个人认为这个在 GIF 这种低效的模式下行不通。所以我在且仅在 GIF 时,取消了响应性渲染,改为手动了🥺。

    看代码可能更好理解

    watch: {
      config: {
        deep: true,
        handler (config) {
          // ...
          // 只有不是 GIF 的情况下会响应式触发
          if (!this.isGIF) {
            this._patina();
          }
        }
      },
    }
    <button v-if="isShouldRedoGIF && isGIF" @click="_patina">重新渲染GIF</button>
  • 关于代码格式

    patina.js 一样,我创建了一个 patina-gif.js 文件,挂载了 window.patinaGIF() 到全局,专门渲染 GIF。所有的 GIF 图片将这个函数作为入口。

    这个文件完全不依赖于 patina.js 中定义的变量和函数(如 rgb2yuv, yuv2rgb 等),我对 GIF 的函数进行了一整个闭包。这样就不会定义出冲突的全局变量,扰乱正常 patina.js 的运行。

    不过这么做显然有些啰嗦。因为很多函数明明是一摸一样的(比如 Convolutes, rgb2yuv() 等)。我觉得可以模块化一下,把这些函数提出一个模块,再在 patina.jspatina-gif.js 里引入。不过那样就要大改原来代码的结构了,那就不能我说了算啦🤣。

待讨论

  • 渲染速度,太慢啦!🤧
  • 动图要支持波普吗?🧐
  • 会不会出现bug?😨

就当这是一个草稿吧,个人觉得还算可以用。🥰

&& 把我加到水印里嘛(拆家大主教

@itorr
Copy link
Owner

itorr commented Aug 3, 2022

我先做了上线的最小改动👻

关于生成时间

我觉得现在的 chiya.gif 以及常见的小表情 绿化过程体验已经很优雅了,因为有单帧的进度预览、所以并不会觉得这个过程枯燥,原本 JPEG 生成过程为了这个预览也是增加了很久的生成时间,我觉得展示生成过程也是很重要的体验。

问题主要是几秒钟以上的 gif 录屏之类,轻松就做到分钟以上的生成时间,不过我觉得这本身也不是适合 gif 存储的信息,可能需要在遇到多帧数动图时 增加一步交互 提醒确认一下再触发生成之类的

代码格式

这个问题好苦恼OAQ 现在除了很多共有逻辑之外 甚至界面都混在了一起( 是我多个环节偷懒导致的,dbq(ಥ_ಥ)
确实需要把简单函数抽象出来,引入个合适的模块化方案🤔

动图波普

😱动图波普听起来就很带感,如果按照原图尺寸切块来做 确实感觉也可行(

bug?什么 bug、那都是 issue 😍

(快再多加些水印名www

@itorr itorr merged commit ab7ac93 into itorr:main Aug 3, 2022
@itorr itorr added the enhancement New feature or request label Aug 3, 2022
@itorr itorr mentioned this pull request Aug 3, 2022
@HomeArchbishop
Copy link
Collaborator Author

好耶!(✧∇✧)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants