亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

告別龐大 PSD,輕松測量尺寸

StonePanda / 2683人閱讀

摘要:起因作為前端工程師,日常開發(fā)離不開文件。對于來說,市面上已經(jīng)有如,體驗也很不錯,但是需要下載同學(xué)提供的龐大的才能進行標(biāo)注體驗。而且有時候還是需要同學(xué)給龐大的文件,我們才能在中自動標(biāo)注。

起因

作為前端工程師,日常開發(fā)離不開 psd 文件。

但是日常開發(fā)的一個小彈窗頁面,它的 psd 居然需要 30+Mb,所以經(jīng)常得定期清理 psd...

對于我一個 PS 小菜雞來說,用 PSD 無非只是需要用來度量元素大?。ㄔ亻g距),查看屬性等簡單的功能。

思考,對比

相對比于 sketch,sketch 具有 sketch-measure,設(shè)計師導(dǎo)出成靜態(tài)資源給前端即可。

對于 PSD 來說,市面上已經(jīng)有如 pxcook / lanhuapp,體驗也很不錯,但是需要下載 U 同學(xué)提供的 (龐大的) psd 才能進行標(biāo)注體驗。

而且有時候還是需要 U 同學(xué)給(龐大的) PSD 文件,我們才能在 pxcook / lanhuapp 中自動標(biāo)注。

于是鑒于以上,考慮做一個開源項目,類似于 sketch-measure, 定位為 psd-measure。

效果展示

DEMO
源碼,歡迎 star

命令行

我們也可以使用命令行來導(dǎo)出頁面標(biāo)注

bash

npm i measure-export-cli -g
# 開啟服務(wù),在線預(yù)覽 `path/to/psdDir` 下的 psd
measure-export start path/to/psdDir
# 構(gòu)建 `path/to/psdDir` 下的 psd 至 `dist` 文件目錄
measure-export build path/to/psdDir
Chrome 插件

提供 Chrome 插件,當(dāng)我們點擊 psd 鏈接時候跳出 Measure UI,而不是下載 PSD,當(dāng)然我們也可以點擊右上方的下載進行下載。

安裝

下載擴展,點擊下載

打開 Chrome 擴展頁面: chrome://extensions/

拖拽下載的包至頁面中進行安裝

出現(xiàn)該圖標(biāo)表示安裝完成

設(shè)計與實現(xiàn)

流程如下:

PSD 文件格式介紹

File Header(定長) 主要包括這個 psd 文件整體的數(shù)據(jù),如版本,尺寸大小,圖片通道數(shù),使用的顏色類別(rgb、cmyk...)

Color Mode Data Section(變長) 主要是部分顏色類型圖片需要用到

Image Resources(變長) 放置一些外部的圖片資源

Layer and Mask(變長) 放置圖層和蒙層的各種信息,大小位置,字體,描邊等等

Image Data(變長) 放置圖像像素數(shù)據(jù)

PSD.js

使用 psd.js 便是解析上述文件結(jié)構(gòu),得到可讀的數(shù)據(jù)結(jié)構(gòu)。
其中 psd.js 使用 getter 得到懶解析數(shù)據(jù),即如下代碼:

const obj = Object.defineProperty({}, "someParsedVal", {
  get: function () {
    if (!this._someParsedVal) {
      const afterMs = Date.now() + 3000
      while (true) {
        if (Date.now() >= afterMs) {
          this._someParsedVal = "ok"
          break
        }
      }
    }
    return this._someParsedVal
  }
})

obj.someParsedVal // 3s 后出來
obj.someParsedVal // 很快

在 mobx3 中也有類似的設(shè)計(LazyInitializer)

psd-html

將 PSD 解析為 HAST,進而轉(zhuǎn)換為 HTML

HAST (HTML 抽象語法樹)

如下 html:

對應(yīng) HAST 為

{
  "type": "element",
  "tagName": "a",
  "properties": {
    "href": "http://alpha.com",
    "id": "bravo",
    "className": ["bravo"],
    "download": true
  },
  "children": []
}
前后端同構(gòu)

前后端同構(gòu)的意思:同時運行在客戶端和服務(wù)端,具體便是同時執(zhí)行在瀏覽器環(huán)境和 nodejs 環(huán)境

實現(xiàn)前后端同構(gòu)的一些常用方式,借助構(gòu)建工具 browserify / rollup / webpack 來分別打包不同環(huán)境的 js

模擬環(huán)境

在 nodejs 環(huán)境,對于 nodejs built-in modules 不進行打包

在 browser 環(huán)境,則將預(yù)設(shè)的 built-in modules 打包進去,以及一些 global 變量(如 process.env / __dirname)也會進行 mock

利用 變量替換 + treeshake 區(qū)分不同環(huán)境的代碼

如 webpack 配置 DefinePlugin

{
  plugins: [
    new webpack.DefinePlugin({
      "process.env.RUN_ENV": JSON.stringify("browser")
    })
  ]
}

在代碼中對不同環(huán)境打包進行區(qū)分

module.exports =
  process.env.RUN_ENV === "browser"
    ? {
        psdToHtml,
        psdToHtmlFromBuffer,
        psdToHtmlFromURL,
        psdToHAST,
        psdToHASTFromBuffer
      }
    : {
        psdToHtml,
        psdToHtmlFromPath,
        psdToHtmlFromBuffer,
        psdToHAST,
        psdToHASTFromBuffer,
        psdToHASTFromPath
      }

