精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

什么?Figma 的 Fig 文件格式居然解析出來(lái)了

開(kāi)發(fā) 前端
導(dǎo)出 Figma 的設(shè)計(jì)文件,我們會(huì)得到一個(gè) fig 文件。fig 是一種二進(jìn)制的格式。它沒(méi)有使用 XML 或是 JSON 的格式,而是選擇使用了 Figma 自己實(shí)現(xiàn)的特殊編碼工具進(jìn)行了序列化編碼,并做了封裝,最后得到一個(gè)二進(jìn)制文件。

大家好,我是前端西瓜哥。

上周圖形編輯器交流群里有人問(wèn),對(duì)于 Figma 導(dǎo)出的 fig 文件,該如何解析其格式,拿到可讀數(shù)據(jù)。

經(jīng)過(guò)群友的一番討論,這個(gè)問(wèn)題最后算是解決了。

fig 文件

導(dǎo)出 Figma 的設(shè)計(jì)文件,我們會(huì)得到一個(gè) fig 文件。

fig 是一種二進(jìn)制的格式。

它沒(méi)有使用 XML 或是 JSON 的格式,而是選擇使用了 Figma 自己實(shí)現(xiàn)的特殊編碼工具進(jìn)行了序列化編碼,并做了封裝,最后得到一個(gè)二進(jìn)制文件。

二進(jìn)制相比明文格式(JSON 和 XML),優(yōu)點(diǎn)有:

  • 體積更小,因?yàn)閿?shù)據(jù)更緊湊;
  • 解析速度快,像是 JSON 這種,要逐個(gè)字符解析然后構(gòu)建 AST,考慮轉(zhuǎn)義、空格等特殊情況,對(duì)于大文件,解析效率很差;
  • 高保真,比如一些類型明文格式其實(shí)是不好表達(dá)的,需要多做一層轉(zhuǎn)換(比如 Float32Array 類型,要保存為字符串就要轉(zhuǎn)為普通數(shù)組);
  • 安全性。因?yàn)榫幋a規(guī)則是應(yīng)用自己實(shí)現(xiàn)的,此外方便做加密(比如異或加密)。編碼和解碼的規(guī)則我們是無(wú)法知道的,除非它主動(dòng)公布出來(lái),否則只能嘗試去做逆向。

先用 Figma 隨便畫(huà)幾個(gè)基本圖形。

然后導(dǎo)出 fig 文件,拿到了一個(gè)名為 fig-file.fig 的文件。

先用 vscode 打開(kāi)看看。

不是文本文件,應(yīng)該就是二進(jìn)制文件了。

不管怎樣,強(qiáng)行用文本格式打開(kāi)。

PK 打頭,應(yīng)該就是 ZIP 格式文件頭的標(biāo)識(shí)。

順便再查看一下這個(gè)文件的二進(jìn)制內(nèi)容,看到開(kāi)頭這個(gè) 50 4B 03 04,說(shuō)明確確實(shí)實(shí)是個(gè) ZIP 文件。

基本上很多應(yīng)用的導(dǎo)出文件都選擇 ZIP 格式,然后再把后綴名改成自己定義的,比如 fig、xmind。

使用 ZIP 格式有以下好處:

  • 進(jìn)行了文件壓縮,體積更小,并且是單文件;
  • 保留了目錄結(jié)構(gòu);
  • 跨平臺(tái),基本所有主流操作系統(tǒng)都支持 ZIP。雖然用戶一般來(lái)說(shuō)并不會(huì)手動(dòng)解壓它,但用戶安裝的應(yīng)用程序能直接使用操作系統(tǒng)的底層 API 去解壓,有助于減少應(yīng)用程序包體積;

解壓一下。

unzip fig-file.fig

解壓內(nèi)容

解壓后的內(nèi)容為:

.
├── canvas.fig
├── fig-file.fig # 這個(gè)是壓縮源文件
├── images
│   └── 0b15125516ae308a2d819f2970e851c0402949d2
├── meta.json
└── thumbnail.png

需要注意的是,解壓出來(lái)的內(nèi)容,并沒(méi)有一個(gè)根文件夾存放這些內(nèi)容。

