專利名稱:一種將gif文件轉(zhuǎn)換為swf文件的方法
技術(shù)領(lǐng)域:
本發(fā)明涉及計(jì)算機(jī)動畫制作技術(shù),尤其涉及一種將GIF文件轉(zhuǎn)換為SWF文件的方法。
背景技術(shù):
在早期的計(jì)算機(jī)動畫制作中,圖像交互格式(GIF,Graphics InterchangeFormat)文件是主要的實(shí)現(xiàn)形式。如今,隨著因特網(wǎng)的飛速發(fā)展,F(xiàn)lash技術(shù)開始慢慢地替代GIF,成為制作網(wǎng)頁多媒體動畫最強(qiáng)有力的工具。Flash是由美國MACROMEDIE公司推出的一款多媒體動畫制作軟件。它是一種交互式動畫設(shè)計(jì)工具,用它可以將音樂、聲效、動畫方便地融合在一起,制作出高品質(zhì)的動畫效果。
利用Flash技術(shù)可以制作出一種后綴名為SWF(Shockwave Format)的動畫,這種格式的動畫圖像能夠用比較小的體積來表現(xiàn)豐富的多媒體形式。在圖像的傳輸方面,不必等到文件全部下載才能觀看,而是可以邊下載邊觀看,因此特別適合網(wǎng)絡(luò)傳輸,特別是在傳輸速率不佳的情況下,也能取得較好的效果。事實(shí)也證明了這一點(diǎn),SWF如今已被大量應(yīng)用于Web網(wǎng)頁進(jìn)行多媒體演示與交互性設(shè)計(jì)。此外,SWF動畫是基于矢量技術(shù)制作的,因此不管將畫面放大和縮小多少倍,畫面不會因此而有任何損害,并且也節(jié)省了動畫文件的大小,在網(wǎng)絡(luò)帶寬有限的情況下提高網(wǎng)絡(luò)傳輸?shù)乃俣???傊?,SWF格式的作品以其高清晰度的畫質(zhì)和小巧的體積,受到了越來越多網(wǎng)頁設(shè)計(jì)者的青睞,也越來越成為網(wǎng)頁動畫和網(wǎng)頁圖片設(shè)計(jì)制作的主流,已成為網(wǎng)上動畫的事實(shí)標(biāo)準(zhǔn)。
基于這種情況,常常需要將早期動畫制作的GIF文件轉(zhuǎn)換為Flash技術(shù)下的SWF文件。雖然GIF動畫和SWF動畫都是通過連續(xù)播放多個(gè)不同內(nèi)容的幀而形成的,但是它們播放機(jī)制不同。
GIF文件在播放時(shí),顯示完當(dāng)前幀之后,即將顯示下一幀的時(shí)候,對當(dāng)前幀圖像有兩種處理方法第一種是保留當(dāng)前幀圖像,將即將顯示的一幀直接疊加在當(dāng)前幀的上層;第二種是清除前面所有幀的圖像,恢復(fù)背景色,將即將顯示的一幀疊加在背景色上。在一個(gè)GIF文件中可以混合使用這兩種處理方法,其可以通過每一幀都具有的DisposeMethod值來標(biāo)識,即當(dāng)前幀的DisposeMethod為1時(shí),采用第一種方法處理當(dāng)前幀圖像;當(dāng)前幀的DisposeMethod非1時(shí),采用第二種方法處理當(dāng)前幀圖像。
然而,SWF文件卻不同。在SWF文件中存在一個(gè)顯示列表,所有幀的內(nèi)容都保存在該顯示列表中,當(dāng)Flash播放器執(zhí)行顯示幀的命令時(shí),SWF文件取出整個(gè)顯示列表,顯示當(dāng)前幀,而顯示下一幀時(shí)直接將其疊加在當(dāng)前幀的上層。這類似于GIF文件對當(dāng)前幀的第一種處理方法。
目前,將GIF文件轉(zhuǎn)換成SWF文件的主要方法是將GIF文件中每一幀的位圖信息簡單地復(fù)制到SWF文件顯示列表的對應(yīng)幀中,轉(zhuǎn)換后的SWF文件在播放時(shí)按照自身的播放機(jī)制來播放每一幀,這樣,如果原GIF文件中存在將前面幀的圖像清除,恢復(fù)背景色,然后將下一幀疊加在背景色上的情況,則在SWF文件的播放過程中無法體現(xiàn)。因此,這種轉(zhuǎn)換方法沒有考慮GIF文件和SWF文件對幀與幀之間層次覆蓋關(guān)系處理方法的不同,使轉(zhuǎn)換后SWF文件不能完全體現(xiàn)GIF文件中幀與幀之間的層次覆蓋關(guān)系,因此,二者的圖像顯示效果不一致,會導(dǎo)致轉(zhuǎn)換后圖像的顯示效果不好。
發(fā)明內(nèi)容
有鑒于此,本發(fā)明提出一種將GIF文件轉(zhuǎn)換為SWF文件的方法,該方法可以在轉(zhuǎn)換后的SWF文件中完全體現(xiàn)原GIF文件中幀與幀之間的層次覆蓋關(guān)系,從而使轉(zhuǎn)換后的圖像顯示效果更好。
為了實(shí)現(xiàn)上述目的,本發(fā)明提供一種將GIF文件轉(zhuǎn)換為SWF文件的方法,該方法具體包括如下步驟A.判斷GIF文件在播放時(shí)顯示完當(dāng)前幀后對該幀的處理方式,如果是保留該幀的內(nèi)容,執(zhí)行步驟B;如果是清除包括該幀在內(nèi)的以前幀的內(nèi)容,則執(zhí)行步驟C;B.將GIF文件當(dāng)前幀的內(nèi)容復(fù)制到SWF文件中,并在SWF文件中將該幀標(biāo)識為播放時(shí)保留該幀內(nèi)容,同時(shí)將GIF文件的下一幀作為當(dāng)前幀,返回執(zhí)行步驟A;C.將GIF文件當(dāng)前幀的內(nèi)容復(fù)制到SWF文件中,并在SWF文件中將該幀標(biāo)識為播放該幀的下一幀時(shí)清除包括該幀在內(nèi)的以前幀的內(nèi)容,同時(shí)將GIF文件的下一幀作為當(dāng)前幀,返回執(zhí)行步驟A。
在所述步驟C之后,即將GIF文件轉(zhuǎn)換為SWF文件之后,進(jìn)一步包括依次播放SWF文件的各幀圖像,判斷顯示完的一幀的標(biāo)識,如果顯示完的一幀的標(biāo)識是保留該幀內(nèi)容,則將顯示完一幀的下一幀疊加在顯示完的一幀上,返回執(zhí)行本步驟;如果顯示完的一幀的標(biāo)識是清除包括該幀在內(nèi)的以前幀的內(nèi)容,則清除包括顯示完一幀在內(nèi)的以前幀的所有內(nèi)容,返回執(zhí)行本步驟。
以上所述的將顯示完一幀的下一幀疊加在該幀上,包括為下一幀創(chuàng)建一個(gè)新層,位于顯示完一幀的所在層之上,將下一幀的內(nèi)容放在該新層上。
另外,步驟A中所述判斷GIF文件在播放時(shí)顯示完當(dāng)前幀后對該幀的處理方式,包括判斷GIF文件當(dāng)前幀的DisposeMethod值是否是預(yù)先設(shè)定的值,其中,所述預(yù)先設(shè)定的值是表示GIF文件在播放時(shí)顯示完當(dāng)前幀后保留該幀內(nèi)容的值。
所述步驟B和步驟C中,將GIF文件當(dāng)前幀復(fù)制到SWF文件中,包括將GIF文件當(dāng)前幀的內(nèi)容復(fù)制到SWF文件顯示列表的對應(yīng)幀中。
此外,所述步驟C中,在SWF文件中將該幀標(biāo)識為播放下一幀時(shí)清除SWF文件中包括該幀在內(nèi)的以前幀的內(nèi)容,包括將該幀標(biāo)識為預(yù)先設(shè)定的值。
從以上技術(shù)方案可以看到,本發(fā)明提供的一種將GIF文件轉(zhuǎn)換為SWF文件的方法,能夠?qū)IF文件的內(nèi)容復(fù)制到SWF文件的同時(shí)使轉(zhuǎn)換后的SWF文件中體現(xiàn)原GIF文件的兩種圖像覆蓋方式,從而使轉(zhuǎn)換后SWF文件的圖像顯示效果與原GIF文件的圖像顯示效果一致,避免了SWF文件顯示效果不好的問題。
圖1是將GIF文件的兩種圖像層次覆蓋關(guān)系轉(zhuǎn)換到SWF文件中的操作流程圖;圖2是轉(zhuǎn)換后SWF文件的播放流程圖。
具體實(shí)施例方式
下面結(jié)合附圖及具體實(shí)施例對本發(fā)明再作進(jìn)一步詳細(xì)的說明。
由于GIF文件在播放時(shí)對當(dāng)前幀有兩種不同的處理方法,而SWF文件在播放時(shí)對當(dāng)前顯示列表只有一種處理方式,所以通過現(xiàn)有技術(shù)的簡單拷貝會使轉(zhuǎn)換后SWF文件不能完全體現(xiàn)GIF文件幀與幀之間的層次覆蓋關(guān)系,對此,本發(fā)明通過對SWF文件的顯示列表進(jìn)行修改來實(shí)現(xiàn)轉(zhuǎn)換后SWF文件完全體現(xiàn)原GIF文件的圖像覆蓋關(guān)系。
由于GIF文件可以通過DisposeMethod值來標(biāo)識不同的處理方法,所以可以分別針對不同的DisposeMethod值進(jìn)行不同的轉(zhuǎn)換。對應(yīng)于待轉(zhuǎn)換的GIF文件,創(chuàng)建SWF文件的顯示列表,該顯示列表包括多個(gè)幀,分別對應(yīng)于GIF文件的幀,其表明轉(zhuǎn)換后SWF文件每一幀顯示的內(nèi)容。當(dāng)GIF文件中某一幀的DisposeMethod的值為1時(shí),在轉(zhuǎn)換過程中,除了將GIF文件該幀的內(nèi)容直接復(fù)制到SWF文件顯示列表的對應(yīng)幀外,還需要在SWF文件顯示列表的該幀處作一個(gè)標(biāo)識,例如標(biāo)識該幀為1,以表示在播放SWF文件時(shí)對于這一幀需要保留,這樣在播放SWF文件時(shí),播放器遇到這個(gè)標(biāo)識就保留顯示列表的內(nèi)容,為該幀的下一幀創(chuàng)建一個(gè)新層,新層的層數(shù)設(shè)置為當(dāng)前所有層數(shù)再加一,這樣能保證新加入的層覆蓋以前層的內(nèi)容,然后將下一幀的內(nèi)容放置在該新層上進(jìn)行播放。例如,當(dāng)GIF文件前兩幀的DisposeMethod的值都為1,則轉(zhuǎn)換成SWF文件時(shí),將GIF文件的這兩幀分別復(fù)制到SWF文件顯示列表的對應(yīng)幀中,并將這兩幀都標(biāo)識為1,播放SWF文件第一幀時(shí),為第一幀創(chuàng)建一個(gè)層,為第一層,將從GIF文件復(fù)制過來的第一幀的內(nèi)容放在這一層上顯示,播放第二幀時(shí),同樣為第二幀創(chuàng)建一個(gè)新層,為第二層,該層位于第一層的上面,然后將從GIF文件復(fù)制過來的第二幀內(nèi)容放在第二層上進(jìn)行顯示,于是,第二幀的內(nèi)容就疊加在了第一幀內(nèi)容的上面,所以這樣轉(zhuǎn)換后的SWF文件在播放時(shí)就顯示了GIF文件將下一幀疊加到當(dāng)前幀上的情況。
而當(dāng)GIF文件中某一幀中的DisposeMethod的值為非1時(shí),在轉(zhuǎn)換過程中,類似地,除了將GIF文件該幀的內(nèi)容直接復(fù)制到SWF文件顯示列表的對應(yīng)幀外,仍然需要對SWF文件顯示列表的這一幀做一個(gè)標(biāo)識,例如標(biāo)識該幀為0,以表示在播放時(shí)需要將顯示列表清空,這樣,在播放SWF文件時(shí),播放器遇到標(biāo)識0時(shí),就清除顯示列表中所有幀的內(nèi)容,然后重新創(chuàng)建一個(gè)新層,將該幀的下一幀內(nèi)容放在這個(gè)新層上顯示,此時(shí)顯示列表中只有當(dāng)前這一層的內(nèi)容,播放器只顯示這一層的內(nèi)容,于是轉(zhuǎn)換后的SWF文件就顯示了GIF文件清除以前幀的內(nèi)容將下一幀疊加在背景色上的情況。
綜合上述,將GIF文件轉(zhuǎn)換為SWF文件的具體轉(zhuǎn)換步驟如下步驟101對應(yīng)于GIF文件的幀,創(chuàng)建SWF文件的顯示列表,其中顯示列表包括多個(gè)幀,每一幀對應(yīng)于GIF文件的每一幀;步驟102判斷GIF文件當(dāng)前幀的DisposeMethod的值是否為1,如果是,執(zhí)行步驟103;否則,執(zhí)行步驟104;步驟103DisposeMethod的值為1說明在播放完當(dāng)前幀后即將顯示下一幀時(shí)GIF文件保留當(dāng)前幀圖像,將下一幀疊加在當(dāng)前幀上,此時(shí),將GIF文件當(dāng)前幀的內(nèi)容復(fù)制到SWF文件顯示列表的對應(yīng)幀中,并將顯示列表中的這一幀標(biāo)識為1,以表示在播放SWF文件該幀的下一幀時(shí)保留該幀內(nèi)容,同時(shí)將GIF文件的下一幀作為當(dāng)前幀,返回執(zhí)行步驟102;步驟104DisposeMethod的值非1說明在播放完當(dāng)前幀后即將顯示下一幀時(shí)GIF文件將前面所有幀的內(nèi)容清除,恢復(fù)背景色,將下一幀疊加在背景色上,此時(shí),將GIF文件當(dāng)前幀的內(nèi)容復(fù)制到SWF文件顯示列表的對應(yīng)幀中,并將顯示列表中的這一幀標(biāo)識為0,以表示在播放SWF文件該幀的下一幀時(shí)清除包括該幀在內(nèi)的以前幀的內(nèi)容,同時(shí)將GIF文件的下一幀作為當(dāng)前幀,返回執(zhí)行步驟102。
按照上面的步驟,就可以通過對SWF文件顯示列表的修改,實(shí)現(xiàn)轉(zhuǎn)換后SWF文件分別體現(xiàn)原GIF文件的兩種圖像層次覆蓋關(guān)系,從而使轉(zhuǎn)換后SWF文件顯示效果更好。轉(zhuǎn)換后,SWF文件的播放步驟如下步驟201取出轉(zhuǎn)換后SWF文件的顯示列表;步驟202播放SWF文件顯示列表當(dāng)前幀的圖像;步驟203判斷顯示列表當(dāng)前幀的標(biāo)識是1還是0,也就是對顯示列表下一幀與當(dāng)前幀的層次覆蓋關(guān)系進(jìn)行判斷,如果為1,執(zhí)行步驟204;否則,執(zhí)行步驟205;步驟204當(dāng)前幀的標(biāo)識為1,說明需要將下一幀疊加在當(dāng)前幀的上層,所以為下一幀創(chuàng)建一個(gè)新層,層數(shù)為當(dāng)前所有層數(shù)再加一,將下一幀的內(nèi)容放在該新層上,然后將該幀作為當(dāng)前幀,返回執(zhí)行步驟202;步驟205當(dāng)前幀的標(biāo)識為0,說明需要將下一幀疊加在背景色上,所以首先將以前所有層的內(nèi)容清空,然后為下一幀創(chuàng)建一個(gè)新層,設(shè)為第一層,將下一幀的內(nèi)容放在第一層上,然后將該幀作為當(dāng)前幀,返回執(zhí)行步驟202。
從以上所述可以看到,在按照本發(fā)明所提供的技術(shù)將GIF文件轉(zhuǎn)換為SWF文件的過程中,由于對SWF文件的顯示列表進(jìn)行了修改,所以在播放SWF文件時(shí),可以完全體現(xiàn)原GIF文件的圖像層次覆蓋關(guān)系,使轉(zhuǎn)換前后GIF文件和SWF文件的圖像顯示效果一致。
以上實(shí)施例中,在GIF文件當(dāng)前幀的DisposeMethod為1時(shí),將SWF文件顯示列表的對應(yīng)幀標(biāo)識為1,而在DisposeMethod非1時(shí),將SWF文件顯示列表的對應(yīng)幀標(biāo)識為0,事實(shí)上,在實(shí)際應(yīng)用中,可以針對DisposeMethod的不同值對SWF文件的對應(yīng)幀進(jìn)行其它標(biāo)識,只要在播放時(shí),SWF文件播放器能識別它們并針對它們采取不同的播放方法即可。
以上所述,僅為本發(fā)明的較佳實(shí)施例而已,并非用于限定本發(fā)明的保護(hù)范圍。
權(quán)利要求
1.一種將GIF文件轉(zhuǎn)換為SWF文件的方法,其特征在于,該方法包括如下步驟A.判斷GIF文件在播放時(shí)顯示完當(dāng)前幀后對該幀的處理方式,如果是保留該幀的內(nèi)容,執(zhí)行步驟B;如果是清除包括該幀在內(nèi)的以前幀的內(nèi)容,則執(zhí)行步驟C;B.將GIF文件當(dāng)前幀的內(nèi)容復(fù)制到SWF文件中,并在SWF文件中將該幀標(biāo)識為播放時(shí)保留該幀內(nèi)容,同時(shí)將GIF文件的下一幀作為當(dāng)前幀,返回執(zhí)行步驟A;C.將GIF文件當(dāng)前幀的內(nèi)容復(fù)制到SWF文件中,并在SWF文件中將該幀標(biāo)識為播放該幀的下一幀時(shí)清除包括該幀在內(nèi)的以前幀的內(nèi)容,同時(shí)將GIF文件的下一幀作為當(dāng)前幀,返回執(zhí)行步驟A。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于,在所述步驟C之后,將GIF文件轉(zhuǎn)換為SWF文件之后,進(jìn)一步包括依次播放SWF文件的各幀圖像,判斷顯示完的一幀的標(biāo)識,如果顯示完的一幀的標(biāo)識是保留該幀內(nèi)容,則將顯示完一幀的下一幀疊加在顯示完的一幀上,返回執(zhí)行本步驟;如果顯示完的一幀的標(biāo)識是清除包括該幀在內(nèi)的以前幀的內(nèi)容,則清除包括顯示完一幀在內(nèi)的以前幀的所有內(nèi)容,返回執(zhí)行本步驟。
3.根據(jù)權(quán)利要求2所述的方法,其特征在于,將顯示完一幀的下一幀疊加在該幀上,包括為下一幀創(chuàng)建一個(gè)新層,位于顯示完一幀的所在層之上,將下一幀的內(nèi)容放在該新層上。
4.根據(jù)權(quán)利要求1所述的方法,其特征在于,步驟A中所述判斷GIF文件在播放時(shí)顯示完當(dāng)前幀后對該幀的處理方式,包括判斷GIF文件當(dāng)前幀的DisposeMethod值是否是預(yù)先設(shè)定的值,其中,所述預(yù)先設(shè)定的值是表示GIF文件在播放時(shí)顯示完當(dāng)前幀后保留該幀內(nèi)容的值。
5.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述步驟B和步驟C中,將GIF文件當(dāng)前幀復(fù)制到SWF文件中,包括將GIF文件當(dāng)前幀的內(nèi)容復(fù)制到SWF文件顯示列表的對應(yīng)幀中。
6.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述步驟C中,在SWF文件中將該幀標(biāo)識為播放下一幀時(shí)清除SWF文件中包括該幀在內(nèi)的以前幀的內(nèi)容,包括將該幀標(biāo)識為預(yù)先設(shè)定的值。
全文摘要
本發(fā)明公開了一種將GIF文件轉(zhuǎn)換為SWF文件的方法,該方法包括判斷GIF文件在播放時(shí)顯示完當(dāng)前幀后對該幀的處理方式,如果是保留該幀的內(nèi)容,則將GIF文件的當(dāng)前幀復(fù)制到SWF文件中,并在SWF文件中將該幀標(biāo)識為在播放時(shí)保留該幀內(nèi)容;如果是清除包括該幀在內(nèi)的以前幀的內(nèi)容,則將GIF文件的當(dāng)前幀復(fù)制到SWF文件中,并在SWF文件中將該幀標(biāo)識為播放該幀的下一幀時(shí)清除包括該幀在內(nèi)的以前幀的所有內(nèi)容。該方法能使轉(zhuǎn)換后SWF文件體現(xiàn)原GIF文件幀與幀之間的兩種層次覆蓋關(guān)系,使二者在轉(zhuǎn)換前后顯示效果一致。
文檔編號G06T9/00GK1960490SQ20051011549
公開日2007年5月9日 申請日期2005年11月4日 優(yōu)先權(quán)日2005年11月4日
發(fā)明者王麒 申請人:騰訊科技(深圳)有限公司