我有一些使用 Imagemagick 转换的图像及其隔行扫描操作。这些是动画 GIF 图片。问题在于,在转换时,图像已经扭曲,我没有原始图像,因为以前的开发人员做了很棒的事情。 GIF 不再是动画效果,每个帧都有相同帧的4个副本,大小越来越小。我以前没有在 Imagemagick 上做太多工作。
有什么办法可以从扭曲的版本中恢复原始图像吗?
使用的命令是:
Arrays.sort(files, new CustomFileNameOrderingComparator());
由于
答案 0 :(得分:2)
interlaced GIF图像存储为4个分离的图像
这样做可以在通过缓慢的互联网连接加载时看到图像...增加每个新块的细节...
因此,如果您的图片看起来像4个非常相似的图像,那么结果就是好的,您只是错误地解码它或者GIF没有设置隔行扫描标记。
如果您的文件不再包含动画帧,那么您运气不好但是如果它们在那里并且没有渲染那么请检查GIF文件末尾是否放错位置或检查它们可能被搞砸的标志...有你试过不同的GIF查看器(有些是错误的)
解码GIF后[Edit1]
你有 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,这听起来并不那么容易。
请参阅:
这里帧复制+去隔行+隔行编码的结果(跳过控制/信息/辅助馈送......)