我有使用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