日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

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

來源: 責編: 時間:2024-01-24 09:01:27 298觀看
導讀大家好,我是前端西瓜哥。上周圖形編輯器交流群里有人問,對于 Figma 導出的 fig 文件,該如何解析其格式,拿到可讀數據。經過群友的一番討論,這個問題最后算是解決了。fig 文件導出 Figma 的設計文件,我們會得到一個 fig 文件

LvR28資訊網——每日最新資訊28at.com

大家好,我是前端西瓜哥。LvR28資訊網——每日最新資訊28at.com

上周圖形編輯器交流群里有人問,對于 Figma 導出的 fig 文件,該如何解析其格式,拿到可讀數據。LvR28資訊網——每日最新資訊28at.com

經過群友的一番討論,這個問題最后算是解決了。LvR28資訊網——每日最新資訊28at.com

fig 文件

導出 Figma 的設計文件,我們會得到一個 fig 文件。LvR28資訊網——每日最新資訊28at.com

fig 是一種二進制的格式。LvR28資訊網——每日最新資訊28at.com

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

二進制相比明文格式(JSON 和 XML),優點有:LvR28資訊網——每日最新資訊28at.com

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

先用 Figma 隨便畫幾個基本圖形。LvR28資訊網——每日最新資訊28at.com

LvR28資訊網——每日最新資訊28at.com

然后導出 fig 文件,拿到了一個名為 fig-file.fig 的文件。LvR28資訊網——每日最新資訊28at.com

LvR28資訊網——每日最新資訊28at.com

先用 vscode 打開看看。LvR28資訊網——每日最新資訊28at.com

不是文本文件,應該就是二進制文件了。LvR28資訊網——每日最新資訊28at.com

LvR28資訊網——每日最新資訊28at.com

不管怎樣,強行用文本格式打開。LvR28資訊網——每日最新資訊28at.com

LvR28資訊網——每日最新資訊28at.com

PK 打頭,應該就是 ZIP 格式文件頭的標識。LvR28資訊網——每日最新資訊28at.com

順便再查看一下這個文件的二進制內容,看到開頭這個 50 4B 03 04,說明確確實實是個 ZIP 文件。LvR28資訊網——每日最新資訊28at.com

LvR28資訊網——每日最新資訊28at.com

基本上很多應用的導出文件都選擇 ZIP 格式,然后再把后綴名改成自己定義的,比如 fig、xmind。LvR28資訊網——每日最新資訊28at.com

使用 ZIP 格式有以下好處:LvR28資訊網——每日最新資訊28at.com

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

解壓一下。LvR28資訊網——每日最新資訊28at.com

unzip fig-file.fig

解壓內容

解壓后的內容為:LvR28資訊網——每日最新資訊28at.com

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

需要注意的是,解壓出來的內容,并沒有一個根文件夾存放這些內容。LvR28資訊網——每日最新資訊28at.com

但如果你用可視化界面去解壓,通常會解壓出一個文件夾,這個文件夾和壓縮包同名。LvR28資訊網——每日最新資訊28at.com

這個其實是操作系統的額外操作,目的是防止解壓出大量文件和當前文件夾的其他文件混在一起了,可能還會有文件同名的問題。LvR28資訊網——每日最新資訊28at.com

canvas.fig 是真正的 Figma 數據內容,記錄圖形樹中圖形的關系,以及圖形的屬性。LvR28資訊網——每日最新資訊28at.com

images 文件夾,存放的是圖片,給里面的文件加上 .png 后綴可查看圖片。LvR28資訊網——每日最新資訊28at.com

meta.json 是一些圖紙的基本信息,比如導出的客戶端使用的背景色,文件名等。LvR28資訊網——每日最新資訊28at.com

thumbnail.png 是預覽圖圖片,如果你裝了 figma 桌面端,則在會從 fig 提取出這個圖片給文件預覽器預覽。LvR28資訊網——每日最新資訊28at.com

LvR28資訊網——每日最新資訊28at.com

