GIF - GIF

GIF
Aylanadigan er (katta) .gif
Fayl nomi kengaytmasi
.gif
Internet-media turi
rasm / gif
Kodni kiritingGIFf
Bir xil turdagi identifikator (UTI)com.compuserve.gif
Sehrli raqamGIF87a/GIF89a
Tomonidan ishlab chiqilganCompuServe
Dastlabki chiqarilish15 iyun 1987 yil; 33 yil oldin (1987-06-15)[1]
Oxirgi nashr
89a
(1989; 31 yil oldin (1989)[2])
Format turiyo'qotishsiz bitmap rasm formati
Veb-saytwww.w3.org/ Grafika/ GIF/ spec-gif89a.Xabar

The Grafik almashinuvi formati (GIF; /ɪf/ JIF yoki /ɡɪf/ GHIF ) a bitmap rasm formati Onlayn xizmatlar provayderi jamoasi tomonidan ishlab chiqilgan CompuServe amerikalik kompyuter olimi boshchiligida Stiv Uilxit 1987 yil 15-iyunda.[1] Keyinchalik u keng qo'llanila boshlandi Butunjahon tarmog'i ilovalar va operatsion tizimlar o'rtasida keng qo'llab-quvvatlash va portativligi tufayli.

Format qadar qo'llab-quvvatlaydi Piksel uchun 8 bit har bir rasm uchun, bitta rasmning o'ziga mos kelishiga imkon beradi palitrasi dan tanlangan 256 gacha turli xil ranglardan 24 -bit RGB rang maydoni. Shuningdek, u qo'llab-quvvatlaydi animatsiyalar va har bir ramka uchun 256 ranggacha bo'lgan alohida palitraga imkon beradi. Ushbu palitraning cheklovlari GIF-ni rangli fotosuratlarni va boshqalarni ko'paytirish uchun kamroq moslashtiradi rangli gradyanli tasvirlar, lekin ranglarning qattiq joylari bo'lgan grafikalar yoki logotiplar kabi oddiyroq tasvirlarga juda mos keladi. Videodan farqli o'laroq, GIF fayl formati ovozni qo'llab-quvvatlamaydi.

GIF tasvirlari yordamida siqiladi Lempel – Ziv – Uelch (LZW) ma'lumotlarni yo'qotmasdan siqish vizual sifatini pasaytirmasdan fayl hajmini kamaytirish texnikasi. Ushbu siqishni texnikasi 1985 yilda patentlangan. O'rtasida litsenziyalash shartnomasi bo'yicha tortishuvlar dasturiy ta'minot patenti egasi, Unisys va CompuServe 1994 yilda rivojlanishiga turtki bo'ldi Portativ tarmoq grafikasi (PNG) standarti. 2004 yilga kelib tegishli patentlarning amal qilish muddati tugadi.

Tarix

CompuServe fayllarni yuklab olish joylari uchun rangli tasvir formatini taqdim etish uchun 1987 yil 15 iyunda GIF-ni taqdim etdi. Bu ularning oldingi o'rnini egalladi uzunlikdagi kodlash faqat oq va qora bo'lgan format. GIF ishlatilganligi sababli mashhur bo'ldi LZW ma'lumotlarini siqish. Bu ishlatilgan uzunlikdagi kodlashdan ko'ra samaraliroq bo'lganligi sababli PCX va MacPaint, juda katta hajmdagi rasmlarni sekin bo'lsa ham tezda yuklab olish mumkin edi modemlar.

