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

什么?Figma 的 Fig 文件格式居然解析出來了

開發 前端
Fig 是一種二進制的格式。它沒有使用 XML 或是 JSON 的格式,而是選擇使用了 Figma 自己實現的特殊編碼工具進行了序列化編碼,并做了封裝,最后得到一個二進制文件。

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

上周圖形編輯器交流群里有人問,對于 Figma 導出的 fig 文件,該如何解析其格式,拿到可讀數據。

經過群友的一番討論,這個問題最后算是解決了。

fig 文件

導出 Figma 的設計文件,我們會得到一個 fig 文件。

fig 是一種二進制的格式。

它沒有使用 XML 或是 JSON 的格式,而是選擇使用了 Figma 自己實現的特殊編碼工具進行了序列化編碼,并做了封裝,最后得到一個二進制文件。

二進制相比明文格式(JSON 和 XML),優點有:

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

先用 Figma 隨便畫幾個基本圖形。

然后導出 fig 文件,拿到了一個名為 fig-file.fig 的文件。

先用 vscode 打開看看。

不是文本文件,應該就是二進制文件了。

不管怎樣,強行用文本格式打開。

PK 打頭,應該就是 ZIP 格式文件頭的標識。

順便再查看一下這個文件的二進制內容,看到開頭這個 50 4B 03 04,說明確確實實是個 ZIP 文件。

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

使用 ZIP 格式有以下好處:

  • 進行了文件壓縮,體積更小,并且是單文件;
  • 保留了目錄結構;
  • 跨平臺,基本所有主流操作系統都支持 ZIP。雖然用戶一般來說并不會手動解壓它,但用戶安裝的應用程序能直接使用操作系統的底層 API 去解壓,有助于減少應用程序包體積;

解壓一下。

unzip fig-file.fig

解壓內容

解壓后的內容為:

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

需要注意的是,解壓出來的內容,并沒有一個根文件夾存放這些內容。

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

這個其實是操作系統的額外操作,目的是防止解壓出大量文件和當前文件夾的其他文件混在一起了,可能還會有文件同名的問題。

canvas.fig 是真正的 Figma 數據內容,記錄圖形樹中圖形的關系,以及圖形的屬性。

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

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

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

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

經識別,也是個二進制文件,但它的文件格式卻是。。。fig-kiwi?

Kiwi

這個叫做 Kiwi 的特殊格式被 Figma 的前 CTO,Evan Wallace 開源了。

https://github.com/evanw/kiwi

Kiwi 是一種基于 Schecha 的二進制格式,用于高效地對樹形數據結構進行編碼。

它受到 Google 的 Protoclol Buffer 格式的啟發,但更簡單,編碼更緊湊,且對自定義字段有更好的支持。

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

但要提供一個 Schecha,來進行類型的映射。

好在這個 Schecha 有保存在 fig 文件里的。

canvas.fig 文件

實際上這個 canvas.fig 文件并不是 Kiwi,它是一個復合產物。

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

文件里有 Kiwi 的二進制數據部分,也有 Schecha 部分,需要把它們提取出來。

這里要做 切片 了。

有個開源項目 Figma-To-JSON 成功解析了 fig,我們看看它怎么做的。

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

第一個切片是 Schecha,第二個是 Kiwi 數據。

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

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

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

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

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

流程總結一下,大致如下:

Figma-To-JSON

上面都是在說解碼 fig 文件的過程。

如果你只是想要得到 fig 的結構,對過程不感興趣,可以直接用一個名為 Figma-To-JSON 的開源項目去解析。

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

下面是轉換結果,是一個一維數組,風格類似 quill 的 delta。

每個節點保存有父節點的 id,可以關聯構建出一棵圖形樹。

拿到 fig 數據格式有什么好處呢?

首先如果你開發自己的圖形編輯器,或者直接就是 Figma 的競品,你是要設計數據結構的,那 fig 數據格式就有很好的參考價值。

然后就是做二次開發,寫一些工具做一些離線的批處理操作,比如提取 fig 的一些文本數據轉換為 excal 之類的奇怪操作。

這樣你就不用聯網打開 Figma 網站,使用插件去進行這些操作。

Figma 官方的看法

Figma 的 fig 格式算是半公開的,在網上找找能找到不少蛛絲馬跡。因為 Figma 還是比較開放的,使用的 Kiwi 編碼格式也公開了。

但 Figma 不會主動提供在客戶端轉換 fig 的方式(但可以使用開發者 API 請求服務端數據),因為這 和它所希望的生態穩定相悖。