等下,不對,canvas.fig?怎么又是 fig 文件,這是在玩套娃?LvR28資訊網——每日最新資訊28at.com

經識別,也是個二進制文件,但它的文件格式卻是。。。fig-kiwi?LvR28資訊網——每日最新資訊28at.com

LvR28資訊網——每日最新資訊28at.com

Kiwi

這個叫做 Kiwi 的特殊格式被 Figma 的前 CTO,Evan Wallace 開源了。LvR28資訊網——每日最新資訊28at.com

https://github.com/evanw/kiwi。LvR28資訊網——每日最新資訊28at.com

Kiwi 是一種基于 Schecha 的二進制格式,用于高效地對樹形數據結構進行編碼。LvR28資訊網——每日最新資訊28at.com

它受到 Google 的 Protoclol Buffer 格式的啟發,但更簡單,編碼更緊湊,且對自定義字段有更好的支持。LvR28資訊網——每日最新資訊28at.com

Kiwi 庫提供了工具,能夠解析二進制文件轉換為編程語言中的對象,目前支持 JavaScript (TypeScript)、C++、Rust、Skew。LvR28資訊網——每日最新資訊28at.com

但要提供一個 Schecha,來進行類型的映射。LvR28資訊網——每日最新資訊28at.com

好在這個 Schecha 有保存在 fig 文件里的。LvR28資訊網——每日最新資訊28at.com

canvas.fig 文件

實際上這個 canvas.fig 文件并不是 Kiwi,它是一個復合產物。LvR28資訊網——每日最新資訊28at.com

首先開頭的 fig-kiwi 字符串是一個注釋,表示它是一個 fig 文件(畢竟前面也看到了,fig 文件可能也是 ZIP),并使用了 kiwi 進行編碼。LvR28資訊網——每日最新資訊28at.com

文件里有 Kiwi 的二進制數據部分,也有 Schecha 部分,需要把它們提取出來。LvR28資訊網——每日最新資訊28at.com

這里要做 切片 了。LvR28資訊網——每日最新資訊28at.com

有個開源項目 Figma-To-JSON 成功解析了 fig,我們看看它怎么做的。LvR28資訊網——每日最新資訊28at.com

看了下,貌似是切在 50 89 這個地方,切好幾刀,得到一些切片。我們需要前兩個切片。LvR28資訊網——每日最新資訊28at.com

第一個切片是 Schecha,第二個是 Kiwi 數據。LvR28資訊網——每日最新資訊28at.com

每個切片都是 ZIP 壓縮的,需要先給它們解壓,然后再做 Kiwi 解碼。LvR28資訊網——每日最新資訊28at.com

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)}

流程總結一下,大致如下:LvR28資訊網——每日最新資訊28at.com

LvR28資訊網——每日最新資訊28at.com

Figma-To-JSON

上面都是在說解碼 fig 文件的過程。LvR28資訊網——每日最新資訊28at.com

如果你只是想要得到 fig 的結構,對過程不感興趣,可以直接用一個名為 Figma-To-JSON 的開源項目去解析。LvR28資訊網——每日最新資訊28at.com

https://github.com/yagudaev/figma-to-json。LvR28資訊網——每日最新資訊28at.com

下面是轉換結果,是一個一維數組,風格類似 quill 的 delta。LvR28資訊網——每日最新資訊28at.com

每個節點保存有父節點的 id,可以關聯構建出一棵圖形樹。LvR28資訊網——每日最新資訊28at.com

LvR28資訊網——每日最新資訊28at.com

拿到 fig 數據格式有什么好處呢?LvR28資訊網——每日最新資訊28at.com

首先如果你開發自己的圖形編輯器,或者直接就是 Figma 的競品,你是要設計數據結構的,那 fig 數據格式就有很好的參考價值。LvR28資訊網——每日最新資訊28at.com