但如果你用可視化界面去解壓,通常會(huì)解壓出一個(gè)文件夾,這個(gè)文件夾和壓縮包同名。

這個(gè)其實(shí)是操作系統(tǒng)的額外操作,目的是防止解壓出大量文件和當(dāng)前文件夾的其他文件混在一起了,可能還會(huì)有文件同名的問(wèn)題。

canvas.fig 是真正的 Figma 數(shù)據(jù)內(nèi)容,記錄圖形樹(shù)中圖形的關(guān)系,以及圖形的屬性。

images 文件夾,存放的是圖片,給里面的文件加上 .png 后綴可查看圖片。

meta.json 是一些圖紙的基本信息,比如導(dǎo)出的客戶端使用的背景色,文件名等。

thumbnail.png 是預(yù)覽圖圖片,如果你裝了 figma 桌面端,則在會(huì)從 fig 提取出這個(gè)圖片給文件預(yù)覽器預(yù)覽。

等下,不對(duì),canvas.fig?怎么又是 fig 文件,這是在玩套娃?

經(jīng)識(shí)別,也是個(gè)二進(jìn)制文件,但它的文件格式卻是。。。fig-kiwi?

Kiwi

這個(gè)叫做 Kiwi 的特殊格式被 Figma 的前 CTO,Evan Wallace 開(kāi)源了。

https://github.com/evanw/kiwi。

Kiwi 是一種基于 Schecha 的二進(jìn)制格式,用于高效地對(duì)樹(shù)形數(shù)據(jù)結(jié)構(gòu)進(jìn)行編碼。

它受到 Google 的 Protoclol Buffer 格式的啟發(fā),但更簡(jiǎn)單,編碼更緊湊,且對(duì)自定義字段有更好的支持。

Kiwi 庫(kù)提供了工具,能夠解析二進(jìn)制文件轉(zhuǎn)換為編程語(yǔ)言中的對(duì)象,目前支持 JavaScript (TypeScript)、C++、Rust、Skew。

但要提供一個(gè) Schecha,來(lái)進(jìn)行類型的映射。

好在這個(gè) Schecha 有保存在 fig 文件里的。

canvas.fig 文件

實(shí)際上這個(gè) canvas.fig 文件并不是 Kiwi,它是一個(gè)復(fù)合產(chǎn)物。

首先開(kāi)頭的 fig-kiwi 字符串是一個(gè)注釋,表示它是一個(gè) fig 文件(畢竟前面也看到了,fig 文件可能也是 ZIP),并使用了 kiwi 進(jìn)行編碼。

文件里有 Kiwi 的二進(jìn)制數(shù)據(jù)部分,也有 Schecha 部分,需要把它們提取出來(lái)。

這里要做 切片 了。

有個(gè)開(kāi)源項(xiàng)目 Figma-To-JSON 成功解析了 fig,我們看看它怎么做的。

看了下,貌似是切在 50 89 這個(gè)地方,切好幾刀,得到一些切片。我們需要前兩個(gè)切片。

第一個(gè)切片是 Schecha,第二個(gè)是 Kiwi 數(shù)據(jù)。

每個(gè)切片都是 ZIP 壓縮的,需要先給它們解壓,然后再做 Kiwi 解碼。

import { ByteBuffer, compileSchema, decodeBinarySchema } from "kiwi-schema"

export const figToJson = (fileBuffer: Buffer | ArrayBuffer): object => {
  // 提取 fig 文件的 schema 和 kiwi 格式數(shù)據(jù)
  const [schemaByte, dataByte] = figToBinaryParts(fileBuffer)

  const schemaBB = new ByteBuffer(schemaByte)
  const schema = decodeBinarySchema(schemaBB)
  const dataBB = new ByteBuffer(dataByte)
  const schemaHelper = compileSchema(schema)

  // 這個(gè) json 對(duì)象就是最終結(jié)果了
  const json = schemaHelper[`decodeMessage`](dataBB)
  return convertBlobsToBase64(json)
}

流程總結(jié)一下,大致如下:

Figma-To-JSON

上面都是在說(shuō)解碼 fig 文件的過(guò)程。

