我有使用ImageMagick的和隔行扫描转换操作一些图片。这些是动画GIF图像。问题在于,在转换的同时,图像扭曲了,我没有原始图像,因为它是以前的开发人员做出了美妙的事情。 GIF不再具有动画效果,并且每个帧都有相同帧的4个副本,并且大小逐渐减小。我之前没有在Imagemagick上工作太多。
有没有什么办法可以从失真的版本恢复原始图像?
的命令所用的是:
convert <old-file.gif> -interlace plane <new-file.gif>
由于
我有使用ImageMagick的和隔行扫描转换操作一些图片。这些是动画GIF图像。问题在于,在转换的同时,图像扭曲了,我没有原始图像,因为它是以前的开发人员做出了美妙的事情。 GIF不再具有动画效果,并且每个帧都有相同帧的4个副本,并且大小逐渐减小。我之前没有在Imagemagick上工作太多。
有没有什么办法可以从失真的版本恢复原始图像?
的命令所用的是:
convert <old-file.gif> -interlace plane <new-file.gif>
由于
interlaced GIF图像被存储为4分离的图像
这是这样做的图像,同时装载可见通过缓慢的互联网连接...增加每个新块的细节...
因此,如果您的图像看起来像4个非常相似的图像, 。
如果你的文件不再包含动画帧,那么你运气不好,但如果他们在那里,并没有渲染,然后检查文件的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,这听起来并不那么容易。
见:
这里的帧的结果复制+去隔行+隔行编码(跳过控制/信息/辅助馈送...)
添加图片例如,我们可以看看它是否真的是错误的(并且看看它是否包含它应该或不包含的内容)......也就是GIF87a或GIF89a ...您正在预览什么?你有没有尝试过不同的GIF查看器? – Spektre
@Spektre感谢您的回复。我已经添加了图像。 – Nerve
添加了repiared图片和一些链接+信息来回答。如果您还需要辅助扩展Feed,则需要自行处理。时间可能会从原来的一点点... – Spektre