GIF-ning asl nusxasi chaqirildi 87a.[1] 1989 yilda CompuServe kengaytirilgan versiyasini chiqardi 89a,[2] bu animatsiyani kechiktirishni qo'llab-quvvatladi (oqimdagi bir nechta rasm 87a da allaqachon qo'llab-quvvatlangan), shaffof fon ranglari va dasturga xos metama'lumotlarni saqlash. 89a spetsifikatsiyasi, shuningdek, matn yorliqlarini matn sifatida kiritishni qo'llab-quvvatlaydi (ularni grafik ma'lumotlarga kiritmasdan), lekin displey shriftlari ustidan nazorat juda kam bo'lgani uchun bu xususiyat keng qo'llanilmaydi. Ikkala versiyani dastlabki oltitaga qarab ajratish mumkin bayt faylning ("sehrli raqam "yoki imzo), uni talqin qilganda ASCII, mos ravishda "GIF87a" va "GIF89a" ni o'qing.

CompuServe ko'plab kompyuterlar uchun yuklab olinadigan konversiya dasturlarini taqdim etish orqali GIF-ni qabul qilishni rag'batlantirdi. 1987 yil dekabrga qadar, masalan, an Apple IIGS foydalanuvchi an-da yaratilgan rasmlarni ko'rishi mumkin edi Atari ST yoki Commodore 64.[3] GIF veb-saytlarda tez-tez ishlatiladigan dastlabki ikkita rasm formatidan biri edi, ikkinchisi esa oq-qora XBM.[4]

1995 yil sentyabrda Netscape Navigator 2.0 qo'shildi animatsion GIF-larni ko'chirish qobiliyati.

Boshqaruv ma'lumotlari bilan birga bir nechta rasmlarni bitta faylda saqlash xususiyati Internetda oddiy ishlab chiqarish uchun keng qo'llaniladi animatsiyalar.

Ixtiyoriy interlacing xususiyati, rasmlarni skanerlash satrlarini tartibsiz holda saqlaydi, hatto qisman yuklab olingan rasm ham ma'lum darajada tanilgan bo'lib, GIF-ning ommalashishiga yordam berdi,[5] foydalanuvchi yuklab olishni bekor qilishi mumkin, agar u talab qilinadigan narsa bo'lmasa.

2015 yil may oyida Facebook GIF-ni qo'llab-quvvatladi.[6][7] 2018 yil yanvar oyida Instagram hikoya rejimiga GIF stikerlarini ham qo'shdi.[8]

Terminologiya

Kabi ism, so'z GIF ko'plab lug'atlarning yangi nashrlarida uchraydi. 2012 yilda Amerikaning qanoti Oksford universiteti matbuoti tan olingan GIF kabi fe'l "GIF faylini yaratish" ma'nosini anglatadi, chunki "GIFing sahnalarni almashish uchun mukammal vosita edi Yozgi Olimpiada "Matbuot leksikograflari buni o'zlariga tegishli deb hisoblashdi yil so'zi, GIF-lar "tadqiqot va jurnalistikani o'z ichiga olgan jiddiy dasturlarga ega vosita" ga aylandi.[9][10]

GIF talaffuzi

A-ning ishga tushirilishini e'lon qiluvchi kulgili tasvir oq uy Tumblr GIF-ni qattiq "G" tovushi bilan talaffuz qilishni taklif qiladi.

Format yaratuvchilari so'zni a bilan "jif" deb talaffuz qilishdi yumshoq "G" /ɪf/ "sport zalida" bo'lgani kabi. Stiv Uilxit aytilgan talaffuz ataylab amerikalikka o'xshashligini aytadi yong'oq moyi tovar belgisi Jif va CompuServe xodimlari ko'pincha ushbu brendning televizion reklamalarini aldab, "Choosy ishlab chiquvchilari GIF-ni tanlaydilar" deb aytishadi.[11] Bu so'z endi a bilan ham keng talaffuz qilinadi qattiq "G" /ɡɪf/ "sovg'a" dagi kabi.[12] 2017 yilda dasturlash veb-saytida norasmiy so'rovnoma Stack overflow qattiq "G" talaffuzi uchun sonli ustunlikni ko'rsatdi,[13] ayniqsa G'arbiy Evropadagi respondentlar orasida, har ikkala harfni alohida-alohida "G" harflari bilan ajratib ko'rsatish Osiyo va rivojlanayotgan mamlakatlarda mashhur bo'lganligi aniqlandi.[14]

The Amerika merosi lug'ati[15] ikkalasini ham keltiradi, asosiy talaffuz sifatida "jif" ni ko'rsatadi, while Amerika ingliz tilining Kembrij lug'ati[16] faqat qattiq "G" talaffuzini taklif qiladi. Merriam-Vebsterning kollegial lug'ati[17] va OED ikkala talaffuzni ham keltiring, lekin "gif" ni standart holatiga qo'ying ("ˈgif, ˈjif").[18] The Yangi Oksford Amerika Lug'ati uning ikkinchi nashrida faqat "jif" berdi[19] ammo uni 3-nashrida "jif, gif" ga o'zgartirdi.[20]

Talaffuz bo'yicha kelishmovchilik Internetda qizg'in bahs-munozaralarga sabab bo'ldi. 2013 yilda umr bo'yi yutuqlar mukofotini olish munosabati bilan Veb-mukofot marosimda Wilhite qiyin "G" talaffuzini rad etdi,[12][21][22] va uning nutqi 17000 postga olib keldi Twitter va 50 yangiliklar maqolalari.[23] The oq uy[12] va televizion dastur Xavf! shuningdek 2013 yil davomida bahslarga kirishdi.[22]

2020 yil fevral oyida, JM Smucker kompaniyasi, Jif yerfıstığı yog'i brendi egalari, jonlantirilgan tasvirlar bazasi va qidiruv tizimi bilan hamkorlik qildilar Gifiy cheklangan nashrda "Jif va GIF" (hashtag bilan #JIFvsGIF sifatida "yumshoq" G "talaffuzini faqat yerfıstığı moyiga, GIF esa faqat qattiq" G "talaffuzi bilan talaffuz qilinadi" deb hazil bilan e'lon qiladigan yorlig'i bo'lgan Jif yong'oq moyi kavanozi sifatida.[24]

Foydalanish

  • GIF-lar cheklangan miqdordagi ranglar bilan, masalan, logotiplar kabi o'tkir qirrali chiziqlar uchun mos keladi. Bu formatning yo'qotishsiz siqilishidan foydalanadi, bu qirralarning aniq belgilangan tekis ranglarini afzal ko'radi.[25]
  • GIF tasvirlari past ranglarni saqlash uchun ishlatilishi mumkin sprite o'yinlar uchun ma'lumotlar.[26]
  • GIF-lar kichik animatsiyalar va past aniqlikdagi videokliplar uchun ishlatilishi mumkin.[26]
  • GIF-lar Internet orqali xabar almashish paytida reaktsiya sifatida ishlatilishi mumkin, his-tuyg'ular va his-tuyg'ularni etkazish uchun ishlatiladi, so'zlardan foydalanishga alternativ
  • Tumblr, Facebook va Twitter kabi ijtimoiy media platformalarida mashhur.

Fayl formati

Kontseptual ravishda GIF fayli nol yoki undan ortiq "rasmlar" bilan to'ldirilgan qat'iy o'lchamdagi grafik maydonni ("mantiqiy ekran") tasvirlaydi. Ko'pgina GIF fayllari butun mantiqiy ekranni to'ldiradigan bitta rasmga ega. Boshqalar mantiqiy ekranni alohida pastki rasmlarga ajratadilar. Tasvirlar animatsion GIF faylida animatsion kadrlar vazifasini ham bajarishi mumkin, ammo ular yana mantiqiy ekranni to'ldirishga hojat yo'q.

GIF fayllari versiyani beradigan sobit uzunlikdagi sarlavha bilan boshlanadi ("GIF87a" yoki "GIF89a"), so'ngra mantiqiy ekranning piksel o'lchamlari va boshqa xususiyatlarini beradigan sobit uzunlikdagi Mantiqiy ekran tavsiflovchisi. Shuningdek, ekran deskriptori Global Color Table-ning mavjudligini va hajmini belgilashi mumkin.

00000000  47 49 46 38 39 61 01 00  01 00 80 00 00 00 00 00  |GIF89a ..........|00000010  ff ff ff 21 f9 04 01 00  00 00 00 2c 00 00 00 00  |...!.......,....|00000020  01 00 01 00 00 02 01 44  00 3b                    |....... D .;|0000002a

Keyinchalik, fayl segmentlarga bo'linadi, ularning har biri 1 baytli qo'riqchi tomonidan kiritiladi:

  • Rasm (0x2C tomonidan kiritilgan, ASCII vergul ',')
  • Kengaytma bloki (0x21 tomonidan kiritilgan, ASCII undov belgisi '!')
  • Fragman (0x3B qiymatdagi bitta bayt, ASCII nuqta-vergul ';'), bu faylning so'nggi bayti bo'lishi kerak.

Rasm mahalliy uzunlik jadvalining mavjudligi va hajmini belgilashi mumkin bo'lgan qat'iy uzunlikdagi tasvir tavsiflovchisidan boshlanadi (agar mavjud bo'lsa, keyingi raqam). Rasm ma'lumotlari quyidagicha: kodlanmagan belgilarning bit kengligini beradigan bir bayt (hatto ikki rangli tasvirlar uchun ham kamida 2 bit kenglikda bo'lishi kerak), so'ngra LZW kodlangan ma'lumotlarni o'z ichiga olgan pastki bloklarning bog'langan ro'yxati.

Kengaytma bloklari (87a spetsifikatsiyasida allaqachon aniqlangan mexanizm orqali "87a" ta'rifini "kengaytiradigan" bloklar) qo'riqchi, kengaytma turini ko'rsatuvchi qo'shimcha bayt va kengaytma ma'lumotlari bilan bog'langan pastki bloklarning ro'yxatidan iborat. Rasmni o'zgartiradigan kengaytma bloklari (masalan, ixtiyoriy animatsiyani kechiktirish vaqti va ixtiyoriy shaffof fon rangini belgilaydigan Grafik Boshqarish Kengaytmasi kabi) darhol ular murojaat qilgan rasm bilan segmentdan oldin bo'lishi kerak.

Rasm ma'lumotlari va kengaytma bloklari foydalanadigan bog'langan ro'yxatlar pastki bloklarning ketma-ketligidan iborat bo'lib, har bir kichik blok bayt bilan boshlanib, quyi blokdagi keyingi baytlar sonini beradi (1 dan 255 gacha). Sub-bloklar qatori bo'sh pastki blok (0 bayt) bilan tugatiladi.

Ushbu tuzilma, hatto barcha qismlar tushunilmagan bo'lsa ham, faylni tahlil qilishga imkon beradi. 87a bilan belgilangan GIF kengaytma bloklarini o'z ichiga olishi mumkin; niyat shundaki, dekoder faylni o'zi tushunmaydigan kengaytmali xususiyatlarsiz o'qishi va ko'rsatishi mumkin.

Fayl formatining to'liq tafsilotlari GIF spetsifikatsiyasida keltirilgan.[2]

Palletlar

Bilan saqlangan GIF rasmining misoli veb-xavfsiz palitrasi va Floyd-Shtaynberg usul. Rasmdagi ranglar soni kamayganligi sababli displey bilan bog'liq muammolar mavjud.

GIF palitraga asoslangan: faylda rasmda (ramkada) ishlatiladigan ranglar o'zlariga xosdir RGB a-da belgilangan qiymatlar palitrasi jadvali 256 tagacha yozuvni o'z ichiga olishi mumkin va rasm uchun ma'lumotlar palitralar jadvalidagi ranglarni indekslari (0-255) bo'yicha belgilaydi. Paletadagi rang ta'riflari millionlab soyalar rang maydonidan olinishi mumkin (224 soyalar, har bir boshlang'ich uchun 8 bit), lekin ramkadan foydalanishi mumkin bo'lgan maksimal ranglar soni 256 ni tashkil qiladi. GIF ishlab chiqilayotganda bu cheklov oqilona bo'lib tuyuldi, chunki bir nechta odam qo'shimcha ranglarni bir vaqtning o'zida aks ettirishi mumkin edi. Oddiy grafikalar, chizilgan rasmlar, multfilmlar va kulrang o'lchamdagi fotosuratlar odatda 256 rangdan kam rangga muhtoj.

Har bir ramka bitta indeksni "shaffof fon rangi" sifatida belgilashi mumkin: ushbu indeksga tayinlangan har qanday piksel piksel rangini xuddi shu holatdagi fonda oladi, bu avvalgi animatsiya doirasi tomonidan aniqlangan bo'lishi mumkin.

Birgalikda chaqirilgan ko'plab texnikalar ditering, ranglar orasidagi intervalgacha taxmin qilish uchun ikki yoki undan ortiq ranglarning piksellaridan foydalangan holda kichik ranglar palitrasi bilan ranglarning keng doirasini taxmin qilish uchun ishlab chiqilgan. Ushbu texnikalar rang chuqurligini aniqlashtirish uchun fazoviy o'lchamlarni qurbon qiladi. GIF spetsifikatsiyasining bir qismi bo'lmasa-da, keyinchalik GIF tasvirlari sifatida kodlangan rasmlarda ditering ishlatilishi mumkin. Bu ko'pincha GIF-rasmlar uchun ideal echim emas, chunki fazoviy o'lchamlarning yo'qolishi odatda tasvirni ekranda loyqa ko'rinishga olib keladi va shu bilan birga, dihitatsiya naqshlari ko'pincha GIF-ning asosiy maqsadiga qarshi ishlagan holda tasvir ma'lumotlarining siqilishiga xalaqit beradi.

Grafik veb-brauzerlarning dastlabki kunlarida[qachon? ], 8-bitli buferlarga ega grafik kartalar (faqat 256 ta rangga ruxsat berish) keng tarqalgan edi va GIF tasvirlarini veb-palitrasi.[kimga ko'ra? ] Bu bashorat qilinadigan displeyni ta'minladi, ammo ranglar tanlovini keskin chekladi. 24-bitli rang odatiy rangga aylanganda, uning o'rniga individual rasmlar uchun eng maqbul ranglar joylashtirilishi mumkin edi.

Kichik rasmlar uchun kichik rangli jadval etarli bo'lishi mumkin va rangli jadvalni kichik saqlash faylni tezroq yuklab olishga imkon beradi. 87a va 89a spetsifikatsiyalari ikkitadan rangli jadvallarga ruxsat beradin har qanday uchun ranglar n 1 dan 8 gacha. Ko'pgina grafik dasturlar ushbu jadval o'lchamlari bilan GIF rasmlarini o'qiydi va namoyish etadi; ammo ba'zilari qachonki barcha o'lchamlarni qo'llab-quvvatlamaydi yaratish tasvirlar. 2, 16 va 256 rangdagi jadvallar keng qo'llab-quvvatlanadi.

Haqiqiy rang

Odatda 256 rang chegarasidan ko'proq namoyish qilish texnikasini aks ettiruvchi animatsion GIF

GIF deyarli hech qachon ishlatilmasa ham haqiqiy rang tasvirlar, buni amalga oshirish mumkin.[27][28] GIF tasviri bir nechta rasm bloklarini o'z ichiga olishi mumkin, ularning har biri o'ziga xos 256 rangli palitraga ega bo'lishi mumkin va bloklar plitka bilan to'ldirilib, to'liq tasvirni yaratishi mumkin. Shu bilan bir qatorda, GIF89a spetsifikatsiyasi "shaffof" rang g'oyasini ilgari surdi, u erda har bir rasm bloki o'zining 255 ko'rinadigan ranglari va bitta shaffof ranglarini o'z ichiga olishi mumkin. To'liq tasvirni yuqoridagi qatlamlarning shaffof qismlari orqali ko'rsatiladigan har bir qatlamning ko'rinadigan qismi bilan tasvir bloklarini qatlamlash orqali yaratish mumkin.

To'liq rangli tasvirni GIF sifatida ko'rsatish uchun asl rasm 255 yoki 256 rangdan ko'p bo'lmagan kichikroq hududlarga bo'linishi kerak. Keyin ushbu mintaqalarning har biri o'zining mahalliy palitrasi bilan alohida rasm bloki sifatida saqlanadi va rasm bloklari birgalikda namoyish etilganda (plitka qo'yish yoki qisman shaffof tasvir bloklarini qatlamlash orqali) to'liq, to'liq rangli tasvir paydo bo'ladi. Masalan, rasmni 16 dan 16 pikselgacha (jami 256 piksel) plitkalarga ajratish hech qanday plitkaning mahalliy palitrada 256 rang chegarasidan oshmasligini ta'minlaydi, garchi kattaroq plitalardan foydalanish mumkin bo'lsa va shunga o'xshash ranglar birlashtirilsa, natijada biroz rang yo'qoladi ma `lumot.[27]

Har bir rasm bloki o'zining mahalliy rang jadvaliga ega bo'lishi mumkinligi sababli, ko'plab rasm bloklariga ega bo'lgan GIF fayli juda katta bo'lishi mumkin va bu to'liq rangli GIF-larning foydaliligini cheklaydi.[28] Bundan tashqari, barcha GIF ko'rsatuvchi dasturlar plitka yoki qatlamli tasvirlarni to'g'ri ishlamaydi. Ko'pgina ko'rsatuvchi dasturlar plitkalar yoki qatlamlarni animatsion ramkalar sifatida talqin qiladi va ularni ketma-ketlikda cheksiz animatsiya sifatida namoyish etadi[27] aksariyat veb-brauzerlarda ramkalar avtomatik ravishda 0,1 soniya yoki undan ko'proq kechikish vaqti bilan ko'rsatiladi.[29][30][yaxshiroq manba kerak ]

Misol GIF fayli

Namuna tasvir (kattalashtirilgan), haqiqiy o'lcham 3 piksel kenglikda va 5 balandlikda
Bayt D.h 30C gachah misolda 256 rang palitrasini aniqlang.

Microsoft Paint kichik oq-qora tasvirni quyidagi GIF fayli sifatida saqlaydi. Bo'yoq GIF-dan maqbul darajada foydalanmaydi; keraksiz katta ranglar jadvali (ishlatilgan 2 o'rniga to'liq 256 rangni saqlash) va belgining kengligi tufayli ushbu GIF fayli 15 pikselli tasvirning samarali vakili emas (yuqoridagi rasmda ko'rsatilgan).

Graphic Control Extension bloki 16 rang indeksini (o'n oltinchi o'nlik) shaffof deb e'lon qilganiga qaramay, u indeks rasmda ishlatilmaydi. Rasm ma'lumotlarida paydo bo'ladigan yagona rangli indekslar o'nlikdan iborat 40 va 255, bu Global Rang jadvali mos ravishda qora va oq rangga mos keladi.

Quyidagi jadvallardagi olti burchakli raqamlar ichida ekanligini unutmang ozgina endian bayt buyurtmasi, format spetsifikatsiyasi belgilab qo'yganidek.

bayt # o'n oltinchi matn yoki(olti) qiymat Ma'nosi0: 47 49 46 38 39 61 GIF89a Header Logical Screen Descriptor 6: 03 00 3 - pikseldagi ekranning mantiqiy kengligi 8: 05 00 5 - pikseldagi ekranning mantiqiy balandligi A: F7 - GCT 3 o'lchamdagi 256 rang uchun amal qiladi. × 8 bit / asosiy; eng past 3 bit minus 1 bit chuqurligini, eng yuqori haqiqiy bit esa GCT mavjudligini bildiradiB: 00 0 - fon rangi # 0C: 00 - standart piksellar nisbati RGB Global Color TableD: 00 00 00 0 0 0 - rang # 0 qora10: 80 00 00 128 0 0 - rang # 1:: 85: 00 00 00 0 0 0 - rang # 40 qora:: 30A: FF FF FF 255 255 255 - rang # 255 oq30D: 21 F9 Grafik boshqaruv kengaytmasi ( ko'p fayllarda izoh maydonlari bundan oldin) 30F: 04 4 - 4 bayt GCE ma'lumotlari follow310: 01 - shaffof fon rangi (bit maydoni; eng past bit shaffoflikni bildiradi) 311: 00 00 - animatsiyaning yuzinchi qismida kechikish ikkinchisi: ishlatilmaydi313: 10 16 - rang # 16 shaffof314: 00 - GCE blokining oxiri315: 2C Image Descriptor316: 00 00 00 00 (0,0) - Mantiqiy ekrandagi tasvirning NW burchak holati 31A: 03 00 05 00 (3,5) - tasvirning kengligi va balandligi piksellarda 31E: 00 - mahalliy emas rang jadvali31F: 08 8 Tasvirning boshlanishi - LZW kodining minimal hajmi 320: 0B 11 - 11 bayt LZW kodlangan tasvir ma'lumotlarini ta'qib qilish321: 00 51 FC 1B 28 70 A0 C1 83 01 0132C: 00 - rasm ma'lumotlarining oxiri32D: 3B GIF fayl terminatori

Rasmlarni kodlash

Yuqoridan chapdan gorizontal ravishda skanerlangan tasvir pikselli ma'lumotlar o'zgartiriladi LZW kodlash keyin faylda saqlash uchun baytlarga tushirilgan kodlarga. Piksel kodlari odatda baytlarning 8-bit hajmiga mos kelmaydi, shuning uchun kodlar "kichik-Endian" sxemasi bilan baytlarga qadoqlanadi: birinchi kodning eng kichik biti eng kichik bitida saqlanadi birinchi bayt, kodning yuqori tartibli bitlari baytning yuqori tartibli bitlariga, kerak bo'lganda keyingi baytning past tartibli bitlariga to'kiladi. Har bir keyingi kod hali ishlatilmagan kamida bitdan boshlab saqlanadi.

Ushbu bayt oqimi faylda "pastki bloklar" qatori sifatida saqlanadi. Har bir kichik blok maksimal uzunligi 255 baytni tashkil qiladi va pastki blokdagi ma'lumotlar baytlari sonini ko'rsatuvchi bayt bilan qo'shiladi. Sub-bloklar qatori bo'sh pastki blok bilan tugatiladi (0 baytli, 0 ma'lumotlar baytli pastki blokni ko'rsatadigan bitta 0 bayt).

Yuqoridagi namunaviy rasm uchun 9 bitli kodlar va baytlar o'rtasida qaytariladigan xaritalash quyida keltirilgan.

9-bitli kod
(olti)
IkkilikBayt
(olti)
00000000|00
100
0101000|151
028
111111|00FK
0FF
00011|0111B
103
0010|100028
102
011|1000070
103
10|100000A0
106
1|1000001C1
107
|1000001183
101
0000000101
0000000|101

Biroz siqilish aniq: dastlab 15 bayt bilan belgilangan piksel ranglari boshqaruv kodlari, shu jumladan 12 kod bayt bilan to'liq ifodalangan, 9-bitli kodlarni ishlab chiqaradigan kodlash jarayoni quyida keltirilgan. Mahalliy mag'lubiyat palitradan piksel rang raqamlarini to'playdi, agar kod satrida mahalliy satr topilmasa, chiqish harakati bo'lmaydi. Jadval boshlang'ich kattaligidan qatorlar qo'shilishi bilan o'sishdan oldin keladigan dastlabki ikkita pikselga maxsus ishlov berish mavjud. Har bir chiqish kodidan so'ng, mahalliy satr eng so'nggi piksel rangiga moslashtiriladi (uni chiqish kodiga kiritib bo'lmaydigan).

                          Jadval 9-bit                     string -> kod kodi Action                          # 0 | 000 soat 9-bitli kodlar palitrasining ildiz jadvalini ishga tushirish | : ranglar | : # 255 | 0FFh clr | 100 soat oxiri | 101 soat | 100 soatlik ClearPixel Local | rang palitrasi qatori | QORA # 40 28 | 028 soat 1 piksel har doim chiqishi uchun WHITE # 255 FF | Satr 28 FF | jadvalida topilgan 102 soat FF jadvaliga har doim 1-qatorni qo'shing Mahalliy qatorni ishga tushiringWHITE # 255 FF FF | Jadvalda topilmadi | 0FFh - oldingi satr uchun chiqish kodi FF FF | 103 soat - FF jadvaliga so'nggi qatorni qo'shing - mahalliy qatorni ishga tushirishWHITE # 255 FF FF | StringBLACK # 40 da topilgan satr FF FF 28 | Jadvalda topilmadi | 103 soat - oldingi satr uchun chiqish kodi FF FF 28 | 104 soat - 28-jadvalga so'nggi qatorni qo'shing - mahalliy qatorni ishga tushirishWHITE # 255 28 FF | StringWHITE # 255 dan topilgan satr 28 FF FF | Jadvalda topilmadi | 102 soat - oldingi satr uchun chiqish kodi 28 FF FF | 105 soat - FF jadvaliga so'nggi qatorni qo'shing - mahalliy qatorni ishga tushirishWHITE # 255 FF FF | StringWHITE # 255 da topilgan FF FF FF | Jadvalda topilmadi | 103 soat - oldingi satr uchun chiqish kodi FF FF FF | 106 soat - FF jadvaliga so'nggi qatorni qo'shing - mahalliy qatorni ishga tushirishWHITE # 255 FF FF | StringWHITE # 255 da topilgan FF FF FF | StringWHITE # 255 dan topilgan FF FF FF FF | Jadvalda topilmadi | 106 soat - oldingi satr uchun chiqish kodi FF FF FF FF | 107 soat - FF jadvaliga so'nggi qatorni qo'shing - mahalliy qatorni ishga tushirishWHITE # 255 FF FF | StringWHITE # 255 da topilgan FF FF FF | StringWHITE # 255 dan topilgan FF FF FF FF | Satrda jadval topilgan 107h dan ortiq piksel yo'q - oxirgi satr 101h uchun chiqish kodi End

Aniqlik uchun jadval yuqorida keltirilgan uzunlikdagi iplardan qurilgan sifatida ko'rsatilgan. Ushbu sxema ishlashi mumkin, ammo jadval oldindan aytib bo'lmaydigan darajada xotirani iste'mol qiladi. Har bir yangi satr bir belgi bilan kengaytirilgan ilgari saqlangan qatordan iborat ekanligini ta'kidlab, xotirani amalda saqlash mumkin. Har bir manzilda faqat ikkita so'zni saqlash maqsadga muvofiq: mavjud manzil va bitta belgi.

LZW algoritmi har bir piksel uchun jadvalni qidirishni talab qiladi. 4096 ta manzil bo'yicha chiziqli qidiruv kodlashni sekinlashtiradi. Amalda kodlarni raqamli qiymat tartibida saqlash mumkin; bu har bir qidiruvni ba'zi birlarida ishlatilganidek SAR (ketma-ket yaqinlashish registri) orqali amalga oshirishga imkon beradi ADClar ), faqat 12 balli taqqoslash bilan. Ushbu samaradorlik uchun kodlar va haqiqiy xotira manzillari o'rtasida konvertatsiya qilish uchun qo'shimcha jadval kerak; qo'shimcha jadvalni saqlash faqat piksel stavkasidan ancha past bo'lgan yangi kod saqlanganda kerak bo'ladi.

Tasvirni dekodlash

Dekodlash saqlangan baytlarni 9-bitli kodlarga qaytarish orqali boshlanadi. Quyida ko'rsatilgandek piksel ranglarini tiklash uchun ular dekodlangan. Kodlashtiruvchida ishlatiladigan jadvalga o'xshash jadval quyidagi qoidalar bo'yicha satrlarni qo'shish orqali quriladi:

Kiruvchi kod jadvalda topilganmi?
Hamahalliy kod uchun qatorni, so'ngra kiruvchi kod uchun birinchi bayt qatorini qo'shing
Yo'qmahalliy kod uchun satr qo'shing, so'ngra o'zining birinchi baytining nusxasi
      siljish9-bit ----> Mahalliy stol piksellarikod kodi kodi -> string Palitra rangi Action100 soat 000 soat | # 0 9-bitli kodlarning ildiz jadvalini boshlang: | palitrasi: | ranglar 0FFh | # 255 100 soat | clr 101h | end028h | # 40 QORA  1 piksel0FFh 028 soat | dekodlash Kirish kodi jadvalda topilgan | # 255 OQ   - 102h jadvalidan chiqish satri | 28 FF - jadvalga qo'shing 103 soat 0FFh | Kiruvchi kod 103h jadvalida topilmadi | FF FF - jadvalga qo'shish | - jadvaldan chiqish qatori # 255 OQ                         |             #255  OQ102 soat 103 soat | Kirish kodi jadvalda topilgan | - jadvaldan chiqish qatori # 40 QORA                         |             #255  OQ                   104 soat | FF FF 28 - jadvalga 103 soat 102 soat | qo'shing Kirish kodi jadvalda topilgan | - jadvaldan chiqish qatori # 255 OQ                         |             #255  OQ                   105 soat | 28 FF FF - jadval 1066h 103h | ga qo'shing Kiruvchi kod 106h jadvalida topilmadi | FF FF FF - jadvalga qo'shish | - jadvaldan chiqish qatori # 255 OQ                         |             #255  OQ                         |             #255  OQ107 soat 106 soat | Kiruvchi kod 107h jadvalida topilmadi | FF FF FF FF - jadvalga qo'shish | - jadvaldan chiqish qatori # 255 OQ                         |             #255  OQ                         |             #255  OQ                         |             #255  OQ101 soat | Oxiri

LZW kod uzunligi

Qisqa kod uzunliklarini misoldagi 256 rangdan kichikroq palitralar uchun ishlatish mumkin. Agar palitra atigi 64 rangdan iborat bo'lsa (shuning uchun rang ko'rsatkichlari 6 bit kenglikda bo'lsa), belgilar 0 dan 63 gacha bo'lishi mumkin va belgining kengligi 6 bit, kodlar 7 bitdan boshlanishi mumkin. Aslida, belgining kengligi palitraning o'lchamiga mos kelmasligi kerak: agar dekodlangan qiymatlar har doim palitradagi ranglar sonidan kam bo'lsa, belgilar har qanday kenglik 2 dan 8 gacha, palitraning kattaligi esa 2 ga teng bo'lishi mumkin 2 dan 256 gacha. Masalan, palitraning faqat dastlabki to'rt rangidan (0 dan 3 gacha bo'lgan qiymatlar) foydalanilsa, belgilar 3 bitdan boshlanadigan kodlar bilan 2 bit kenglikda qabul qilinishi mumkin.

Aksincha, faqat 0 va 1 qiymatlaridan foydalanilgan bo'lsa ham, belgining kengligi 8 ga o'rnatilishi mumkin; bu ma'lumotlar faqat ikki rangli jadvalni talab qiladi. Faylni shu tarzda kodlashda hech qanday nuqta bo'lmasa-da, shunga o'xshash narsa odatda ikki rangli tasvirlar uchun sodir bo'ladi: minimal qiymat kengligi 2 ga teng, hatto 0 va 1 qiymatlari ishlatilgan bo'lsa ham.

Kodlar jadvali dastlab ikkita maxsus kodni joylashtirish uchun belgi kattaligidan bir bit uzunroq kodlarni o'z ichiga oladi clr va oxiri va jarayon davomida qo'shiladigan satrlar uchun kodlar. Jadval to'lganida, kod satrlari uchun joy ajratish uchun maksimal uzunlik oshadi, maksimal kodga qadar 4095 = FFF (hex). Dekoder o'z jadvalini tuzar ekan, bu kod uzunligining oshishini kuzatib boradi va u mos ravishda keladigan baytlarni echishga qodir.

Siqilmagan GIF

7-bitli belgilar (128 rang, 8-bitli kodlar) bilan 46 × 46 siqilmagan GIF. Kodni tushuntirish uchun rasmni bosing.

GIF kodlash jarayoni o'zgartirilib, LZW kompressiyasiz fayl yaratadi, uni hali ham GIF tasviri sifatida ko'rish mumkin. Ushbu uslub dastlab patent buzilishining oldini olish usuli sifatida kiritilgan. Siqilmagan GIF shuningdek grafik dasturchi uchun foydali oraliq format bo'lishi mumkin, chunki o'qish yoki bo'yash uchun alohida piksellar mavjud. Siqilmagan GIF fayli oddiy GIF faylga rasm muharriri orqali o'tkazish orqali o'zgartirilishi mumkin.

O'zgartirilgan kodlash usuli LZW jadvalini yaratishni e'tiborsiz qoldiradi va faqat ildiz palitrasi kodlarini va CLEAR va STOP kodlarini chiqaradi. Bu oddiyroq kodlashni keltirib chiqaradi (kod qiymatlari va palitrasi kodlari o'rtasida 1 dan 1 gacha yozishmalar), ammo barcha siqishni qurbon qiladi: rasmdagi har bir piksel rang indeksini ko'rsatadigan chiqish kodini hosil qiladi. Siqilmagan GIF-ni qayta ishlashda standart GIF dekoderiga satrlarni lug'at jadvaliga yozish to'sqinlik qilinmaydi, ammo kod kengligi hech qachon oshmasligi kerak, chunki bu bitlarni baytlardan boshqa to'plamiga olib keladi.

Agar belgining kengligi n, kenglik kodlari n+1 tabiiy ravishda ikkita blokga bo'ling: ning pastki bloki 2n bitta belgini kodlash uchun kodlar va yuqori blok 2n dekoder tomonidan birdan kattaroq uzunlikdagi ketma-ketliklar uchun ishlatiladigan kodlar. Ushbu yuqori blokdan dastlabki ikkita kod allaqachon olingan: 2n uchun CLEAR va 2n + 1 STOP uchun. Dekoderni yuqori blokdagi oxirgi koddan foydalanishiga yo'l qo'ymaslik kerak, 2n+1 − 1, chunki dekoder ushbu uyani to'ldirganda, kod kengligini oshiradi. Shunday qilib, yuqori blokda mavjud 2n − 3 dekoder uchun mavjud bo'lgan kodlar, bu kod kengligining oshishiga olib kelmaydi. Dekoder har doim jadvalni saqlashda bir qadam orqada qolishi sababli, kodlovchidan birinchi kodni olganida jadval yozuvini yaratmaydi, balki keyingi har bir kod uchun bittasini hosil qiladi. Shunday qilib kodlovchi yaratishi mumkin 2n − 2 kodlar kengligi oshishiga olib kelmasdan kodlar. Shuning uchun, kodlovchi oralig'ida qo'shimcha CLEAR kodlarini chiqarishi kerak 2n − 2 kodlash lug'atini tiklash uchun dekoderni kodlari yoki undan kam. GIF standarti istalgan vaqtda rasm ma'lumotlariga bunday qo'shimcha CLEAR kodlarini kiritishga imkon beradi. Kompozit ma'lumotlar oqimi har biri 1 dan 255 baytgacha bo'lgan kichik bloklarga bo'linadi.

Yuqoridagi 3 × 5 hajmdagi rasm uchun quyidagi 9-bitli kodlar "aniq" (100) ni, so'ngra skanerlash tartibida rasm piksellarini va "to'xtash" ni (101) ifodalaydi.

9 bitli kodlar: 100 028 0FF 0FF 0FF 028 0FF 0FF 0FF 0FF 0FF 0FF 0FF 0FF 0FF 0FF 0FF 101

Yuqoridagi kodlar baytlarga moslashtirilgandan so'ng, siqilmagan fayl siqilgan fayldan shunday farq qiladi:

 : 320: 14 20 20 bayt siqilmagan rasm ma'lumotlarini kuzatib boring321: 00 51 FC FB F7 0F C5 BF 7F FF FE FD FB F7 EF DF BF 7F 01 01335: 00 - end:

Siquv misoli

Yagona rangli katta rasmning ahamiyatsiz misoli GIF fayllarida ishlatiladigan o'zgaruvchan uzunlikdagi LZW siqilishini namoyish etadi.

GIF faylini namunaviy siqish
KodPiksellarIzohlar
Yo'q
Nmen
Qiymat
Nmen + 256
Uzunlik
(bit)
Ushbu kod
Nmen
Yig'ilgan
Nmen(Nmen + 1)/2
N dan foydalanadigan munosabatlarmen faqat shu narsalarga murojaat qiling
kodlash jadvali to'ldirilguncha rangli piksel.
0100 soat9Kod jadvalini tozalash
1FFh11Yuqoridagi chap piksel rangi sifatida tanlangan
256 rangli palitraning eng yuqori ko'rsatkichi
2102 soat23
3

255
103 soat

1FFh
3

255
6

32640


Oxirgi 9-bitli kod
256

767
200 soat

3FFh
10256

767
32896

294528


Oxirgi 10-bitli kod
768

1791
400 soat

7FFh
11768

1791
295296

1604736


Oxirgi 11-bitli kod
1792

3839
800 soat

FFFh
121792

3839
1606528

7370880


Kod jadvali to'la
FFFh3839Maksimal kod ko'proq rangli piksellar uchun takrorlanishi mumkin.
Umumiy ma'lumotni siqishni asimptotik ravishda yaqinlashadi
3839 × 8/ 12 = 2559 +1/3
101 soatRasm ma'lumotlarining oxiri

Ko'rsatilgan kod qiymatlari baytlarga qadoqlanib, keyin 255 baytgacha bo'lgan bloklarga to'planadi. Rasm ma'lumotlari bloki baytlar sonini e'lon qiladigan bayt bilan boshlanadi. Rasm uchun ma'lumotlarning oxirgi bloki nol uzunlikdagi bayt bilan belgilanadi.

Interlacing

GIF spetsifikatsiyasi GIF faylining mantiqiy ekranidagi har bir rasmga o'zaro bog'langanligini ko'rsatishga imkon beradi; ya'ni, uning ma'lumotlar blokidagi raster chiziqlarining tartibi ketma-ket emasligi. Bu to'liq tasvirni bo'yashdan oldin tanib olish mumkin bo'lgan rasmni qisman ko'rsatishga imkon beradi.

Interlaced tasvir yuqoridan pastgacha 8 piksel balandlikdagi chiziqlarga bo'linadi va rasm satrlari quyidagi tartibda keltirilgan:

  • 1-o'tish: Har bir chiziqdan 0-qator (eng yuqori chiziq).
  • 2-o'tish: Har bir chiziqdan 4-qator.
  • 3-o'tish: Har bir chiziqdan 2 va 6-qatorlar.
  • 4-o'tish: Har bir chiziqdan 1, 3, 5 va 7-qatorlar.

Har bir satr ichidagi piksellar o'zaro almashtirilmaydi, lekin ketma-ket chapdan o'ngga taqdim etiladi. Interlaced bo'lmagan rasmlarda bo'lgani kabi, bitta satr ma'lumotlari bilan keyingi satr ma'lumotlari o'rtasida uzilish yo'q. Rasmning interlaced ekanligini ko'rsatuvchi mos keladigan Image Descriptor blokida biroz o'rnatiladi.

Animatsiya qilingan GIF

Ushbu rasmdagi kabi animatsiyani ko'rsatish uchun GIF-dan foydalanish mumkin Nyuton beshigi.
Ikkita fotosuratdan iborat GIF animatsiyasi, bittasi morflash boshqasiga

Garchi GIF animatsiya vositasi sifatida ishlab chiqilmagan bo'lsa-da, uning bitta faylda bir nechta rasmni saqlash qobiliyati tabiiy ravishda formatni ramkalar animatsiya ketma-ketligi. Engillashtirish uchun namoyish etilmoqda animatsiyalarga, GIF89a spetsifikatsiyasi grafik boshqaruv kengaytmasini (GCE) qo'shdi, bu fayldagi rasmlarni (ramkalarni) vaqtni kechiktirish bilan bo'yashga imkon beradi. video klip. GIF animatsiyasidagi har bir kadr o'zining GCE tomonidan taqdim etiladi, bu kadr chizilganidan keyin kutish uchun kechikishni bildiradi. Fayl boshidagi global ma'lumot sukut bo'yicha barcha freymlarga qo'llaniladi. Ma'lumotlar oqimga yo'naltirilgan, shuning uchun har bir GCE ning boshlanishini fayllar bilan qoplash oldingi ma'lumotlarning uzunligiga bog'liq. Har bir ramka ichida LZW kodli tasvir ma'lumotlari 255 baytgacha bo'lgan kichik bloklarda joylashtirilgan; har bir kichik blokning hajmi undan oldingi bayt tomonidan e'lon qilinadi.

Odatiy bo'lib, animatsiya kadrlar ketma-ketligini faqat bir marta aks ettiradi va oxirgi kadr ko'rsatilganda to'xtaydi. Animatsiyani loop qilish uchun, Netscape 1990-yillarda Netscape Application Block (NAB) dasturini amalga oshirish uchun Application Extension blokidan (sotuvchilarga GIF faylga dasturga oid ma'lumotlarni qo'shish uchun mo'ljallangan) foydalanilgan.[31] Animatsiya kadrlari ketma-ketligidan darhol joylashtirilgan ushbu blok kadrlar ketma-ketligi necha marta (1 dan 65535 martagacha) ijro etilishini yoki doimiy ravishda takrorlanishini belgilaydi (nol abadiy tsiklni bildiradi). Ushbu takrorlanadigan animatsiyalarni qo'llab-quvvatlash birinchi bo'lib paydo bo'ldi Netscape Navigator versiyasi 2.0, so'ngra boshqa brauzerlarga tarqaldi.[32] Ko'pgina brauzerlar endi NAB-ni taniydilar va qo'llab-quvvatlaydilar, garchi bu GIF89a spetsifikatsiyasining bir qismi emas.

Quyidagi misol animatsiya faylining tuzilishini ko'rsatadi Aylanadigan er (katta) .gif maqolaning infoboxida (kichik rasm sifatida) ko'rsatilgan.

bayt # o'n oltinchi matn yoki(olti) qiymat Ma'nosi0: 47 49 46 38 39 61 GIF89a Sarlavha                              Mantiqiy ekran tavsiflovchisi 6:     90 01        400        - width in pixels8:     90 01        400        - height in pixelsA:     F7                      - GCT follows for 256 colors with resolution 3 x 8bits/primaryB:     00           0          - background color #0C:     00                      - default pixel aspect ratioD:                            Global Color Table:30D:   21 FF                  Application Extension block30F:   0B           11         - eleven bytes of data follow310:   4E 45 54       53 43 41       50 45        NETSCAPE   - 8-character application name       32 2E 30     2.0        - application "authentication code"31B:   03           3          - three more bytes of data31C:   01           1          - index of the current data sub-block (always 1 for the NETSCAPE block)31D:   FF FF        65535      - unsigned number of repetitions31F:   00                      - end of App Extension block320:   21 F9                  Graphic Control Extension for frame #1322:   04           4          - four bytes in the current block323:   04           000.....   - reserved; 5 lower bits are bit maydon                    ...001..   - disposal method 1: do not dispose                    ......0.   - no user input                    .......0   - transparent color is not given324:   09 00                   - 0.09 sec delay before painting next frame326:   FF                      - transparent color index (unused in this frame)327:   00                      - end of GCE block328:   2C                     Image Descriptor of frame #1329:   00 00 00 00  (0,0)      - NW corner of frame at 0, 032D:   90 01 90 01  (400,400)  - Frame width and height: 400 × 400331:   00                      - no local color table; no interlace332:   08           8         LZW min code size; Image Data of frame #1 beginning 333:   FF           255        - 255 bytes of LZW encoded image data follow334:                data433:   FF           255        - 255 bytes of LZW encoded image data follow                    data                     :92C0:  00                      - end of LZW data for this frame92C1:  21 F9                  Graphic Control Extension for frame #2 :                                                            :EDABD: 21 F9                  Graphic Control Extension for frame #44 :F48F5: 3B                     File terminator

The animation delay for each frame is specified in the GCE in hundredths of a second. Some economy of data is possible where a frame need only rewrite a portion of the pixels of the display, because the Image Descriptor can define a smaller rectangle to be rescanned instead of the whole image. Browsers or other displays that do not support animated GIFs typically show only the first frame.

The size and color quality of animated GIF files can vary significantly depending on the application used to create them. Strategies for minimizing file size include using a common global color table for all frames (rather than a complete local color table for each frame) and minimizing the number of pixels covered in successive frames (so that only the pixels that change from one frame to the next are included in the latter frame). Simply packing a series of independent frame images into a composite animation tends to yield large file sizes.

Internet Explorer slows down GIFs if the frame-rate is 20 frames per second or higher and Microsoft reports that Gugl xrom va Safari also slow down some GIF animations.[33]

Starting in early 1995, the Ulm universiteti used animated GIF as live video streaming format to show a controllable model railroad.

Metadata

Metadata can be stored in GIF files as a comment block, a plain text block, or an application-specific application extension block. Several graphics editors use unofficial application extension blocks to include the data used to generate the image, so that it can be recovered for further editing.

All of these methods technically require the metadata to be broken into sub-blocks so that applications can navigate the metadata block without knowing its internal structure.

The Kengaytiriladigan metadata platformasi (XMP) metadata standard introduced an unofficial but now widespread "XMP Data" application extension block for including XMP data in GIF files.[34] Since the XMP data is encoded using UTF-8 without NUL characters, there are no 0 bytes in the data. Rather than break the data into formal sub-blocks, the extension block terminates with a "magic trailer" that routes any application treating the data as sub-blocks to a final 0 byte that terminates the sub-block chain.

Unisys and LZW patent enforcement

1977 va 1978 yillarda, Jeykob Ziv va Ibrohim Lempel published a pair of papers on a new class of lossless data-compression algorithms, now collectively referred to as LZ77 va LZ78. 1983 yilda, Terri Uelch developed a fast variant of LZ78 which was named Lempel – Ziv – Uelch (LZW).[35][36]

Welch filed a patent application for the LZW method in June 1983. The resulting patent, US 4558302 , granted in December 1985, was assigned to Sperry korporatsiyasi who subsequently merged with Burrouz korporatsiyasi in 1986 and formed Unisys.[35] Further patents were obtained in the United Kingdom, France, Germany, Italy, Japan and Canada.

In addition to the above patents, Welch's 1983 patent also includes citations to several other patents that influenced it, including two 1980 Japanese patents (JP9343880A va JP17790880A ) dan NEC 's Jun Kanatsu, U.S. Patent 4,021,782 (1974) from John S. Hoerning, U.S. Patent 4,366,551 (1977) from Klaus E. Holtz, and a 1981 Dutch patent (DE19813118676 ) from Karl Eckhart Heinz.[37]

In June 1984, an article by Welch was published in the IEEE magazine which publicly described the LZW technique for the first time.[38] LZW became a popular data compression technique and, when the patent was granted, Unisys entered into licensing agreements with over a hundred companies.[35][39]

The popularity of LZW led CompuServe to choose it as the compression technique for their version of GIF, developed in 1987. At the time, CompuServe was not aware of the patent.[35] Unisys became aware that the version of GIF used the LZW compression technique and entered into licensing negotiations with CompuServe in January 1993. The subsequent agreement was announced on 24 December 1994.[36] Unisys stated that they expected all major commercial on-line information services companies employing the LZW patent to license the technology from Unisys at a reasonable rate, but that they would not require licensing, or fees to be paid, for non-commercial, non-profit GIF-based applications, including those for use on the on-line services.[39]

Following this announcement, there was widespread condemnation of CompuServe and Unisys, and many software developers threatened to stop using GIF. The PNG format (see below) was developed in 1995 as an intended replacement.[35][36][38] However, obtaining support from the makers of Web browsers and other software for the PNG format proved difficult and it was not possible to replace GIF, although PNG has gradually increased in popularity.[35] Therefore, GIF variations without LZW compression were developed. For instance the libungif library, based on Erik S. Raymond 's giflib, allows creation of GIFs that followed the data format but avoided the compression features, thus avoiding use of the Unisys LZW patent.[40] A 2001 Doktor Dobbning article described another alternative to LZW compression, based on square roots.[41]

In August 1999, Unisys changed the details of their licensing practice, announcing the option for owners of certain non-commercial and private websites to obtain licenses on payment of a one-time license fee of $5000 or $7500.[42] Such licenses were not required for website owners or other GIF users who had used licensed software to generate GIFs. Nevertheless, Unisys was subjected to thousands of online attacks and abusive emails from users believing that they were going to be charged $5000 or sued for using GIFs on their websites.[43] Despite giving free licenses to hundreds of non-profit organizations, schools and governments, Unisys was completely unable to generate any good publicity and continued to be condemned by individuals and organizations such as the Dasturlash erkinligi ligasi who started the "Burn All GIFs" campaign in 1999.[44][45]

The United States LZW patent expired on 20 June 2003.[46] The counterpart patents in the United Kingdom, France, Germany and Italy expired on 18 June 2004, the Japanese patents expired on 20 June 2004, and the Canadian patent expired on 7 July 2004.[46] Consequently, while Unisys has further patents and patent applications relating to improvements to the LZW technique,[46] GIF may now be used freely.[47]

Shu bilan bir qatorda

PNG

Portativ tarmoq grafikasi (PNG) was designed as a replacement for GIF in order to avoid infringement of Unisys' patent on the LZW compression technique.[35] PNG offers better compression and more features than GIF,[48] animation being the only significant exception. PNG is more suitable than GIF in instances where true-color imaging and alfa shaffofligi talab qilinadi.

Although support for PNG format came slowly, new veb-brauzerlar generally support PNG. Ning eski versiyalari Internet Explorer do not support all features of PNG. Versions 6 and earlier do not support alfa kanali transparency without using Microsoft-specific HTML extensions.[49] Gamma correction of PNG images was not supported before version 8, and the display of these images in earlier versions may have the wrong tint.[50]

For identical 8-bit (or lower) image data, PNG files are typically smaller than the equivalent GIFs, due to the more efficient compression techniques used in PNG encoding.[51] Complete support for GIF is complicated chiefly by the complex canvas structure it allows, though this is what enables the compact animation features.

Animation formats

Videos resolve many issues that GIFs present through common usage on the web. They include drastically smaller fayl o'lchamlari, the ability to surpass the 8-bit rang restriction, and better frame-handling and compression through kodeklar. Virtually universal support for the GIF format in veb-brauzerlar and a lack of official support for video in the HTML standard caused GIF to rise to prominence for the purpose of displaying short video-like files on the web.

MNG ("Multiple-image Network Graphics") was originally developed as a PNG-based solution for animations. MNG reached version 1.0 in 2001, but few applications support it.

In 2006, an extension to the PNG format called APNG ("Animated Portable Network Graphics") was proposed as alternative to the MNG format by Mozilla. APNG is supported by most browsers as of 2019.[52] APNG provide the ability to animate PNG files, while retaining backwards compatibility in decoders that cannot understand the animation chunk (unlike MNG). Older decoders will simply render the first frame of the animation. The PNG group officially rejected APNG as an official extension on 20 April 2007.[53] There have been several subsequent proposals for a simple animated graphics format based on PNG using several different approaches.[54] Shunga qaramay, Animated Portable Network Graphics is still under development by Mozilla and is supported in Firefox 3[55][56] while MNG support was dropped.[57][58] APNG is currently supported by all major web browsers including Chrome since version 59.0 and Opera and Firefox and Edge.

O'rnatilgan Adobe Flash ob'ektlar va MPEGs are used on some websites to display simple video, but require the use of an additional browser plugin. WebM va WebP are in development and are supported by some web browsers.[59] Other options for web animation include serving individual frames using AJAX, or animating SVG images using JavaScript yoki Tabassum ("Synchronized Multimedia Integration Language").[iqtibos kerak ]

With the introduction of widespread support of the HTML5 video (<video>) tag in most web browsers, some websites use a looped version of the video tag generated by JavaScript funktsiyalari. This gives the appearance of a GIF, but with the size and speed advantages of compressed video. Taniqli misollar Gfycat va Imgur va ularning GIFV metaformat, which is really a video tag playing a looped MP4 yoki WebM compressed video.[60]

Rasm fayllarining yuqori samaradorligi (HEIF) is an image file format, finalized in 2015, which uses a diskret kosinus konvertatsiyasi (DCT) yo'qotishlarni siqish ga asoslangan algoritm HEVC video format, and related to the JPEG rasm formati. In contrast to JPEG, HEIF supports animation.[61] Compared to the GIF format, which lacks DCT compression, HEIF allows significantly more efficient compression. HEIF stores more information and produces higher-quality animated images at a small fraction of an equivalent GIF's size.[62]

VP9 only supports alfa kompozitsiyasi 4: 2: 0 bilan xrom subampling[63] ichida YUV A420 pixel format, which may be unsuitable for GIFs that combine transparency with rasterised vektorli grafikalar with fine color details.

Foydalanadi

2014 yil aprel oyida, 4chan added support for silent WebM videos that are under 3 MB in size and 2 min in length,[64][65] and in October 2014, Imgur started converting any GIF files uploaded to the site to video and giving the link to the HTML player the appearance of an actual file with a .gifv kengaytma.[66][67]

2016 yil yanvar oyida, Telegram started re-encoding all GIFs to MPEG4 videos that "require up to 95% less disk space for the same image quality."[68]

Shuningdek qarang

Adabiyotlar

  1. ^ a b v "Graphics Interchange Format, Version 87a". W3C. 15 iyun 1987 yil. Olingan 13 oktyabr 2012.
  2. ^ a b v "Grafika almashinuvi formati, 89a versiyasi". W3C. 1990 yil 31-iyul. Olingan 6 mart 2009.
  3. ^ "Online Art". Compute!'s Apple Applications. Dekabr 1987. p. 10. Olingan 14 sentyabr 2016.
  4. ^ Holdener III, Anthony (2008). Ajax: The Definitive Guide: Interactive Applications for the Web. O'Reilly Media. ISBN  978-0596528386.
  5. ^ Furht, Borko (2008). Multimedia ensiklopediyasi. Springer. ISBN  978-0387747248.
  6. ^ McHugh, Molly (29 May 2015). "You Can Finally, Actually, Really, Truly Post GIFs on Facebook". Simli. simli.com. Olingan 29 may 2015.
  7. ^ Perez, Sarah (29 May 2015). "Facebook Confirms It Will Officially Support GIFs". techcrunch.com. Olingan 29 may 2015.
  8. ^ "Introducing GIF Stickers". Instagram. 23 yanvar 2018 yil. Olingan 19 sentyabr 2019.
  9. ^ "Oxford Dictionaries USA Word of the Year 2012". OxfordWords blog. Oxford American Dictionaries. 2012 yil 13-noyabr. Olingan 1 may 2013.
  10. ^ Flood, Alison (27 April 2013). "Gif is America's word of the year? Now that's what I call an omnishambles". Books blog. The Guardian. London. Olingan 1 may 2013.
  11. ^ Olsen, Stiv. "GIF talaffuz sahifasi". Olingan 6 mart 2009.
  12. ^ a b v "Gif's inventor says ignore dictionaries and say 'Jif'". BBC yangiliklari. 2013 yil 22-may. Olingan 22 may 2013.
  13. ^ "Stack Overflow Developer Survey 2017". 2017. Olingan 19 avgust 2018.
  14. ^ "How do you pronounce "GIF"?". Iqtisodchi. Olingan 4 yanvar 2018.
  15. ^ "GIF". The American Heritage Abbreviations Dictionary, Third Edition. Houghton Mifflin kompaniyasi. 2005 yil. Olingan 15 aprel 2007.
  16. ^ "GIF". The Cambridge Dictionary of American English. Kembrij universiteti matbuoti. Olingan 19 fevral 2014.
  17. ^ "Gif - Definition from the Merriam-Webster Dictionary". Merriam-Vebster lug'ati. Merriam-Vebster, birlashtirilgan. Olingan 6 iyun 2013.
  18. ^ "GIF". Onlayn Oksford lug'atlari. Oksford universiteti matbuoti. Olingan 7 oktyabr 2014.
  19. ^ Yangi Oksford Amerika Lug'ati (2-nashr). Oksford universiteti matbuoti. 2005. p. 711.
  20. ^ Yangi Oksford Amerika Lug'ati (3-nashr). 2012 yil. (part of the Macintosh built-in dictionaries).
  21. ^ O'Leary, Amy (2013 yil 21-may). "GIF yaratuvchisi uchun sharaf". The New York Times. Olingan 22 may 2013.
  22. ^ a b Rothberg, Daniel (4 December 2013). "'Jeopardy' wades into 'GIF' pronunciation battle". Los Anjeles Tayms. Olingan 4 dekabr 2013.
  23. ^ O'Leary, Amy (23 May 2013). "Battle Over 'GIF' Pronunciation Erupts". The New York Times.
  24. ^ Valinsky, Jordan (February 25, 2020). "Jif settles the great debate with a GIF peanut butter jar". CNN. Olingan 25 fevral, 2020.
  25. ^ Marur, D.R.; Bhaskar, V. (March 2012). "Comparison of platform independent electronic document distribution techniques". Devices, Circuits and Systems (ICDCS). International Conference on Devices, Circuits and Systems (ICDCS). Karunya University; Coimbatore, India: IEEE. 297-301 betlar. doi:10.1109/ICDCSyst.2012.6188724. ISBN  9781457715457.
  26. ^ a b S. Chin; D. Iverson; O. Campesato; P. Trani (2011). Pro Android Flash (PDF). Nyu-York: Apress. p. 350. ISBN  9781430232315. Olingan 11 mart 2015.
  27. ^ a b v Andreas Kleinert (2007). "GIF 24 Bit (truecolor) extensions". Arxivlandi asl nusxasi 2012 yil 16 martda. Olingan 23 mart 2012.
  28. ^ a b Philip Howard. "True-Color GIF Example". Arxivlandi asl nusxasi 2015 yil 22 fevralda. Olingan 23 mart 2012.
  29. ^ "Nullsleep - Jeremiah Johnson - Animated GIF Minimum Frame Delay Browser Compatibility Study". Olingan 26 may 2015.
  30. ^ "They're different! How to match the animation rate of gif files accross [sic] browsers". Developer's Blog. 14 Fevral 2012. Arxivlangan asl nusxasi 2017 yil 1-fevralda. Olingan 15 iyun 2017.
  31. ^ Royal Frazier. "All About GIF89a". Arxivlandi asl nusxasi on 18 April 1999. Olingan 7 yanvar 2013.
  32. ^ Scott Walter (1996). Web Scripting Secret Weapons. Que Publishing. ISBN  0-7897-0947-3.
  33. ^ Law, Eric (7 June 2010). "Trivia: Animated GIF Timing". MSDN. Microsoft. Olingan 30 noyabr 2018.
  34. ^ "XMP Specification Part 3: Storage in Files" (PDF). Adobe. 2016. pp. 11–12. Olingan 16 avgust 2018.
  35. ^ a b v d e f g Greg Roelofs. "History of the Portable Network Graphics (PNG) Format". Olingan 23 mart 2012.
  36. ^ a b v Stuart Caie. "Sad day... GIF patent dead at 20". Olingan 23 mart 2012.
  37. ^ U.S. Patent 4,558,302
  38. ^ a b "The GIF Controversy: A Software Developer's Perspective". Olingan 26 may 2015.
  39. ^ a b "Unisys Clarifies Policy Regarding Patent Use in On-Line Service Offerings". Arxivlandi asl nusxasi 2007 yil 7 fevralda. – archived by Dasturlash erkinligi ligasi
  40. ^ "Libungif". Olingan 26 may 2015.
  41. ^ Cargill, Tom (1 October 2001). "Replacing a Dictionary with a Square Root". Doktor Dobbning jurnali. Olingan 20 yanvar 2017.
  42. ^ "LZW Software and Patent Information". Arxivlandi asl nusxasi 2009 yil 8 iyunda. Olingan 31 yanvar 2007. – clarification of 2 September 1999
  43. ^ Unisys Not Suing (most) Webmasters for Using GIFsSlashdot investigation into the controversy
  44. ^ "Burn All GIFs Day". Arxivlandi asl nusxasi 1999 yil 13 oktyabrda.
  45. ^ Burn All GIFs – A project of the League for Programming Freedom (latest version)
  46. ^ a b v "License Information on GIF and Other LZW-based Technologies". Arxivlandi asl nusxasi 2009 yil 2-iyunda. Olingan 26 aprel 2005.
  47. ^ "Why There Are No GIF Files on GNU Web Pages". Bepul dasturiy ta'minot fondi. Olingan 19 may 2012.
  48. ^ "PNG versus GIF Compression". Olingan 8 iyun 2009.
  49. ^ "AlphaImageLoader Filter". Microsoft. Olingan 26 may 2015.
  50. ^ "Internet Explorer 7-dagi yangiliklar". MSDN. Olingan 6 mart 2009.
  51. ^ "PNG Image File Format". Olingan 8 iyun 2009.
  52. ^ "Men foydalanishingiz mumkinmi ... HTML5, CSS3 va boshqalarni qo'llab-quvvatlash jadvallari". caniuse.com.
  53. ^ "VOTE FAILED: APNG 20070405a". SourceForge mailing list. 20 April 2007.
  54. ^ "Discussion for a simple "animated" PNG format". Arxivlandi asl nusxasi 2009 yil 26 fevralda. Olingan 12 iyul 2011.
  55. ^ "APNG Specification". Olingan 26 may 2015.
  56. ^ Mozilla Labs » Blog Archive » Better animations in Firefox 3
  57. ^ "195280 – Removal of MNG/JNG support". Olingan 26 may 2015.
  58. ^ "18574 – (mng) restore support for MNG animation format and JNG image format". Olingan 26 may 2015.
  59. ^ "Chromium Blog: Chrome 32 Beta: Animated WebP images and faster Chrome for Android touch input". Blog.chromium.org. 2013 yil 21-noyabr. Olingan 1 fevral 2014.
  60. ^ "Introducing GIFV - Imgur Blog". imgur.com. 9 oktyabr 2014 yil. Olingan 14 dekabr 2014.
  61. ^ Thomson, Gavin; Shah, Athar (2017). "Introducing HEIF and HEVC" (PDF). Apple Inc. Olingan 5 avgust 2019.
  62. ^ "HEIF-ni taqqoslash - yuqori samaradorlikdagi rasmlar formati". Nokia Technologies. Olingan 5 avgust 2019.
  63. ^ "#3271 (Allow using additional pixel formats with libvpx-vp9) – FFmpeg". trac.ffmpeg.org.
  64. ^ Devi, Keytlin. "Meet the technology that could make GIFs obsolete". Washington Post. Olingan 4 fevral 2015.
  65. ^ "WebM support on 4chan". 4chan Blog. Olingan 4 fevral 2015.
  66. ^ "Introducing GIFV". Imgur. 2014 yil 9-avgust. Olingan 21 iyul 2016.
  67. ^ Allan, Patrik. "Imgur Revamps GIFs for Faster Speeds and Higher Quality with GIFV". Layfxaker. Olingan 4 fevral 2015.
  68. ^ "GIF Revolution". Official Telegram Blog. Olingan 4 yanvar 2016.

Tashqi havolalar