如果 Figma 主動提供 fig 的內部格式出來,那它就要對這個格式負責,且 Figma 在開發新的功能時,fig 文件在未來發展中結構大概率會有破壞性改變的。

當然如果你想和 Photopea 一樣,嘗試去解析它轉換成的結構,那也是可以的,但你自己要對這個數據結構負責。

責任編輯:姜華 來源: 前端西瓜哥
相關推薦

2024-01-24 08:53:55

Figma設計文件fig 文件

2023-11-02 09:54:21

ODT文件

2016-12-01 14:47:20

2012-05-29 09:48:21

Hadoop

2012-05-29 09:06:32

Hadoop文件格式

2019-11-18 09:00:10

大數據數據格式文件格式

2010-08-03 15:40:30

NFS文件格式

2017-08-25 17:41:17

Paradox數據文件格式

2021-09-29 15:52:26

計算機配置文件語言

2017-06-16 09:58:34

Hive格式壓縮算法

2010-08-02 14:09:57

DB2數據庫

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數據庫

2017-12-29 05:00:58

2023-10-19 15:35:44

.NET轉換工具開發
點贊
收藏

51CTO技術棧公眾號

9i精品福利一区二区三区| 中文字幕一精品亚洲无线一区| 精品国产电影| 欧美午夜一区| 欧美人与z0zoxxxx视频| 尤物国产精品| 欧美 日韩 国产 成人 在线 91 | 亚洲不卡在线播放| 日本视频在线| 丁香一区二区三区| 国产成人精品免费久久久久| 美女福利视频网| 樱花草涩涩www在线播放| 一区二区三区视频免费观看| 欧美影院一区二区三区| 国产在线拍揄自揄拍无码| 日韩一卡二卡在线| 日本强好片久久久久久aaa| 欧美国产精品日韩| 亚洲精品国产精品乱码在线观看| 91成人午夜| 欧美三级电影在线看| 国产一二三在线视频| 91激情在线| 久久这里只有精品首页| 国产v亚洲v天堂无码| 伊人久久国产精品| 国产精品日韩欧美一区| 久久99精品久久久久久噜噜| 国产又粗又猛又爽又黄的视频四季| 久久99精品久久久久久欧洲站| 欧美午夜电影在线观看| 日韩精品视频在线| 亚洲AV无码久久精品国产一区| 欧美xoxoxo| 天天操天天色综合| 精品丰满人妻无套内射| 免费不卡av| 一区二区三区在线免费观看| 一区二区视频在线播放| 91看片在线观看| 久久精品一区二区| 欧美国产一二三区| 日韩美女一级视频| 91亚洲精品久久久蜜桃| 久久艹中文字幕| 天堂91在线| 国产福利一区二区三区视频| 亚洲一区二区三区成人在线视频精品| 亚洲在线精品视频| 蜜桃av一区二区| 国产欧美精品日韩| 一区二区日韩在线观看| 久久精品免费观看| 91久久久国产精品| a在线观看免费| 国产成人精品综合在线观看| 亚洲xxxx视频| 男人天堂网在线视频| 9l国产精品久久久久麻豆| 久久精品国产综合精品| 美州a亚洲一视本频v色道| 久久久国产精品不卡| 日韩欧美亚洲日产国产| 日本天堂在线观看| 亚洲综合偷拍欧美一区色| 国产日韩亚洲欧美在线| 日本不卡免费高清视频在线| 色香蕉久久蜜桃| 澳门av一区二区三区| 成人爱爱电影网址| 玛丽玛丽电影原版免费观看1977| 欧美69xxxxx| 欧美国产禁国产网站cc| 少妇熟女一区二区| 精灵使的剑舞无删减版在线观看| 精品成人久久av| 影音先锋男人资源在线观看| 性欧美超级视频| 欧美在线观看一区| 肉色超薄丝袜脚交| 国产精伦一区二区三区| 亚洲精品色婷婷福利天堂| 亚洲女优在线观看| 欧美成人中文| 国产精品女同互慰在线看| 日本在线观看一区二区| 久久久久久国产精品免费无遮挡| 一区二区三区精品| 六月丁香婷婷在线| 日韩专区视频| 亚洲精品成a人在线观看| www.99热| 亚洲国产免费看| 国产精自产拍久久久久久蜜| 亚洲产国偷v产偷v自拍涩爱| 久久精品亚洲乱码伦伦中文 | 亚洲精品免费一二三区| 无码aⅴ精品一区二区三区浪潮| 久久精品资源| 亚洲精品动漫100p| 乱h高h女3p含苞待放| 亚洲免费网站| 超碰97在线播放| 在线视频自拍| 日韩欧美在线一区| 乱码一区二区三区| 欧美国产一区二区三区激情无套| 98精品国产高清在线xxxx天堂| 91美女精品网站| 久久综合色一综合色88| www.日本少妇| 国产精品久久免费视频| 尤物tv国产一区| 日韩三级小视频| 国产精品一级黄| 在线视频福利一区| av在线不卡精品| 国产视频亚洲视频| 国产精品2020| 国产精品一区2区| 一区二区三区四区五区精品| 毛片免费看不卡网站| 亚洲激情中文字幕| 精品一区二区三区四| 国产一区二区三区日韩| 亚洲人成网站在线观看播放| 男人最爱成人网| 精品无人国产偷自产在线| 国产一级av毛片| 国产高清不卡一区| 久久久久久久久网| 五月天色综合| 久久精品视频播放| 91亚洲精品国偷拍自产在线观看| 亚洲国产成人午夜在线一区 | 亚洲一区二区91| 国产一区二区成人久久免费影院| 亚洲一区三区电影在线观看| 天然素人一区二区视频| 亚洲香蕉成人av网站在线观看| 国产专区第一页| 91在线视频观看| 干日本少妇首页| 久久99蜜桃| 国产福利视频一区二区| 福利视频在线播放| 欧美唯美清纯偷拍| www.4hu95.com四虎| 美腿丝袜亚洲三区| 一区高清视频| 日韩一区二区三区高清在线观看| 欧美大胆a视频| 性色av蜜臀av| 亚洲午夜在线视频| 喷水视频在线观看| 久久久久国产精品一区二区| 日韩av一区二区三区在线观看| 123成人网| 久久精品亚洲国产| 亚洲精品久久久久久动漫器材一区| 一区二区三区四区乱视频| 日本精品一二三| 国产精品永久| 亚洲精品电影在线一区| 精品国产乱码一区二区三区| 欧美黑人视频一区| 牛牛澡牛牛爽一区二区| 欧美日韩在线三级| 免费中文字幕在线| 99精品久久久久久| 精品少妇无遮挡毛片| 国产精品久久久久久| 成人动漫在线视频| 欧美大片免费| 日韩最新中文字幕电影免费看| 国产按摩一区二区三区| 欧美日韩国产影院| 青青草自拍偷拍| 国产jizzjizz一区二区| 成年人黄色片视频| 99精品视频在线观看播放| 国产精品免费视频一区二区| 日本电影欧美片| 欧美另类交人妖| 你懂得在线网址| 日韩一区二区在线观看视频播放| 色网站在线播放| 国产精品麻豆网站| 精品国产av色一区二区深夜久久| 日本午夜精品一区二区三区电影| 裸体裸乳免费看| 伊人久久综合影院| 成人午夜激情免费视频| 人人草在线视频| 欧美成人合集magnet| 欧美另类自拍| 欧美mv日韩mv国产网站app| av毛片在线免费观看| 一区二区视频免费在线观看| 亚洲自拍偷拍图| 99久久婷婷国产综合精品电影| 粉色视频免费看| 久久一二三区| 国产精品国产亚洲精品看不卡| 五月婷婷六月综合| 欧美自拍资源在线| 国产三级精品三级在线观看国产| 成人欧美一区二区三区在线| 日韩成人av电影| 午夜精品久久久久久久久久久久 | 一区二区美女| 国产美女在线精品免费观看| 国产中文欧美日韩在线| 国产精品成人一区| 最新欧美色图| 国内精品视频一区| 欧美草逼视频| 欧美大胆a视频| 黄色一级片在线观看| 国产一区二区三区在线播放免费观看| 人妻一区二区三区| 欧美变态tickling挠脚心| av男人天堂av| 欧美一区二区三区免费大片| 在线免费观看日韩视频| 欧洲中文字幕精品| www.欧美色| 日韩人在线观看| 欧美亚洲精品天堂| 婷婷六月综合网| 日韩欧美不卡视频| 天天色 色综合| 九一国产在线观看| 欧美日韩在线影院| 老熟妇仑乱一区二区av| 欧美色videos| 日本免费在线观看视频| 大荫蒂欧美视频另类xxxx| www日韩精品| 精品国产乱码久久久久酒店| www.天天色| 亚洲h在线观看| 日本三级一区二区| 欧美日韩一区二区免费视频| 影音先锋在线国产| 91黄色免费版| 中文字幕男人天堂| 欧美精品久久99久久在免费线| 97人妻一区二区精品免费视频| 欧美日韩成人一区二区| 国产乱淫a∨片免费观看| 欧美一区二区三区免费观看视频| www天堂在线| 亚洲国产精品悠悠久久琪琪| 日本免费一区二区三区最新| 在线播放国产精品| 国产在线二区| 久热精品视频在线观看一区| 麻豆传媒在线完整视频| 欧美日韩国产成人在线| 午夜精品久久久久| 欧美成人一二三区| 亚洲已满18点击进入久久| 国产一级av毛片| 精品久久久久久久久久久久| 岛国av中文字幕| 欧洲一区二区av| 一级二级三级视频| 666欧美在线视频| 日本激情一区二区三区| 亚洲欧美日韩图片| 26uuu久久噜噜噜噜| 七七久久电影网| 国内伊人久久久久久网站视频| 草草视频在线观看| 日本视频久久久| 性欧美video另类hd尤物| 亚洲自拍小视频免费观看| 精品三级av在线导航| 日本在线观看一区二区| 青春草视频在线| 高清欧美性猛交xxxx黑人猛交| 在线黄色的网站| 成人精品一区二区三区电影免费 | 国产破处视频在线观看| 亚洲一区影音先锋| 日韩精选在线观看| 日韩欧美久久久| 国产高清免费av在线| 欧美成年人视频网站| 美女高潮视频在线看| 成人一区二区电影| 国产毛片一区二区三区| 日本五级黄色片| 美女性感视频久久| 亚洲久久久久久| 亚洲欧美综合另类在线卡通| 成人免费区一区二区三区| 欧美一区二区三区影视| 九一国产在线| 国产做受高潮69| 成人在线视频www| 欧美日韩在线播放一区二区| 国产综合亚洲精品一区二| 色婷婷.com| 久久女同互慰一区二区三区| 免费毛片在线播放免费| 欧美美女直播网站| 久久久久久久久亚洲精品| 欧美国产日韩一区二区| 国产电影一区| 亚洲精品永久www嫩草| 久久成人国产| 国产婷婷在线观看| 亚洲精品亚洲人成人网| 国产九色91回来了| 日韩精品免费在线视频| eeuss鲁一区二区三区| 91沈先生在线观看| 日韩一区二区三区免费播放| 国产激情在线观看视频| av日韩在线网站| 日韩欧美视频在线免费观看| 欧美v亚洲v综合ⅴ国产v| 91精品久久久| 92裸体在线视频网站| 清纯唯美亚洲综合一区| 亚洲性生活网站| 久久精品日韩一区二区三区| 在线免费黄色av| 亚洲天堂精品在线| 欧美日韩123区| 日韩高清国产精品| 日韩电影在线一区| 色综合99久久久无码国产精品| 色婷婷久久久综合中文字幕| 久热av在线| 国产精品久久激情| 日韩1区在线| 国产无遮挡猛进猛出免费软件 | 亚洲精品国产免费| 日韩脚交footjobhdboots| 精品麻豆av| 六月天综合网| 波多野结衣片子| 欧日韩精品视频| 老司机在线视频二区| 亚洲最大成人免费视频| 激情综合激情| 亚洲国产果冻传媒av在线观看| 欧美日韩视频在线| 狠狠狠综合7777久夜色撩人| 国产精品成人v| 久久精品影视| 国产高潮失禁喷水爽到抽搐| 亚洲成人午夜电影| 天堂中文网在线| 国产经典一区二区| 99精品综合| 中文字幕无码毛片免费看| 一区二区三区在线不卡| 色婷婷av一区二区三区之红樱桃| 欧洲亚洲在线视频| 国产二区精品| 欧美激情一区二区三区p站| 岛国精品视频在线播放| xxxxx日韩| 999国产视频| 久久久久99| 91高清免费看| 亚洲精品少妇网址| 四虎国产精品免费久久| 日本福利视频一区| 国产香蕉久久精品综合网| 国产精品无码天天爽视频| 午夜精品久久久久久久久久久久| 国产a久久精品一区二区三区| 日韩av在线中文| 香蕉加勒比综合久久| 国产一级片在线播放| 亚洲自拍av在线| 亚洲一区久久| 蜜臀av午夜精品久久| 亚洲美女精品成人在线视频| 24小时成人在线视频| 欧美丰满熟妇bbbbbb百度| 中文字幕在线视频一区| 天天干天天干天天干| 成人国产精品免费视频| 国产一区二区三区的电影| 四虎精品免费视频| 亚洲人av在线影院| 日本精品在线播放| 性欧美极品xxxx欧美一区二区| 亚洲一区二区三区自拍| 91在线播放网站| 久久大片网站| 国产99久久精品| 91国在线视频|