2

扭曲的 GIF

我有一些使用Imagemagick及其交错操作转换的图像。这些是动画GIF图像。问题是,在转换时,图像已经变形,我没有原始图像,因为之前的开发人员做了很棒的事情。GIF不再具有动画效果,并且每帧都有 4 个相同帧的副本,但尺寸会逐渐减小。我之前在Imagemagick上工作不多。

有什么办法可以从扭曲的版本中恢复原始图像?

使用的命令是:

convert <old-file.gif> -interlace plane <new-file.gif>

谢谢

4

1 回答 1

3

隔行扫描的 GIF图像存储为 4 个分离的图像

  1. 包含每 8 行图像(大小的 1/8)
  2. 包含每个缺失的第 4 行图像(大小的 1/8)
  3. 包含每条缺失的偶数行图像(大小的 1/4)
  4. 包含每奇数行图像(大小的 1/2)

这样做是为了在通过缓慢的 Internet 连接加载时可以看到图像......随着每个新块增加细节......

因此,如果您的图像看起来像 4 个非常相似的图像,那么结果是好的,您只是错误地解码它或者 GIF 没有设置交错标志。

如果您的文件不再包含动画帧,那么您就不走运了,但是如果它们在那里并且没有渲染,那么检查文件的 GIF 结尾是否放错了位置或检查它们可能被搞砸的标志...您是否尝试过不同的GIF 查看器(有些是错误的)

[Edit1] 解码 GIF 后

你得到了GIF89a并且你在每一帧中都缺少交错的标志。所以图像被正确地隔行扫描,但观众认为它根本没有隔行扫描......您需要在每个帧头中标记隔行扫描标志。

struct _img // this is image frame header
    {
    // Logical Image Descriptor
    BYTE Separator;         /* Image Descriptor identifier 0x2C */
    WORD x0;                /* X position of image on the display */
    WORD y0;                /* Y position of image on the display */
    WORD xs;                /* Width of the image in pixels */
    WORD ys;                /* Height of the image in pixels */
    BYTE Packed;            /* Image and Color Table Data Information */
    } img;

img.Packed|=64; // this will set the interlaced flag

为此,您需要解码/流式复制 GIF,这并不像听起来那么容易。

看:

这里是帧复制 + 去隔行 + 隔行编码的结果(跳过控制/信息/辅助馈送......)

修复图像

于 2015-11-09T08:08:24.303 回答