成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

告別龐大 PSD,輕松測(cè)量尺寸

StonePanda / 2630人閱讀

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

起因

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

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

對(duì)于我一個(gè) PS 小菜雞來(lái)說(shuō),用 PSD 無(wú)非只是需要用來(lái)度量元素大?。ㄔ亻g距),查看屬性等簡(jiǎn)單的功能。

思考,對(duì)比

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

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

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

于是鑒于以上,考慮做一個(gè)開源項(xiàng)目,類似于 sketch-measure, 定位為 psd-measure。

效果展示

DEMO
源碼,歡迎 star

命令行

我們也可以使用命令行來(lái)導(dǎo)出頁(yè)面標(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)我們點(diǎn)擊 psd 鏈接時(shí)候跳出 Measure UI,而不是下載 PSD,當(dāng)然我們也可以點(diǎn)擊右上方的下載進(jìn)行下載。

安裝

下載擴(kuò)展,點(diǎn)擊下載

打開 Chrome 擴(kuò)展頁(yè)面: chrome://extensions/

拖拽下載的包至頁(yè)面中進(jìn)行安裝

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

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

流程如下:

PSD 文件格式介紹

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

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

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

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

Image Data(變長(zhǎng)) 放置圖像像素?cái)?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 后出來(lái)
obj.someParsedVal // 很快

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

psd-html

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

HAST (HTML 抽象語(yǔ)法樹)

如下 html:

對(duì)應(yīng) HAST 為

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

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

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

模擬環(huán)境

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

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

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

如 webpack 配置 DefinePlugin

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

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

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

最終打包出來(lái)的 js 則會(huì)剔除掉 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... 則會(huì)重定向至 https://unpkg.com/@moyuyc/psd...{latest-version}/dist/psd-html.browser.umd.min.js

html-measure 交互 布局定位

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

其他

2 個(gè) div,相對(duì)與同一個(gè)父級(jí)的絕對(duì)定位,如何判斷他們是否相交?

.
.
.
.
.
.
.
.
.
.

正面直接判斷是很費(fèi)力的,要考慮各種情況,這時(shí)候需要逆向思維,考慮不相交的情況。
這時(shí)候就簡(jiǎn)單了

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

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 時(shí)候,渲染測(cè)量尺寸 UI

相關(guān)項(xiàng)目

@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. 如何判斷兩個(gè)矩形是否相交

HAST

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/97946.html

相關(guān)文章

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

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

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

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

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

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

    bitkylin 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

StonePanda

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<