然后就是做二次開發,寫一些工具做一些離線的批處理操作,比如提取 fig 的一些文本數據轉換為 excal 之類的奇怪操作。LvR28資訊網——每日最新資訊28at.com

這樣你就不用聯網打開 Figma 網站,使用插件去進行這些操作。LvR28資訊網——每日最新資訊28at.com

Figma 官方的看法

Figma 的 fig 格式算是半公開的,在網上找找能找到不少蛛絲馬跡。因為 Figma 還是比較開放的,使用的 Kiwi 編碼格式也公開了。LvR28資訊網——每日最新資訊28at.com

但 Figma 不會主動提供在客戶端轉換 fig 的方式(但可以使用開發者 API 請求服務端數據),因為這 和它所希望的生態穩定相悖。LvR28資訊網——每日最新資訊28at.com

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

當然如果你想和 Photopea 一樣,嘗試去解析它轉換成的結構,那也是可以的,但你自己要對這個數據結構負責。LvR28資訊網——每日最新資訊28at.com

本文鏈接:http://m.www897cc.com/showinfo-26-66960-0.html什么?Figma 的 Fig 文件格式居然解析出來了

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 研究人員發現史上最大泄露數據庫,包含 260 億條信息

下一篇: 深入探討TypeScript中implements與extends的區別

標簽:
  • 熱門焦點