最終打包出來的 js 則會剔除掉 psdToHASTFromPath 相關(guān)代碼

package.json 配置

如下:

{
  "main": "dist/psd-html.cjs.js",
  "browser": "dist/psd-html.browser.cjs.js",
  "cdn": "dist/psd-html.browser.umd.min.js",
  "unpkg": "dist/psd-html.browser.umd.min.js"
}

main: nodejs 環(huán)境加載的 js

browser: browser 環(huán)境加載的 js

cdn: 部分 cdn 服務(wù)加載的 js

unpkg: unpkg cdn 服務(wù)加載的 js (主要使用 UMD 規(guī)范打包)

直接訪問 https://unpkg.com/@moyuyc/psd... 則會重定向至 https://unpkg.com/@moyuyc/psd...{latest-version}/dist/psd-html.browser.umd.min.js

html-measure 交互 布局定位

將 psd 導(dǎo)出成整個圖片,利用每一個圖層的定位和大小來自動標(biāo)注。

其他

2 個 div,相對與同一個父級的絕對定位,如何判斷他們是否相交?

.
.
.
.
.
.
.
.
.
.

正面直接判斷是很費力的,要考慮各種情況,這時候需要逆向思維,考慮不相交的情況。
這時候就簡單了

不相交只要滿足下面四種情況之一就可以

function isIntersect(node1, node2) {
  const rect1 = node1.getBoundingClientRect()
  const rect2 = node2.getBoundingClientRect()
  return !(
    rect1.right < rect2.left ||
    rect1.left > rect2.right ||
    rect1.bottom < rect2.top ||
    rect1.top > rect2.bottom
  )
}
measure-export(-cli)

輸入 psd / html 導(dǎo)出 meas-ui 靜態(tài)資源,流程如圖(區(qū)分 prod 和 dev 環(huán)境)

.svg)

Todo

[ ] 提供 chrome 插件:當(dāng)瀏覽器打開 psd 時候,渲染測量尺寸 UI

相關(guān)項目

@moyuyc/psd.js - 解析 psd 文件,格式化 (Forked from psd.js)

@moyuyc/psd-html - psd -> hast -> html

html-measure - 標(biāo)注交互

meas-ui - 前端 UI 展示,包含標(biāo)注交互

measure-export(-cli) - 輸入 psd / html 導(dǎo)出 meas-ui 靜態(tài)資源

參考資料

Adobe Photoshop File Formats Specification PS 文件格式官方標(biāo)準(zhǔn)

Photoshop Styles File Format

JS. 如何判斷兩個矩形是否相交

HAST

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/97946.html

相關(guān)文章

  • 神器!解放你的雙手——UI設(shè)計稿全自動切圖和標(biāo)注的一些工具推薦

    摘要:藍湖通過幫助設(shè)計師更好地向團隊展示設(shè)計圖描述頁面之間的跳轉(zhuǎn)關(guān)系。如果設(shè)計圖出現(xiàn)改動和更新,藍湖也能自動添加新版本。藍湖基于這些反饋快速迭代,而自動標(biāo)注功能就是其中一項。 原文收錄在我的 GitHub博客 (https://github.com/jawil/blog) ,喜歡的可以關(guān)注最新動態(tài),大家一起多交流學(xué)習(xí),共同進步,以學(xué)習(xí)者的身份寫博客,記錄點滴。 工欲善其事,必先利其器。我只是...

    lylwyy2016 評論0 收藏0
  • 神器!解放你的雙手——UI設(shè)計稿全自動切圖和標(biāo)注的一些工具推薦

    摘要:藍湖通過幫助設(shè)計師更好地向團隊展示設(shè)計圖描述頁面之間的跳轉(zhuǎn)關(guān)系。如果設(shè)計圖出現(xiàn)改動和更新,藍湖也能自動添加新版本。藍湖基于這些反饋快速迭代,而自動標(biāo)注功能就是其中一項。 原文收錄在我的 GitHub博客 (https://github.com/jawil/blog) ,喜歡的可以關(guān)注最新動態(tài),大家一起多交流學(xué)習(xí),共同進步,以學(xué)習(xí)者的身份寫博客,記錄點滴。 工欲善其事,必先利其器。我只是...

    tianren124 評論0 收藏0
  • iconfont實踐小結(jié)

    摘要:所以實現(xiàn)小圖標(biāo)時雪碧圖跟圖標(biāo)字體會在一個網(wǎng)站共存,自定義圖標(biāo)字體為什么比較耗時,且太復(fù)雜圖標(biāo)無法實現(xiàn)請往下看開發(fā)流程就了解了。參考資料細談淺談圖標(biāo)字體向下兼容優(yōu)雅降級技術(shù)繪制小圖標(biāo)技巧雪碧圖圖標(biāo)字體矢量小圖標(biāo)設(shè)計本文對應(yīng)源碼源碼地址演示地址 showImg(https://segmentfault.com/img/bVRnAC?w=431&h=220); 之前寫了一篇關(guān)于雪碧圖的博文,...

    bitkylin 評論0 收藏0

發(fā)表評論

0條評論

StonePanda

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<