Animation GIF图像在隔行扫描时失真
我有一些图像是使用Imagemagick及其隔行操作转换的。这些是动画的GIF图像。问题是,在转换过程中,图像发生了扭曲,我没有原始图像,因为前一个开发人员做了这件美妙的事情。GIF不再设置动画,并且每一帧都有4个相同帧的副本,且大小逐渐减小。我以前没有在Imagemagick上做过很多工作 有没有办法从失真的版本中恢复原始图像 使用的命令是:Animation GIF图像在隔行扫描时失真,animation,imagemagick,gif,imagemagick-convert,interlacing,Animation,Imagemagick,Gif,Imagemagick Convert,Interlacing,我有一些图像是使用Imagemagick及其隔行操作转换的。这些是动画的GIF图像。问题是,在转换过程中,图像发生了扭曲,我没有原始图像,因为前一个开发人员做了这件美妙的事情。GIF不再设置动画,并且每一帧都有4个相同帧的副本,且大小逐渐减小。我以前没有在Imagemagick上做过很多工作 有没有办法从失真的版本中恢复原始图像 使用的命令是: 转换-隔行扫描平面 谢谢图像存储为4个单独的图像 包含每8行图像(大小的1/8) 包含图像中每个缺失的第四行(大小的1/8) 包含图像中丢失的每一条偶数
转换-隔行扫描平面
谢谢图像存储为4个单独的图像
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感谢您的回复。我已经添加了图片。添加了重复图片和一些链接+信息来回答。如果您也需要辅助扩展提要,那么您需要自己处理它。另外,时间可能会有点偏离原来的…非常感谢这一点。我已经开始编写一个脚本来完成这项工作,因为我有数百个这样的图像。所以,我必须从图像中读取数据的字节,并尝试在每一帧上找到隔行扫描位并翻转它。如果我错了,请纠正我。@是的,没错。。。看看链接(如何找到图像块在GIF图像中的位置?)从我的答案中有C++源用于处理GIFS…我已经能够找到第一帧的交错位。在这之后,第一帧变得完美。但是,对于其他帧,我仍然找不到它们。我无法确定如何在图像数据块中查找帧。您能帮忙吗?@Nerve您需要处理/skp帧LZW数据,类似于跳过扩展块,当检测到帧的ecnd时,以与第一帧相同的方式搜索下一帧(除了不再有全局调色板)。所有的块都有第一个字节,即块的长度,然后是数据,所以跳过它。。。如果找到终止符块(大小=0),则位于图像帧的末尾。如果我没记错的话,在第一块图像数据之前,有一个字节告诉我有多少位是从开始的。顺便说一句,你的图像有一半以上是辅助控制源,我在回答中修复的没有它们(略小于你原来gif大小的一半)。。。