如果你只是想要得到 fig 的結(jié)構(gòu),對(duì)過(guò)程不感興趣,可以直接用一個(gè)名為 Figma-To-JSON 的開(kāi)源項(xiàng)目去解析。

https://github.com/yagudaev/figma-to-json。

下面是轉(zhuǎn)換結(jié)果,是一個(gè)一維數(shù)組,風(fēng)格類似 quill 的 delta。

每個(gè)節(jié)點(diǎn)保存有父節(jié)點(diǎn)的 id,可以關(guān)聯(lián)構(gòu)建出一棵圖形樹(shù)。

拿到 fig 數(shù)據(jù)格式有什么好處呢?

首先如果你開(kāi)發(fā)自己的圖形編輯器,或者直接就是 Figma 的競(jìng)品,你是要設(shè)計(jì)數(shù)據(jù)結(jié)構(gòu)的,那 fig 數(shù)據(jù)格式就有很好的參考價(jià)值。

然后就是做二次開(kāi)發(fā),寫一些工具做一些離線的批處理操作,比如提取 fig 的一些文本數(shù)據(jù)轉(zhuǎn)換為 excal 之類的奇怪操作。

這樣你就不用聯(lián)網(wǎng)打開(kāi) Figma 網(wǎng)站,使用插件去進(jìn)行這些操作。

Figma 官方的看法

Figma 的 fig 格式算是半公開(kāi)的,在網(wǎng)上找找能找到不少蛛絲馬跡。因?yàn)?Figma 還是比較開(kāi)放的,使用的 Kiwi 編碼格式也公開(kāi)了。

但 Figma 不會(huì)主動(dòng)提供在客戶端轉(zhuǎn)換 fig 的方式(但可以使用開(kāi)發(fā)者 API 請(qǐng)求服務(wù)端數(shù)據(jù)),因?yàn)檫@ 和它所希望的生態(tài)穩(wěn)定相悖。

如果 Figma 主動(dòng)提供 fig 的內(nèi)部格式出來(lái),那它就要對(duì)這個(gè)格式負(fù)責(zé),且 Figma 在開(kāi)發(fā)新的功能時(shí),fig 文件在未來(lái)發(fā)展中結(jié)構(gòu)大概率會(huì)有破壞性改變的。

當(dāng)然如果你想和 Photopea 一樣,嘗試去解析它轉(zhuǎn)換成的結(jié)構(gòu),那也是可以的,但你自己要對(duì)這個(gè)數(shù)據(jù)結(jié)構(gòu)負(fù)責(zé)。

責(zé)任編輯:姜華 來(lái)源: 前端西瓜哥
相關(guān)推薦

2024-04-24 08:43:06

Figmafig 文件圖形編輯器

2023-11-02 09:54:21

ODT文件

2012-05-29 09:48:21

Hadoop

2016-12-01 14:47:20

2012-05-29 09:06:32

Hadoop文件格式

2019-11-18 09:00:10

大數(shù)據(jù)數(shù)據(jù)格式文件格式

2010-08-03 15:40:30

NFS文件格式

2017-08-25 17:41:17

Paradox數(shù)據(jù)文件格式

2021-09-29 15:52:26

計(jì)算機(jī)配置文件語(yǔ)言

2017-06-16 09:58:34

Hive格式壓縮算法

2010-08-02 14:09:57

DB2數(shù)據(jù)庫(kù)

2009-07-20 09:44:31

DB2外部文件格式

2010-08-02 11:38:43

DB2外部文件格式

2024-03-17 19:14:28

2009-06-02 14:12:26

Hibernate配置文件格式

2022-03-08 07:26:15

JPEGPNG圖像編輯器

2009-08-05 10:57:17

ASP.NET配置文件配置文件格式

2010-08-02 14:19:28

DB2數(shù)據(jù)庫(kù)

2017-12-29 05:00:58

2023-10-19 15:35:44

.NET轉(zhuǎn)換工具開(kāi)發(fā)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