Top 日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不
亚洲视频狠狠| 日韩亚洲欧美一区| 国产专区综合网| 在线观看精品一区| 91久久精品日日躁夜夜躁国产| 亚洲伦伦在线| 亚洲综合成人在线| 久久久久久久999精品视频| 免费成人高清| 欧美视频精品一区| 国产综合av| 日韩视频免费在线| 午夜免费日韩视频| 美女91精品| 国产精品久久久久国产精品日日| 国内精品视频666| 99热这里只有精品8| 欧美亚洲综合另类| 欧美成人亚洲| 国产精品永久免费| 亚洲欧洲一区二区三区| 香蕉久久一区二区不卡无毒影院| 巨胸喷奶水www久久久免费动漫| 欧美日韩综合视频网址| 狠狠色丁香婷婷综合| 日韩一区二区精品| 久久久www成人免费毛片麻豆| 欧美激情精品久久久久久蜜臀| 国产精品乱码妇女bbbb| 亚洲国产欧美日韩精品| 午夜精品一区二区三区电影天堂 | 欧美系列精品| 一区精品久久| 亚洲永久在线| 欧美激情国产高清| 国产一区二区在线观看免费| 99精品国产在热久久| 久久久高清一区二区三区| 欧美三级日本三级少妇99| 在线看欧美视频| 欧美一区二视频在线免费观看| 欧美人牲a欧美精品| 永久久久久久| 欧美怡红院视频| 欧美系列一区| 亚洲人体1000| 久久青草久久| 国产日韩精品在线| 亚洲在线视频| 欧美日韩亚洲另类| 91久久久久久国产精品| 久久久久综合网| 国产日韩精品视频一区| 亚洲视频精选| 欧美精品观看| 亚洲黄色小视频| 久久午夜电影网| 国产午夜精品在线| 午夜欧美电影在线观看| 欧美日韩性视频在线| 亚洲国产另类精品专区| 久久综合色播五月| 国内精品久久久久影院优| 午夜视频在线观看一区二区| 欧美色中文字幕| 日韩视频精品| 欧美日韩91| 亚洲人成毛片在线播放女女| 蜜桃久久精品一区二区| 韩国一区电影| 久久精品91| 狠狠色狠狠色综合日日小说| 久久激情中文| 国产一区二区三区四区hd| 香蕉亚洲视频| 国产日本欧洲亚洲| 欧美在线欧美在线| 国产亚洲精品一区二区| 欧美在线观看日本一区| 国产综合欧美| 黑人巨大精品欧美黑白配亚洲| 亚洲免费视频中文字幕| 欧美先锋影音| 亚洲欧美精品suv| 国产精品影院在线观看| 久久riav二区三区| 国产真实乱偷精品视频免| 久久久7777| 亚洲电影免费观看高清完整版在线观看| 欧美一区影院| 红桃视频成人| 蜜臀av国产精品久久久久| 亚洲国产一区二区三区高清| 欧美第一黄网免费网站| 日韩亚洲欧美在线观看| 欧美视频在线不卡| 亚洲欧美日韩视频一区| 国产日产欧美精品| 久久久久久久久伊人| 亚洲国产裸拍裸体视频在线观看乱了中文 | 欧美中文字幕视频| 国产一区二区三区在线观看精品 | 欧美日韩成人网| 亚洲午夜在线| 国产日韩欧美不卡在线| 久久久久久久综合色一本| 亚洲国产婷婷| 欧美午夜不卡| 欧美在线免费播放| 1024成人网色www| 亚洲五月婷婷| 国产精品任我爽爆在线播放| 亚洲欧美中文在线视频| 狠狠爱综合网| 欧美精品系列| 亚洲欧美日本国产专区一区| 国产资源精品在线观看| 免费高清在线视频一区·| 99在线观看免费视频精品观看| 国产精品亚洲网站| 毛片精品免费在线观看| 一本色道久久| 国产午夜精品视频| 欧美成人精品福利| 亚洲影院色无极综合| 在线观看欧美| 国产精品sss| 久久人人超碰| 亚洲一区二区少妇| 尤物九九久久国产精品的分类| 欧美视频精品一区| 久久婷婷国产综合精品青草| 日韩小视频在线观看| 国产亚洲一区二区精品| 欧美精品日韩一本| 亚洲欧美在线观看| 亚洲国产专区| 国产一区成人| 国产精品xxxxx| 鲁大师影院一区二区三区| 亚洲一区二区三区中文字幕在线| 亚洲成人在线视频网站| 国产精品区二区三区日本| 欧美+日本+国产+在线a∨观看| 午夜精品免费在线| 亚洲靠逼com| 国产综合久久久久影院| 欧美日韩另类国产亚洲欧美一级| 久久久久亚洲综合| 亚洲综合成人在线| 亚洲精品一区二区三区不| 国产亚洲精品bt天堂精选| 欧美日韩在线视频一区| 老牛影视一区二区三区| 亚洲欧美在线免费| 日韩午夜免费| 亚洲国产成人av| 国产日韩在线不卡| 欧美午夜电影一区| 欧美国产高潮xxxx1819| 久久精品国产第一区二区三区| 中文国产成人精品久久一| 亚洲国产裸拍裸体视频在线观看乱了| 国产伦精品一区二区三区照片91| 欧美另类极品videosbest最新版本| 久久av资源网| 亚洲午夜激情网页| 99国产精品久久久久老师| 永久免费精品影视网站| 国产日本欧洲亚洲| 国产精品久久久久久影院8一贰佰| 欧美国产日韩在线| 久久综合久久久久88| 欧美在线日韩在线| 亚洲欧美日韩区| 亚洲视频一区| 99riav久久精品riav| 最新国产の精品合集bt伙计| 韩日午夜在线资源一区二区| 国产精品人成在线观看免费| 欧美日韩一区二区免费在线观看| 美腿丝袜亚洲色图| 久久嫩草精品久久久精品| 欧美一区二区三区四区在线观看| 亚洲伊人久久综合| 中文精品视频| 一本色道久久综合亚洲精品不| 91久久黄色| 亚洲国产一区视频| 亚洲国产成人高清精品| 永久555www成人免费| 国内成人在线| 国产自产高清不卡| 国产一区在线免费观看| 国产欧美一区二区三区另类精品| 国产精品三级久久久久久电影| 国产精品国产三级国产普通话99| 欧美日韩一区二区三区免费 | 国产精品一区二区在线观看网站 | 亚洲网友自拍| 亚洲午夜一二三区视频| 亚洲深夜激情| 亚洲一区二区不卡免费| 亚洲一区国产|