整合營(yíng)銷服務(wù)商

          電腦端+手機(jī)端+微信端=數(shù)據(jù)同步管理

          免費(fèi)咨詢熱線:

          5分鐘帶你看懂 GCanvas渲染引擎的演進(jìn)


          者| 蔣衛(wèi)星(韋青)
          出品|阿里巴巴新零售淘系技術(shù)部

          本文內(nèi)容大綱:
          1、輕量級(jí)圖形渲染引擎與應(yīng)用
          2、渲染引擎演進(jìn)與優(yōu)化之路
          3、渲染引擎未來(lái)的發(fā)展方向

          GCanvas 的定位是遵循 w3c 標(biāo)準(zhǔn)的跨平臺(tái)的輕量級(jí)圖形渲染引擎。有清晰的定位和目標(biāo),并且緊貼現(xiàn)有的業(yè)務(wù),為業(yè)務(wù)提供豐富表現(xiàn)形式。

          GCanvas 發(fā)展

          GCanvas 引擎從早期的 H5 性能加速,到 Weex 業(yè)務(wù)落地,從小游戲的業(yè)務(wù)探索,到服務(wù)端渲染,再到小程序。經(jīng)過(guò)幾個(gè)階段的發(fā)展后日漸成熟。

          淘系無(wú)線架構(gòu)的不斷升級(jí)迭代,GCanvas 隨之保持著更新迭代的步調(diào),在多個(gè)業(yè)務(wù)場(chǎng)景中使用,了解下一些應(yīng)用案例。

          應(yīng)用案例

          GCanvas 的目標(biāo)人群是業(yè)務(wù)開發(fā)者,滿足業(yè)務(wù)的功能需求,對(duì)開發(fā)者也非常友好,尤其是前端開發(fā)者。熟悉 H5 Canvas 的同學(xué),很容易上手,無(wú)任何學(xué)習(xí)成本。

          Weex
          2017年雙十一預(yù)熱會(huì)場(chǎng),GCanvas 與魔影合作的版頭動(dòng)畫

          天貓未來(lái)店
          天貓未來(lái)店的智能電子標(biāo)簽,基于 GCanvas JSBinding 的智能電子標(biāo)簽

          小游戲
          野生小伙伴,基于GCanvas小游戲應(yīng)用

          Sketch Render
          Demo+ 中的 Sketch Render ,基于 GCanvas 實(shí)現(xiàn)的服務(wù)端渲染 Sketch 文件

          支付寶小程序/淘寶商家應(yīng)用Canvas
          基于支付寶小程序/淘系商家應(yīng)用同層渲染組件
          支付寶小程序諸葛找房 - 2D

          淘寶商家應(yīng)用AR試妝 - WebGL

          架構(gòu)演進(jìn)與優(yōu)化

          以業(yè)務(wù)先贏的基本原則,保證業(yè)務(wù)的前提下,架構(gòu)容器和升級(jí)變化過(guò)程中,GCanvas 引擎也經(jīng)歷了演進(jìn)和升級(jí)優(yōu)化。

          2017年的架構(gòu)
          以插件為主的實(shí)現(xiàn),僅支持移動(dòng)端

          最新架構(gòu)
          提供標(biāo)準(zhǔn)接口,鏈路升級(jí),API升級(jí),不僅支持移動(dòng)端還支持服務(wù)端

          架構(gòu)變化主要有以下幾個(gè)方面:

          • 適配支持更多的 JS 框架和庫(kù)
          • JS 到 Native 調(diào)用通路,從模塊路由反射升級(jí)到 JSBinding
          • 渲染 API 支持 Metal
          • 增加 MacOS 和 Linux 平臺(tái)支持

          ? 內(nèi)功修煉

          在快速迭代過(guò)重中,保持修煉內(nèi)功。為保證高性能這個(gè)根本,在鏈路、內(nèi)核以及底層圖形 API 等方面也都做了不少優(yōu)化與升級(jí)。

          JS 到 Native 鏈路優(yōu)化

          從 Weex 調(diào)用鏈路到 JSBinding,Weex 容器的 JS 到 Native 的通路采用模塊路由和反射的調(diào)用方式調(diào)用具體的模塊和組件。在 UI 和一些非高頻的場(chǎng)景完全能滿足需求。

          但是對(duì)于連續(xù)操作、連續(xù)動(dòng)畫等高頻的 JS 到 Native 通訊的場(chǎng)景,鏈路上的耗時(shí)非常大,導(dǎo)致卡頓產(chǎn)生。這也是為什會(huì) BindingX 和 GCanvas 的 JSBinding 的出現(xiàn)。

          BindingX是另一種解決頻發(fā)通訊消耗的方案,有興趣的可以看下BindingX。

          GCanvas 的 JSBinding 的實(shí)現(xiàn):通過(guò)鏈路調(diào)用的改造,整體幀率平均提升10幀左右。Android 和 iOS 的 JSBinding 實(shí)現(xiàn)方案類似。

          以 iOS 舉例說(shuō)明:iOS 嘗試使用 JSExport 和全局方法,兩種 JSBinding 方案。

          • 第一種方案,使用 JSExport 和 JSExportAS
          • 第二種方案,使用 C Export 將方法和屬性用 JSStaticFunction 和 JSStaticValue 進(jìn)行綁定

          兩種實(shí)現(xiàn)方案,經(jīng)過(guò)測(cè)試對(duì)比第二種方案在性能更好。原因在于靜態(tài) JS 方法是通過(guò)方法名到 Native 函數(shù)的直接映射,而 JSExport 的方案則需要類型檢查,協(xié)議校驗(yàn),再調(diào)用 Native 方法中間經(jīng)過(guò)額外的處理。

          簡(jiǎn)單的耗時(shí)測(cè)試數(shù)據(jù)對(duì)比:

          JS 到 Native 數(shù)據(jù)傳輸
          方法調(diào)用與屬性訪問(wèn)之外,參數(shù)數(shù)據(jù)的傳輸也影響每幀耗時(shí),尤其是在 WebGL 的場(chǎng)景,通常有很大頂 點(diǎn)數(shù)據(jù)需要處理,有幾萬(wàn)-幾十萬(wàn)字節(jié),甚至更多。JS 到 Native 的大數(shù)據(jù)傳輸避免內(nèi)存拷貝。

          JS 與 Native 對(duì)象生命周期
          JSBinding 的對(duì)象生命周期管理,JS 對(duì)象與 Native 對(duì)象一一對(duì)應(yīng),在 JS 對(duì)象創(chuàng)建觸發(fā) JSObjectInitializeCallback 回調(diào),創(chuàng)建 Native 對(duì)象,并將 JS 與 Native 建立關(guān)聯(lián)。JS 的 GC 回收對(duì)象觸發(fā) JSObjectFinalizeCallback 的回調(diào)中去釋放對(duì)應(yīng) Native 對(duì)象。

          幀率優(yōu)化
          除了調(diào)用鏈路對(duì)幀率的提升,單幀繪制的 CPU 和 GPU 耗時(shí)相關(guān)的優(yōu)化點(diǎn)

          • 頂點(diǎn)數(shù)據(jù)計(jì)算,頂點(diǎn)數(shù)據(jù)合并提交
          • 優(yōu)化緩存策略,優(yōu)化文字相關(guān)紋理的緩存
          • 增加狀態(tài)管理,減少 GPU 提交數(shù)據(jù)和頻次
          • 優(yōu)化多邊形填充效率
          • 抗鋸齒等耗時(shí)特性可選

          w3c 標(biāo)準(zhǔn)完善

          • 支持陰影
          • 支持虛線
          • 支持多Clip區(qū)域嵌套
          • 支持Winding Rule支持

          擴(kuò)展能力,擴(kuò)展一些非標(biāo)接口支持 Sketch 渲染

          • 陰影的擴(kuò)散
          • 路徑的圖案填充
          • 路徑的高斯模糊
          • 路徑的內(nèi)描邊和外描邊

          底層圖形API升級(jí)
          在 iOS12 之后,蘋果將 OpenGL ES API 設(shè)為廢棄,在已支持的設(shè)備上 OpenGL ES 的調(diào)用都已映射到 Metal 相應(yīng)的后端實(shí)現(xiàn),Metal 替換 OpenGL 勢(shì)在必行。GCanvas 也已投入開發(fā) Metal,可選擇使用 Metal 作為渲染的后端。已完成了 2D 的絕大部分能力。

          選擇 Metal 會(huì)帶來(lái)以下方面的收益:

          • 內(nèi)存數(shù)據(jù)使用更高效,內(nèi)存數(shù)據(jù)可共享,
          • 盡可能的榨取更多 GPU 性能
          • 擺脫 OpenGL 的狀態(tài)機(jī),更友好的面向?qū)ο缶幊?/li>
          • 蘋果后續(xù)的持續(xù)投入和更新
          • 豐富的調(diào)試工具,能精確到每個(gè)頂點(diǎn)數(shù)據(jù)和每個(gè)素點(diǎn)顏色
          • 便捷調(diào)試這著色器語(yǔ)言(Metal Shader Language)

          在內(nèi)核升級(jí)優(yōu)化的過(guò)程中,也有很多同學(xué)積極參與其中來(lái)在此表示感謝。

          穩(wěn)定性

          增加了 API 的自動(dòng)化測(cè)試以及 CI 建立保障穩(wěn)定性。

          未來(lái)的方向

          • GCanvas 開源社區(qū)加大投入增加社區(qū)影響力, 請(qǐng)大家積極關(guān)注并star
          • 更多紋理壓縮格式的支持
          • Vulkan 的持續(xù)演進(jìn)
          • 更多平臺(tái)的支持,IoT 設(shè)備上應(yīng)用
          • 與云端渲染的融合,提供 Fass 能力
          • WebGPU 以及 GPU 計(jì)算方向探索
          • WebAssembly 的應(yīng)用

          作者:蔣衛(wèi)星(韋青)

          本文為云棲社區(qū)原創(chuàng)內(nèi)容,未經(jīng)允許不得轉(zhuǎn)載。

          控被鎖怎么解鎖▉▉▉【一電一 17154833762-】▉▉▉雖然我們講了這么多個(gè)章節(jié),但其實(shí)目前為止就只有一個(gè) Rect 能用,略顯單調(diào)。于是乎,為了讓整個(gè)畫布稍微生動(dòng)一些,這個(gè)章節(jié)我們來(lái)嘗試增加一個(gè)圖片類,如果你以后需要擴(kuò)展一個(gè)物體類,也可以用同樣的方法。另外有時(shí)候我們還希望在物體屬性改變時(shí)或者畫布創(chuàng)建后做一些額外的事情,這個(gè)時(shí)候事件系統(tǒng)就派上用場(chǎng)啦,也就是我們常說(shuō)的發(fā)布訂閱,我覺的這是前端應(yīng)用最廣的設(shè)計(jì)模式?jīng)]有之一了。

          FabricImage 圖片類

          話不多說(shuō),開擼走起。先來(lái)看看 FabricImage 圖片類的實(shí)現(xiàn),我們可以想一下一個(gè)圖片類應(yīng)該具備什么樣的功能,可以看看下面圖片類代碼的調(diào)用方式找找靈感:

          FabricImage.fromURL(
              'https://p26-passport.byteacctimg.com/img/user-avatar/7470b65342454dd6699a6cf772652260~300x300.image',
              (img) => { canvas.add(img) }, // 這里需要手動(dòng)回調(diào)添加物體
              { width: 200, height: 200, left: 300, top: 300 }
          );
          FabricImage.fromURL(
              './src/beidaihe.jpeg',
              (img) => { canvas.add(img) }, // 這里需要手動(dòng)回調(diào)添加物體
              { width: 200, height: 200, left: 600, top: 400 }
          );
          復(fù)制代碼

          上面代碼展示了兩種最常用的圖片加載方式,一個(gè)是遠(yuǎn)程鏈接,一個(gè)是本地圖片,調(diào)用方式看起來(lái)有些特殊,不過(guò)我們先不管這個(gè),直接來(lái)實(shí)現(xiàn)它就行。既然要繪制圖片,那肯定要先加載好才能用,這也是圖片類特殊的地方,它是異步的,并且加載圖片的方法是通用的,所以我們把它寫在 Util 這里,來(lái)簡(jiǎn)單看下加載圖片的代碼(也許你在面試中遇見過(guò)):

          class Util {
              static loadImage(url) {
                  return new Promise((resolve, reject) => { // 方便鏈?zhǔn)秸{(diào)用,promise 這玩意多寫多熟悉就懂了
                      const img = document.createElement('img');
                      img.onload = () => { // 先進(jìn)行事件監(jiān)聽,要在請(qǐng)求圖片前
                          img.onload = img.onerror = null;
                          resolve(img);
                      };;
                      img.onerror = () => {
                          reject(new Error('Error loading ' + img.src));
                      };
                      img.src = url; // 這個(gè)才是真正去請(qǐng)求圖片
                  });
              }
          }
          復(fù)制代碼

          代碼不多也不難理解,那接下來(lái)就要看如何繪制了。在 canvas 中要想繪制圖片也不難,大體過(guò)程就是把圖片變成 img 標(biāo)簽,當(dāng)做參數(shù)傳給 ctx.drawImage 這個(gè)畫布專用繪制方法,稍微要注意點(diǎn)的就是圖片的寬高設(shè)置,我們會(huì)先取傳入?yún)?shù) options 中間的寬高作為圖片的大小,沒傳參數(shù)的話再取圖片自身的寬高(因?yàn)榇藭r(shí)圖片已經(jīng)加載完成,所以可以取到圖片的信息),同樣的來(lái)簡(jiǎn)單看下代碼實(shí)現(xiàn):

          class FabricImage extends FabricObject { // 繼承基類是必須的
              public type: string = 'image'; // 類型標(biāo)識(shí)
              public _element: HTMLImageElement;
              /** 默認(rèn)通過(guò) img 標(biāo)簽來(lái)繪制,因?yàn)樽罱K都是要通過(guò)該標(biāo)簽繪制的 */
              constructor(element: HTMLImageElement, options) {
                  super(options);
                  this._initElement(element, options);
              }
              _initElement(element: HTMLImageElement, options) {
                  this._element = element;
                  this.setOptions(options);
                  this._setWidthHeight(options);
                  return this;
              }
              /** 設(shè)置圖像大小 */
              _setWidthHeight(options) {
                  this.width = 'width' in options ? options.width : this.getElement() ? this.getElement().width || 0 : 0;
                  this.height = 'height' in options ? options.height : this.getElement() ? this.getElement().height || 0 : 0;
              }
              /** 核心:直接調(diào)用 drawImage 繪制圖像 */
              _render(ctx: CanvasRenderingContext2D) {
                  const x = -this.width / 2;
                  const y = -this.height / 2;
                  const elementToDraw = this._element;
                  elementToDraw && ctx.drawImage(elementToDraw, x, y, this.width, this.height);
              }
              getElement() {
                  return this._element;
              }
              /** 如果是根據(jù) url 或者本地路徑加載圖像,本質(zhì)都是取加載圖片完成之后在轉(zhuǎn)成 img 標(biāo)簽 */
              static fromURL(url, callback, imgOptions) {
                  Util.loadImage(url).then((img) => {
                      callback && callback(new FabricImage(img as HTMLImageElement, imgOptions));
                  });
              }
          }
          復(fù)制代碼

          看完上面的代碼,你應(yīng)該理解了前面為什么要那樣調(diào)用,雖然看起來(lái)有點(diǎn)繁瑣。然后。。。一個(gè)簡(jiǎn)簡(jiǎn)單單的 FabricImage 類就寫好啦。不過(guò)這里我再補(bǔ)充兩個(gè)小點(diǎn):

          • 一個(gè)是我們可以將圖片素材緩存起來(lái),這樣如果用到多張相同的圖片就不用重復(fù)發(fā)請(qǐng)求啦;
          • 另一個(gè)就是 imageSmoothingEnabled 屬性,這個(gè)是 canvas 用來(lái)設(shè)置圖片是否平滑的屬性,默認(rèn)值為 true,表示平滑,false 只是表示圖片不平滑。比如將一張 50*50 的圖像放大 3 倍的時(shí)候,canvas 會(huì)默認(rèn)做一些抗鋸齒處理使之平滑,如果不需要的話可以將其設(shè)置成 false,也算是種優(yōu)化,具體可以看看 mdn 上這個(gè)具體例子,這里就作為知識(shí)點(diǎn)簡(jiǎn)單了解下,當(dāng)然我也截了個(gè)示意圖意思一下(仔細(xì)看,一定能看出差別的):

          其實(shí)擴(kuò)展一個(gè)類還是非常簡(jiǎn)單的,你只需要知道這個(gè)類會(huì)有哪些獨(dú)特的自有屬性,并搞定 _render() 方法即可。

          事件派發(fā)

          因?yàn)檫@個(gè)章節(jié)內(nèi)容比較少,所以我就把事件派發(fā)的內(nèi)容也放在這里講解了。
          有時(shí)候我們希望在物體初始化前后、狀態(tài)改變前后、一些交互前后,能夠觸發(fā)相應(yīng)的事件來(lái)實(shí)現(xiàn)自己的需求,比如畫布被點(diǎn)擊了我想...,物體被移動(dòng)了我想...,這個(gè)就是典型的發(fā)布訂閱模式,前端應(yīng)用最廣泛的設(shè)計(jì)模式,沒有之一(當(dāng)然只是我覺得),比如:

          • html 中的 addEventListener
          • vue 中的 EventBus
          • 各種庫(kù)和插件暴露的一些鉤子函數(shù)(或者說(shuō)是生命周期) 早前這玩意我也沒真正理解,總是看了就忘,因?yàn)榭偢杏X這東西很抽象,說(shuō)不上來(lái)這到底是個(gè)什么東西,所以這里我希望把它具象化,以便于理解。發(fā)布訂閱它其實(shí)可以理解成一個(gè)簡(jiǎn)單的對(duì)象,就像下面這樣:
          // key 就是事件名,key 存儲(chǔ)的值就是一堆回調(diào)函數(shù)
          const eventObj = {
              eventName1: [cb1, cb2, ... ],
              eventName2: [cb1, cb2, cb3, ... ],
              ...
              // 比如下面這些常見的事件名
              click: [cb1, cb2, ... ],
              created: [cb1, cb2, cb3, ... ],
              mounted: [cb1, cb2, ... ],
          }
          復(fù)制代碼

          我們最終要構(gòu)造的就是這樣一個(gè)對(duì)象,eventObj 相當(dāng)于一個(gè)事件管理中心,當(dāng)我們觸發(fā)相應(yīng)條件 eventName 的事件發(fā)布時(shí)(發(fā)布),就會(huì)找到 eventObj 里面 eventName 對(duì)應(yīng)的那個(gè)數(shù)組,然后將里面的回調(diào)函數(shù) cb 挨個(gè)遍歷執(zhí)行即可。那我們?cè)趺聪?eventObj 添加事件回調(diào)呢,很簡(jiǎn)單就是找到 eventName 對(duì)應(yīng)的數(shù)組往里 push 就行(訂閱),當(dāng)然為了操作方便我們需要提供 eventObj.on、eventObj.off、eventObj.emit 等方法方便我們添加、觸發(fā)和刪除事件。
          下面我們來(lái)看看具體實(shí)現(xiàn),這東西寫多了就是很簡(jiǎn)單的一件事情,寫法也比較固定,寫好了之后也基本不用改,實(shí)在不行 copy 也行:

          /**
           * 發(fā)布訂閱,事件中心
           * 應(yīng)用場(chǎng)景:可以在特定的時(shí)間點(diǎn)觸發(fā)一系列事件(在本文主要就是渲染前后、初始化物體前后、物體狀態(tài)改變時(shí))
           */
          export class EventCenter {
              private __eventListeners; // 就是上面說(shuō)的 eventObj 那個(gè)對(duì)象
              /** 往某個(gè)事件里面添加回調(diào),找到事件名所對(duì)應(yīng)的數(shù)組往里push */
              on(eventName, handler) {
                  if (!this.__eventListeners) {
                      this.__eventListeners = {};
                  }
          
                  if (!this.__eventListeners[eventName]) {
                      this.__eventListeners[eventName] = [];
                  }
                  this.__eventListeners[eventName].push(handler);
                  return this;
              }
              /** 觸發(fā)某個(gè)事件回調(diào),找到事件名對(duì)應(yīng)的數(shù)組拿出來(lái)遍歷執(zhí)行 */
              emit(eventName, options = {}) {
                  if (!this.__eventListeners) {
                      return this;
                  }
          
                  let listenersForEvent = this.__eventListeners[eventName];
                  if (!listenersForEvent) {
                      return this;
                  }
          
                  for (let i = 0, len = listenersForEvent.length; i < len; i++) {
                      listenersForEvent[i] && listenersForEvent[i].call(this, options);
                  }
                  this.__eventListeners[eventName] = listenersForEvent.filter((value) => value !== false);
                  return this;
              }
              /** 刪除某個(gè)事件回調(diào) */
              off(eventName, handler) {
                  if (!this.__eventListeners) {
                      return this;
                  }
          
                  if (arguments.length === 0) {
                      // 如果沒有參數(shù),就是解綁所有事件
                      for (eventName in this.__eventListeners) {
                          this._removeEventListener.call(this, eventName);
                      }
                  } else {
                      // 解綁單個(gè)事件
                      this._removeEventListener.call(this, eventName, handler);
                  }
                  return this;
              }
              _removeEventListener(eventName, handler) {
                  if (!this.__eventListeners[eventName]) {
                      return;
                  }
                  let eventListener = this.__eventListeners[eventName];
                  // 注意:這里我們刪除監(jiān)聽一般都是置為 null 或者 false
                  // 當(dāng)然也可以用 splice 刪除,不過(guò) splice 會(huì)改變數(shù)組長(zhǎng)度,這點(diǎn)要尤為注意
                  if (handler) {
                      eventListener[eventListener.indexOf(handler)] = false;
                  } else {
                      eventListener.fill(false);
                  }
              }
          }
          復(fù)制代碼

          希望這種模式大家能夠達(dá)到默寫的水平,對(duì)我們?nèi)蘸蟠a的理解也確實(shí)是很有幫助的。
          然后接下來(lái)要做什么呢?很簡(jiǎn)單,就是讓需要事件的類繼承至這個(gè)事件類就可以了,然后在有需要的地方觸發(fā)就行了,這里我們以畫布為例,看下下面的代碼你就知道這種套路了

          、File<文件>1.New<新建>

          2.Open<打開>

          3.Open As<打開為>

          4.Open Recent<最近打開文件>

          5.Close<關(guān)閉>

          6.Save<存儲(chǔ)>

          7.Save As<存儲(chǔ)為>

          8.Save for Web<存儲(chǔ)為 Web 所用格弅>

          9.Revert<恢復(fù)>

          10.Place<置入>

          11.Import<輸入>

          <1>PDF Image<PDF 圖象導(dǎo)入>

          <2>Annotations<注釋>

          12.Export<輸出>

          13.Manage Workflow<管理工作流程>

          <1>Check In<登記>

          <2>Undo Check Out<迓原注銷>

          <3>Upload To Server<上載到服務(wù)器>

          <4>Add To Workflow<添加到工作流程>

          <5>Open From Workflow<從工作流程打開>

          14.Automate<自勱><1>Batch<批處理>

          <2>Create Droplet<創(chuàng)建快捷批處理>

          <3>Conditional Mode Change<條件模弅更改>

          <4>Contact Sheet<聯(lián)系表>

          <5>Fix Image<限制圖像>

          <6>Multi<Page PDF to PSD<多頁(yè)面 PDF 文件到 PSD 文件>

          <7>Picture package<圖片包>

          <8>Web Photo Gallery<Web 照片畫廊>

          15.File Info<文件簡(jiǎn)介>

          16.Print Options<打印選頃>

          17.Page Setup<頁(yè)面設(shè)置>

          18.Print<打印>

          19.Jump to<跳轉(zhuǎn)到>

          20.Exit<退出>

          二、Edit<編輯>

          1.Undo<迓原>

          2.Step Forward<向前>

          3.Step Backward<迒回>

          4.Fade<消退>

          5.Cut<剪切>

          6.Copy<拷貝>7.Copy Merged<吅幵拷貝>

          8.Paste<粘貼>

          9.Paste Into<粘貼入>

          10.Clear<清除>

          11.Fill<填充>

          12.Stroke<描辪>

          13.Free Transform<自由發(fā)形>

          14.Transform<發(fā)換>

          <1>Again<再次>

          <2>Sacle<縮放>

          <3>Rotate<旋轉(zhuǎn)>

          <4>Skew<斜切>

          <5>Distort<扭曲>

          <6>Prespective<透規(guī)>

          <7>Rotate 180°<旋轉(zhuǎn) 180 度>

          <8>Rotate 90°CW<頇時(shí)針旋轉(zhuǎn) 90 度>

          <9>Rotate 90°CCW<逆時(shí)針旋轉(zhuǎn) 90 度>

          <10> Flip Hpeizontal<水平翻轉(zhuǎn)>

          <11> Flip Vertical<垂直翻轉(zhuǎn)>

          15.Define Brush<定丿畫筆>

          16.Define Pattern<設(shè)置圖案>17.Define Custom Shape<定丿自定形狀>

          18.Purge<清除內(nèi)存數(shù)據(jù)>

          <1> Undo<迓原>

          <2> Clipboard<剪貼板>

          <3> Histories<歷史紈弽>

          <4> All<全部>

          19.Color Settings<顏色設(shè)置>

          20.Preset Manager<預(yù)置管理器>

          21.Preferences<預(yù)設(shè)>

          <1> General<常觃>

          <2> Saving Files<存儲(chǔ)文件>

          <3> Display & Cursors<顯示不光標(biāo)>

          <4> Transparency & Gamut<透明區(qū)域不色域>

          <5> Units & Rulers<單位不標(biāo)尺>

          <6> Guides & Grid<參考線不網(wǎng)格>

          <7> Plug<Ins & Scratch Disks<增效工具不暫存盤>

          <8> Memory & Image Cache<內(nèi)存和圖像高速緩存>

          <9> Adobe Online<Adobe 在線>

          <10> Workflows Options<工作流程選頃>

          三、Image<圖像>

          1.Mode<模弅><1> Biyesap<位圖>

          <2> Grayscale<灰度>

          <3> Duotone<雙色調(diào)>

          <4> Indexed Color<索引色>

          <5> RGB Color<RGB 色>

          <6> CMYK Color<CMYK 色>

          <7> Lab Color<Lab 色>

          <8> Multichannel<多通道>

          <9> 8 Bits/Channel<8 位通道>

          <10> 16 Bits/Channel<16 位通道>

          <11> Color Table<顏色表>

          <12>Assing Profile<制定配置文件>

          <13>Convert to Profile<轉(zhuǎn)換為配置文件>

          2.Adjust<調(diào)整>

          <1> Levels<色階>>

          <2> Auto Laves<自勱色階>

          <3> Auto Contrast<自勱對(duì)比度>

          <4> Curves<曲線>>

          <5> Color Balance<色彩平衡>

          <6> Brightness/Contrast<亮度/對(duì)比度>

          <7> Hue/Saturation<色相/飽和度><8> Desaturate<去色>

          <9> Replace Color<替換顏色>

          <10> Selective Color<可選顏色>

          <11> Channel Mixer<通道混吅器>

          <12> Gradient Map<漸發(fā)映射>

          <13> Invert<反相>

          <14> Equalize<色彩均化>

          <15> Threshold<閾值>

          <16> Posterize<色調(diào)分離>

          <17> Variations<發(fā)化>

          3.Duplicate<復(fù)制>

          4.Apply Image<應(yīng)用圖像>

          5.Calculations<計(jì)算>

          6.Image Size<圖像大小>

          7.Canvas Size<畫布大小>

          8.Rotate Canvas<旋轉(zhuǎn)畫布>

          <1> 180°<180 度>

          <2> 90°CW<頇時(shí)針 90 度>

          <3> 90°CCW<逆時(shí)針 90 度>

          <4> Arbitrary<任意覘度>

          <5> Flip Horizontal<水平翻轉(zhuǎn)><6> Flip Vertical<垂直翻轉(zhuǎn)>

          9.Crop<裁切>

          10.Trim<修整>

          11.Reverl All<顯示全部>

          12.Histogram<直斱圖>

          13.Trap<陷印>

          14.Extract<抽出>

          15.Liquify<液化>

          四、Layer<圖層>

          1.New<新建>

          <1> Layer<圖層>

          <2> Background From Layer<背景圖層>

          <3> Layer Set<圖層組>

          <4> Layer Set From Linked<圖層組來(lái)自鏈接癿>

          <5> Layer via Copy<通過(guò)拷貝癿圖層>

          <6> Layer via Cut<通過(guò)剪切癿圖層>

          2.Duplicate Layer<復(fù)制圖層>

          3.Delete Layer<初除圖層>

          4.Layer Properties<圖層屬悵>

          5.Layer Style<圖層樣弅>

          <1> Blending Options<混吅選頃><2> Drop Shadow<投影>

          <3> Inner Shadow<內(nèi)陰影>

          <4> Outer Glow<外収光>

          <5> Inner Glow<內(nèi)収光>

          <6> Bevel and Emboss<斜面和浮雕>

          <7> Satin<光澤>

          <8> Color Overlay<顏色疊加>

          <9> Gradient Overlay<漸發(fā)疊加>

          <10> Pattern Overlay<圖案疊加>

          <11> Stroke<描辪>

          <12> Copy Layer Effects<拷貝圖層樣弅>

          <13> Paste Layer Effects<粘貼圖層樣弅>

          <14> Paste Layer Effects To Linked<將圖層樣弅粘貼癿鏈接癿>

          <15> Clear Layer Effects<清除圖層樣弅>

          <16> Global Light<全局光>

          <17> Create Layer<創(chuàng)建圖層>

          <18> Hide All Effects<顯示/隱藏全部效果>

          <19> Scale Effects<縮放效果>

          6.New Fill Layer<新填充圖層>

          <1> Solid Color<純色>

          <2> Gradient<漸發(fā)><3> Pattern<圖案>

          7.New Adjusyesent Layer<新調(diào)整圖層>

          <1>Levels<色階>

          <2>Curves<曲線>

          <3>Color Balance<色彩平衡>

          <4>Brightness/Contrast<亮度/對(duì)比度>

          <5>Hue/Saturation<色相/飽和度>

          <6>Selective Color<可選顏色>

          <7>Channel Mixer<通道混吅器>

          <8>Gradient Map<漸發(fā)映射>

          <9>Invert<反相>

          <10>Threshold<閾值>

          <11>Posterize<色調(diào)分離>

          8.Change Layer Content<更改圖層內(nèi)容>

          9.Layer Content Options<圖層內(nèi)容選頃>

          10.Type<文字>

          <1> Create Work Path<創(chuàng)建工作路徑>

          <2> Convert to Shape<轉(zhuǎn)發(fā)為形狀>

          <3> Horizontal<水平>

          <4> Vertical<垂直>

          <5> Anti-Alias None<消除鋸齒無(wú)><6> Anti-Alias Crisp<消除鋸齒明晰>

          <7> Anti-Alias Strong<消除鋸齒強(qiáng)>

          <8> Anti-Alias Smooth<消除鋸齒平滑>

          <9> Covert To Paragraph Text<轉(zhuǎn)換為段落文字>

          <10> Warp Text<文字發(fā)形>

          <11>Update All Text Layers<更新所有文本圖層>

          <12>Replace All Missing Fonts<替換所以缺欠文字>

          11.Rasterize<柵格化>

          <1>Type<文字>

          <2>Shape<形狀>

          <3>Fill Content<填充內(nèi)容>

          <4>Layer Clipping Path<圖層剪貼路徑>

          <5>Layer<圖層>

          <6>Linked Layers<鏈接圖層>

          <7>All Layers<所以圖層>

          12.New Layer Based Slice<基亍圖層癿切片>

          13.Add Layer Mask<添加圖層蒙板>

          <1> Reveal All<顯示全部>

          <2> Hide All<隱藏全部>

          <3> Reveal Selection<顯示選區(qū)>

          <4> Hide Selection<隱藏選區(qū)>14.Enable Layer Mask<吪用圖層蒙板>

          15.Add Layer Clipping Path<添加圖層剪切路徑>

          <1>Reveal All<顯示全部>

          <2>Hide All<隱藏全部>

          <3>Current Path<弼前路徑>

          16.Enable Layer Clipping Path<吪用圖層剪切路徑>

          17.Group Linked<亍前一圖層編組>

          18.UnGroup<叏消編組>

          19.Arrange<排列>

          <1> Bring to Front<置為頂層>

          <2> Bring Forward<前秱一層>

          <3> Send Backward<后秱一層>

          <4> Send to Back<置為底層>

          20.Arrange Linked<對(duì)齊鏈接圖層>

          <1> Top Edges<頂辪>

          <2> Vertical Center<垂直居中>

          <3> Bottom Edges<底辪>

          <4> Left Edges<左辪>

          <5> Horizontal Center<水平居中>

          <6> Right Edges<右辪>

          21.Distribute Linked<分布鏈接癿><1> Top Edges<頂辪>

          <2> Vertical Center<垂直居中>

          <3> Bottom Edges<底辪>

          <4> Left Edges<左辪>

          <5> Horizontal Center<水平居中>

          <6> Right Edges<右辪>

          22.Lock All Linked Layers<鎖定所有鏈接圖層>

          23.Merge Linked<吅幵鏈接圖層>

          24.Merge Visible<吅幵可見圖層>

          25.Flatten Image<吅幵圖層>

          26.Matting<修辪>

          <1> Define<去辪>

          <2> Remove Black Matte<秱?cè)ズ谏s辪>

          <3> Remove White Matte<秱?cè)グ咨s辪>

          亐、Selection<選擇>

          1.All<全部>

          2.Deselect<叏消選擇>

          3.Reselect<重新選擇>

          4.Inverse<反選>

          5.Color Range<色彩范圍>

          6.Feather<羽化>7.Modify<修改>

          <1> Border<擴(kuò)辪>

          <2> Smooth<平滑>

          <3> Expand<擴(kuò)展>

          <4> Contract<收縮>

          8.Grow<擴(kuò)大選區(qū)>

          9.Similar<選區(qū)相似>

          10.Transform Selection<發(fā)換選區(qū)>

          11.Load Selection<載入選區(qū)>

          12.Save Selection<存儲(chǔ)選區(qū)>

          六、Filter<濾鏡>

          1.Last Filter<上次濾鏡操作>

          2.Artistic<艴術(shù)效果>

          <1> Colored Pencil<彩色鉛筆>

          <2> Cutout<剪貼畫>

          <3> Dry Brush<干筆畫>

          <4> Film Grain<膠片顆粒>

          <5> Fresco<壁畫>

          <6> Neon Glow<霓虹燈光>

          <7> Paint Daubs<涂抹棒>

          <8> Palette Knife<調(diào)色刀><9> Plastic Wrap<塑料包裃>

          <10> Poster Edges<海報(bào)辪緣>

          <11> Rough Pastels<粗糙彩筆>

          <12> Smudge Stick<繪畫涂抹>

          <13> Sponge<海綿>

          <14> Underpainting<底紋效果>

          <15> Watercolor<水彩>

          3.Blur<模糊>

          <1> Blur<模糊>

          <2> Blur More<迕一步模糊>

          <3> Gaussian Blur<高斯模糊>

          <4> Motion Blur<勱態(tài)模糊>

          <5> Radial Blur<徑向模糊>

          <6> Smart Blur<特殊模糊>

          4.Brush Strokes<畫筆描辪>

          <1> Accented Edges<強(qiáng)化辪緣>

          <2> Angled Stroke<成覘癿線條>

          <3> Crosshatch<陰影線>

          <4> Dark Strokes<深色線條>

          <5> Ink Outlines<油墨概冴>

          <6> Spatter<噴筆><7> Sprayed Strokes<噴色線條>

          <8> Sumi<e<怈量>

          5.Distort<扭曲>

          <1> Diffuse Glow<擴(kuò)散亮光>

          <2> Displace<置換>

          <3> Glass<玱璃>

          <4> Ocean Ripple<海洋波紋>

          <5> Pinch<擠壓>

          <6> Polar Coordinates<極坐標(biāo)>

          <7> Ripple<波紋>

          <8> Shear<切發(fā)>

          <9> Spherize<球面化>

          <10> Twirl<旋轉(zhuǎn)扭曲>

          <11> Wave<波浪>

          <12> Zigzag<水波>

          6.Noise<雜色>

          <1> Add Noise<加入雜色>

          <2> Despeckle<去斑>

          <3> Dust & Scratches<蒙塵不劃痕>

          <4> Median<中間值>

          7.Pixelate<像素化><1> Color Halftone<彩色半調(diào)>

          <2> Crystallize<晶格化>

          <3> Facet<彩坑化>

          <4> Fragment<碎片>

          <5> Mezzotint<銅版雕刻>

          <6> Mosaic<馬賽兊>

          <7> Pointillize<點(diǎn)狀化>

          8.Render<渲染>

          <1> 3D Transform<3D 發(fā)換>

          <2> Clouds<于彩>

          <3> Difference Clouds<分層于彩>

          <4> Lens Flare<鏡頭光暈>

          <5> Lighting Effects<光照效果>

          <6> Texture Fill<紋理填充>

          9.Sharpen<銳化>

          <1> Sharpen<銳化>

          <2> Sharpen Edges<銳化辪緣>

          <3> Sharpen More<迕一步銳化>

          <4> Unsharp Mask<USM 銳化>

          10.Sketch<素描>

          <1> Bas Relief<基底凸現(xiàn)><2> Chalk & Charcoal<粉筆和炭筆>

          <3> Charcoal

          <3> Chrome<鉻黃>

          <4> Conte Crayon<彩色粉筆>

          <5> Graphic Pen<繪圖筆>

          <6> Halftone Pattern<半色調(diào)圖案>

          <7> Note Paper<便條紙>

          <8> Photocopy<副本>

          <9> Plaster<塑料效果>

          <10> Reticulation<網(wǎng)狀>

          <11> Stamp<圖章>

          <12> Torn Edges<撕辪>

          <13> Water Paper<水彩紙>

          11.Stylize<風(fēng)格化>

          <1> Diffuse<擴(kuò)散>

          <2> Emboss<浮雕>

          <3> Extrude<突出>

          <4> Find Edges<查找辪緣>

          <5> Glowing Edges<照亮辪緣>

          <6> Solarize<曝光過(guò)度>

          <7> Tiles<拼貼><8> Trace Contour<等高線>

          <9> Wind<風(fēng)>

          12.Texture<<紋理>

          <1> Craquelure<龜裂縫>

          <2> Grain<顆粒>

          <3> Mosained Tiles<馬賽兊拼貼>

          <4> Patchwork<拼綴圖>

          <5> Stained Glass<染色玱璃>

          <6> Texturixer<紋理化>

          13.Video<規(guī)頻>

          <1> De<Interlace<逐行>

          <2> NTSC Colors<NTSC 色彩>

          14.Other<其它>

          <1> Custom<自定丿>

          <2> High Pass<高反差保留>

          <3> Maximum<最大值>

          <4> Minimum<最小值>

          <5> Offset<位秱>

          15.Digimarc

          <1>Embed Watermark<嵌入水印>

          <2>Read Watermark<讀叏水印>七、View<規(guī)圖>

          1.New View<新規(guī)圖>

          2.Proof Setup<校樣設(shè)置>

          <1>Custom<自定>

          <2>Working CMYK<處理 CMYK>

          <3>Working Cyan Plate<處理青版>

          <4>Working Magenta Plate<處理洋紅版>

          <5>Working Yellow Plate<處理黃版>

          <6>Working Black Plate<處理黑版>

          <7>Working CMY Plate<處理 CMY 版>

          <8>Macintosh RGB

          <9>Windows RGB

          <10>Monitor RGB<顯示器 RGB>

          <11>Simulate Paper White<模擬紙白>

          <12>Simulate Ink Black<模擬墨黑>

          3.Proof Color<校樣顏色>

          4.Gamut Wiring<色域警告>

          5.Zoom In<放大>

          6.Zoom Out<縮小>

          7.Fit on Screen<滿畫布顯示>

          8.Actual Pixels<實(shí)際象素>9.Print Size<打印尺寸>

          10.Show Extras<顯示額外癿>

          11.Show<顯示>

          <1> Selection Edges<選區(qū)辪緣>

          <2> Target Path<目標(biāo)路徑>

          <3> Grid<網(wǎng)格>

          <4> Guides<參考線>

          <5> Slices<切片>

          <6> Notes<注釋>

          <7> All<全部>

          <8> None<無(wú)>

          <9>Show Extras Options<顯示額外選頃>

          12.Show Rulers<顯示標(biāo)尺>

          13.Snap<對(duì)齊>

          14.Snap To<對(duì)齊到>

          <1> Guides<參考線>

          <2> Grid<網(wǎng)格>

          <3> Slices<切片>

          <4> Document Bounds<文檔辪界>

          <5> All<全部>

          <6> None<無(wú)>15.Show Guides<鎖定參考線>

          16.Clear Guides<清除參考線>

          17.New Guides<新參考線>

          18.Lock Slices<鎖定切片>

          19.Clear Slices<清除切片>

          八、Windows<窗口>

          1.Cascade<層疊>

          2.Tile<拼貼>

          3.Arrange Icons<排列圖標(biāo)>

          4.Close All<關(guān)閉全部>

          5.Show/Hide Tools<顯示/隱藏工具>

          6.Show/Hide Options<顯示/隱藏選頃>

          7.Show/Hide Navigator<顯示/隱藏導(dǎo)航>

          8.Show/Hide Info<顯示/隱藏信息>

          9.Show/Hide Color<顯示/隱藏顏色>

          10.Show/Hide Swatches<顯示/隱藏色板>

          11.Show/Hide Styles<顯示/隱藏樣弅>

          12.Show/Hide History<顯示/隱藏歷史記弽>

          13.Show/Hide Actions<顯示/隱藏勱作>

          14.Show/Hide Layers<顯示/隱藏圖層>

          15.Show/Hide Channels<顯示/隱藏通道>16.Show/Hide Paths<顯示/隱藏路徑>

          17.Show/Hide Character<顯示/隱藏字符>

          18.Show/Hide Paragraph<顯示/隱藏段落>

          19.Show/Hide Status Bar<顯示/隱藏狀態(tài)欄>

          20.Reset Palette Locations<復(fù)位調(diào)板位置>


          主站蜘蛛池模板: 亚洲AV日韩AV天堂一区二区三区| 中文字幕无码免费久久9一区9| 成人国产一区二区三区| 久久久久人妻精品一区三寸蜜桃 | 波多野结衣电影区一区二区三区 | 精品无人区一区二区三区| 国产免费一区二区三区免费视频| 怡红院美国分院一区二区| 麻豆一区二区三区蜜桃免费| 久久婷婷久久一区二区三区| 精品国产亚洲一区二区三区在线观看 | 麻豆视传媒一区二区三区| 2020天堂中文字幕一区在线观 | 亚洲av综合av一区| 日韩美一区二区三区| 亚洲一区综合在线播放| 国产精品污WWW一区二区三区 | 狠狠做深爱婷婷综合一区 | 免费一区二区三区| 国产色情一区二区三区在线播放| 波多野结衣中文字幕一区二区三区| 一区二区三区福利视频| 无码国产精品久久一区免费| 中文字幕视频一区| 日韩精品一区二区三区中文| 日韩精品无码一区二区三区四区| 日韩一区二区三区精品| 成人精品一区久久久久| 另类国产精品一区二区| 亚洲中文字幕乱码一区| 日韩一区二区三区四区不卡| 3d动漫精品啪啪一区二区免费| 亚洲av一综合av一区| 国产激情з∠视频一区二区| 国模少妇一区二区三区| 精品一区二区在线观看| 久久99热狠狠色精品一区| 熟女大屁股白浆一区二区| 亚洲色精品aⅴ一区区三区| 国产在线精品一区二区三区直播| 上原亚衣一区二区在线观看|