4

提前道歉,但这并不是一个真正的Photoshop问题。相反,我试图想出一些令人信服的东西,但尽可能利用 gif 格式的压缩和特性来为动画生成尽可能小的文件。

一些限制:

  • 它至少需要 20 或 30 帧。我尝试过更少(因为它们在很大程度上是不可压缩的,一般来说,15 帧的大小是 30 帧的一半)
  • 尺寸需要不小于256x192左右
  • 它不需要是彩色的,甚至不需要全灰度。我看过令人信服的静止图像,只有大约 16 个灰色
  • 它可以有一种模式,但不是人眼就能立即看到的模式。如果有人拍了一帧,一两分钟后可以发现图案(这使它可压缩?)没关系
  • 第 2 帧到第 n 帧可以使用相当多的 alpha,但是当我开始使用大的 alpha 水平条纹时,我的眼睛立刻就注意到了。所以你不会用简单的作弊来积累一堆 RLE。
  • 以上所有,仍然需要在 30-33 毫秒的帧速度下看起来不错。没有变速或依赖任何比这更快的东西。

也可以接受:符合上述约束的 apng。如果你能想到的话,甚至可能是 mpeg(我不知道 DCT 是如何发挥它的魔力的)。

理想情况下,我可以在 250kbyte 范围内得到一些东西,但我会接受任何比我上周制作的 9 meg 怪物小得多的东西。

哦,还有最后一件事:显然我不希望任何人为我提供图形。我只是在寻找一些能让我最终自己到达那里的技巧。

4

4 回答 4

3

这是一个非常有趣的问题。

静态(随机噪声)本质上实际上是高度不可压缩的。信息论说,真正的噪声基本上是不可压缩的,并且包含的​​模式越多,它的可压缩性就越高(达到 1 或 0 的实线完全可压缩的程度。

理想的情况是创建一个真正的噪声生成器(只是随机数),但这在您的问题的限制范围内无济于事。

我能想到的最好的事情是存储一些小的静态图块并以交错的方式显示它们,以防止任何图案吸引眼球。除此之外,将其压缩到 256 x 192 x 20 / 2 或大约 500 KB(假设 20 帧,分辨率为 256 x 192,使用 4 位色深)之外,您将不会有太多运气。

只需在 16 色模式下对动画 gif 进行编码即可。

于 2012-08-29T00:55:44.047 回答
2

是的,您可以通过有损 GIF 压缩来实现这一点,或者更确切地说是使用专门装配的压缩器来输出嘈杂的 LZW 流。

LZW 压缩的最佳情况是输出 X 像素,然后是 X+1 像素,然后是 X+2 像素,等等。很容易产生噪声。

尝试将函数搞砸gfc_lookup(几乎)总是返回最长的字典项并用它压缩一系列嘈杂的帧:

https://github.com/pornel/giflossy/blob/master/src/gifwrite.c#L270

于 2013-01-10T16:12:30.567 回答
2

很老但仍然没有回答的答案(无论如何都没有检查)

  1. 所以创建 NoSignal 图像数据

    如果不清楚如何阅读:

  2. 编码成gif

    玩了一下,所以我使用了分辨率320x240,可用的最低位分辨率是3 bit每像素。低的不好看。仅单个全局调色板(很明显)此处 300KB 示例

    无信号 320x240x3

[笔记]

如果这仅适用于某些应用程序,则在运行时生成图像它实际上只是几行代码,请参阅项目符号#1中的链接答案

于 2015-05-15T18:11:05.603 回答
1

平时不容易。根据定义,良好的随机性(高熵)不能很好地压缩。拥有灰度可能会有所帮助,但作用不大。

如果您想在网页上执行此操作并且您有(一些)控制权,您可以随时编写一小段 JS 来提供帮助……如果您可以做到这一点,那么您可以执行以下操作:

  1. 使用高熵静态创建一个大约 1.5 倍所需大小的 gif。
  2. 将剪辑设置为您想要的大小。
  3. 然后你通过改变起始偏移量来随机移动它。

只要您的偏移彼此相距相当远(并且不重复模式),通常很难将其识别为运动,并且看起来确实像静止的。

大约 20 年前,我在 Amiga 上做了这个技巧,以在有限内存演示上模拟静态,它工作得非常好......它也不需要快速的低级代码,因为所有这些都是通过更改偏移量和 co-处理器 bitblit-ed 其余部分。

于 2013-03-04T20:45:24.203 回答