欧美综合视频| 久久香蕉一区| 男女男精品网站| 亚洲午夜久久久久久久| 毛片一区二区三区四区| 久久精品国产亚洲a∨麻豆| 天堂成人免费av电影一区| 91精品国产一区二区三区蜜臀 | 97久久人人超碰| 欧美风情在线观看| 欧产日产国产精品98| 91豆花视频在线播放| 91色视频在线| 国产精品高精视频免费| 最新av电影网站| 亚洲精品午夜| 精品久久久久久久久国产字幕| 欧美精品国产精品久久久 | 国产精品一区二区三区美女| 欧美性猛交xxxxx免费看| 欧美一区二区视频17c | 337p亚洲精品色噜噜狠狠| 蜜臀在线免费观看| 欧美自拍偷拍一区二区| 老妇喷水一区二区三区| 久久精品亚洲热| 国产在线观看免费播放| 校园春色亚洲色图| 一区二区三区在线视频免费| 久久精品中文字幕一区二区三区 | 欧美日韩另类字幕中文| 日韩免费电影一区二区| www.亚洲天堂.com| 日韩avvvv在线播放| 欧美激情一区二区三级高清视频| 这里只有久久精品| 午夜视频一区二区在线观看| 色8久久人人97超碰香蕉987| 伊人网在线免费| 免费福利在线视频| 国产传媒一区在线| 57pao国产成人免费| 在线观看亚洲网站| 久久av免费| 精品久久久久久久久久久久包黑料 | 不卡一区二区在线| 国产日产亚洲精品| 国产成人无码精品久在线观看| 日韩免费一区| 亚洲精品一区二区在线| 国内自拍偷拍视频| 亚洲午夜剧场| 色噜噜久久综合| 国产高清av在线播放| 麻豆视频在线观看免费网站| 久久久青草青青国产亚洲免观| 96sao精品视频在线观看| 亚洲 欧美 中文字幕| 一区二区亚洲精品| 久久亚洲影音av资源网| a级黄色免费视频| 国产探花一区在线观看| 亚洲精品www久久久| 日本少妇激三级做爰在线| 欧洲av不卡| 黄色91在线观看| 亚洲国产精品无码av| 国产在线观看a视频| 国产精品毛片a∨一区二区三区| 欧美连裤袜在线视频| 日本xxxx人| 粉嫩av一区二区三区粉嫩| 91网站免费看| 中文字幕免费在线看| 在线一区视频| 91精品成人久久| 国产第一页在线播放| 国产在线成人| 欧美成年人在线观看| 国产福利视频网站| 97精品国产| 日韩少妇与小伙激情| 永久免费看mv网站入口| 91精品91| 欧美精品久久一区二区| 成年人av电影| 黄色工厂这里只有精品| 午夜精品福利电影| 色一情一乱一伦| 久久九九国产| 国产精品网站入口| 波多野结衣视频在线观看| 全部av―极品视觉盛宴亚洲| 国产精品亚洲一区二区三区| 亚洲影院一区二区三区| 国产一区二区三区蝌蚪| 91pron在线| 欧美一区,二区| www国产亚洲精品久久麻豆| 欧美日韩精品免费观看| 国产视频二区在线观看| 国产精品黄色在线观看| 91视频成人免费| 国产精品vvv| 色婷婷综合久久久中文一区二区| 亚洲色精品三区二区一区| 日韩黄色在线| 日韩精品一区二| 久久午夜夜伦鲁鲁片| 国产一区国产二区国产三区| 精品丝袜一区二区三区| 99自拍偷拍视频| 欧美日本三区| 日本久久久久亚洲中字幕| 中文字幕有码视频| 懂色av一区二区在线播放| 久久久久一区二区| 日本a级在线| 婷婷中文字幕一区三区| 日日橹狠狠爱欧美超碰| 欧美粗大gay| 日韩一二三四区| 精品人妻无码一区二区三区 | 亚洲精品xxx| 91制片厂在线| 国产精品综合| 91丨九色丨国产在线| 污污视频在线观看网站| 中文字幕一区二区不卡| 熟女少妇在线视频播放| 香蕉久久一区| 日韩av在线导航| 久久噜噜色综合一区二区| 国产日韩一区| 91在线精品视频| 你懂的视频在线免费| 亚洲精品亚洲人成人网在线播放| 97在线播放视频| 亚洲欧美日本国产| 日韩中文字幕在线观看| 久久国产黄色片| 国产成人精品亚洲777人妖| 日产精品高清视频免费| 国产精品论坛| 日韩欧美国产成人一区二区| 国产精品久久久久久久av| 136国产福利精品导航网址| 91精品视频观看| 成人免费高清在线播放| 亚洲va在线va天堂| 在线观看免费视频国产| 影视亚洲一区二区三区| 国产精品视频公开费视频| 男人天堂网在线观看| 亚洲国产精品久久一线不卡| 污污网站在线观看视频| 青青草成人影院| 欧洲成人在线观看| 三级国产在线观看| 午夜精品一区二区三区免费视频| 久久久九九九热| 蜜桃成人av| 欧美最顶级丰满的aⅴ艳星| 成人毛片视频免费看| 一二三四社区欧美黄| 99精品视频免费版的特色功能| 日韩中文首页| 国产欧美韩国高清| 在线观看完整版免费| 欧美三日本三级三级在线播放| 免费黄色三级网站| 中国女人久久久| 精品一区久久久| 无遮挡爽大片在线观看视频| 日韩电影在线观看中文字幕| 黄色在线观看免费| 国产成人av影院| 日韩欧美猛交xxxxx无码| 久久伦理中文字幕| 自拍偷拍亚洲欧美| 国产主播第一页| 欧美极品少妇xxxxⅹ高跟鞋| 在线观看av日韩| 国产精品99一区二区三| 91精品国产自产在线老师啪| 成人a在线视频免费观看| 91精品国产手机| 国产一级中文字幕| 99国产一区二区三精品乱码| 妺妺窝人体色www在线小说| 秋霞蜜臀av久久电影网免费| 91精品国产91久久久久福利| 婷婷亚洲一区二区三区| 欧亚一区二区三区| 可以免费看av的网址| 国产激情一区二区三区四区| japanese在线播放| 日本韩国欧美超级黄在线观看| 国产精彩精品视频| 成人jjav| 日韩视频免费观看高清完整版在线观看 | 91精品国产高清91久久久久久| 黄色国产精品| 日韩久久久久久久| 国产999精品在线观看| 欧美极品美女电影一区| 同心难改在线观看| 欧美肥妇毛茸茸| 国产真实乱偷精品视频| 久久久午夜电影| 日韩av手机版| 韩日精品视频| 色一情一乱一伦一区二区三欧美| 97久久中文字幕| 9.1国产丝袜在线观看| www.黄在线观看| 精品对白一区国产伦| xxxxxx国产| 国产精品人人做人人爽人人添 | 国产精品2区| 欧美xxxx做受欧美.88| 香蕉国产在线视频| 欧美一区二区日韩一区二区| 日韩美一区二区| 亚洲综合男人的天堂| 日韩中文字幕有码| 国产乱码一区二区三区| 欧洲av无码放荡人妇网站| 久久久久久免费视频| 欧美污视频久久久| 亚洲毛片在线免费| 日本精品一区二区三区在线| 制服丝袜中文字幕在线| 中文字幕av日韩| 日本一区二区三区在线观看视频| 欧美日本视频在线| 日韩精品在线免费视频| 一区二区三区在线视频观看 | 国产精品女同互慰在线看| www.啪啪.com| 国产一区二区免费在线| 熟女少妇精品一区二区| 国产综合色产| 日韩视频一二三| 色喇叭免费久久综合网| 欧美日韩高清免费| 精品久久对白| 成人av片网址| 色8久久久久| 国产精品久久久久久亚洲影视| 欧美一级鲁丝片| 欧美激情一级精品国产| 羞羞的网站在线观看| 久久精彩免费视频| 日本三级在线播放完整版| 国产一区二区三区精品久久久 | 日本一区二区三区视频免费看| 久久综合另类图片小说| 国产精品国产亚洲精品看不卡15| gogo大尺度成人免费视频| 亲子乱一区二区三区电影| 国产精品蜜芽在线观看| 91精品国产91久久久久久| av中文字幕在线看| 69久久夜色精品国产69乱青草| 青草影视电视剧免费播放在线观看| 久久综合电影一区| 国产精品va在线观看视色| 久久人人爽人人爽爽久久| 免费看美女视频在线网站| 亚洲人成自拍网站| 国产经典自拍视频在线观看| 亚洲一区二区国产| 8888四色奇米在线观看| 久久精品精品电影网| 最新日本在线观看| 欧美激情视频在线观看| 免费污视频在线观看| 久久免费国产视频| 丝袜美腿av在线| 久久久久亚洲精品| 男人天堂视频在线观看| 日本精品视频网站| 久久99久久久精品欧美| 国产在线日韩在线| 精品一区二区三区中文字幕在线 | 成人一区二区三区视频| 制服丝袜在线第一页| 91香蕉视频黄| 国产精品av久久久久久无| 中文字幕一区二区三区在线不卡 | 日韩视频永久免费观看| 91网在线看| 91sa在线看| 黑人巨大亚洲一区二区久| 国产中文字幕91| 福利欧美精品在线| 欧美下载看逼逼| 国产精品99久久精品| 91丨porny丨探花| 日韩精品乱码av一区二区| 亚洲a级黄色片| 成人久久18免费网站麻豆| 欧美色图亚洲激情| **欧美大码日韩| 精品人妻一区二区色欲产成人| 4438亚洲最大| 国产免费a∨片在线观看不卡| 欧美激情小视频| 国产一区二区三区视频在线| 欧美一进一出视频| 亚洲精品日本| 97人人模人人爽人人澡| 国产拍欧美日韩视频二区| 日韩欧美国产亚洲| 日韩一区和二区| 在线激情网站| 国产精品99久久久久久www| 老牛影视av一区二区在线观看| www国产免费| 激情综合色综合久久| 亚洲av毛片基地| 欧美日韩精品二区| 免费av一级片| 欧美高清视频一区二区| 国产亚洲字幕| 亚洲制服欧美久久| 久久久精品性| 亚洲区免费视频| 疯狂做受xxxx欧美肥白少妇| 后进极品白嫩翘臀在线视频| 久久国产精彩视频| 视频91a欧美| 亚洲看片网站| 日本v片在线高清不卡在线观看| 亚洲一级中文字幕| 欧美视频一区二区三区…| 欧美在线 | 亚洲| 国内久久久精品| 久久99精品久久久久久欧洲站| 国产欧美精品aaaaaa片| 国产福利91精品一区二区三区| 中文字幕无码日韩专区免费| 欧美喷水一区二区| 香蕉视频网站在线观看| 成人免费看吃奶视频网站| 久久精品国产www456c0m| 国产精品久久a| 亚洲欧洲成人自拍| 国产av一区二区三区精品| 欧美超级乱淫片喷水| 中文在线免费一区三区| 久久亚洲精品无码va白人极品| jizz一区二区| av黄色在线播放| 亚洲一区av在线播放| 欧美v亚洲v综合v国产v仙踪林| 日本黄色a视频| 国产成人激情av| 日本学生初尝黑人巨免费视频| 精品国一区二区三区| 免费成人在线电影| 日本视频一区在线观看| 国内精品写真在线观看| 久久久久免费看| 亚洲精品久久久一区二区三区| 亚洲精品动漫| 亚洲高清视频在线观看| 国内外成人在线| 日本熟女一区二区| 亚洲欧美视频在线| 在线观看欧美| 97中文字幕在线| 91丝袜美腿高跟国产极品老师| 久草视频在线免费| 久久成人人人人精品欧| 国产精东传媒成人av电影| 国产a视频免费观看| 亚洲私人影院在线观看| 人妻中文字幕一区| 国产精品视频久| 欧美天天视频| 伊人网伊人影院| 欧美一级久久久久久久大片| 日韩精品极品| 一区二区三区四区在线视频| 菠萝蜜视频在线观看一区| 波多野结衣午夜| 欧美日韩999| 国产日产精品一区二区三区四区的观看方式| 99国产精品久久久久久| 亚洲国产三级在线| eeuss影院在线观看| 成人欧美一区二区三区黑人免费| 视频一区免费在线观看| 欧美成人综合色| 中文字幕av一区二区| 欧美色图婷婷| 91网址在线观看精品| 色综合视频一区二区三区高清|