者| 蔣衛(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 引擎從早期的 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)用案例。
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
以業(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è)方面:
? 內(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 方案。
兩種實(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)
w3c 標(biāo)準(zhǔn)完善
擴(kuò)展能力,擴(kuò)展一些非標(biāo)接口支持 Sketch 渲染
底層圖形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)核升級(jí)優(yōu)化的過(guò)程中,也有很多同學(xué)積極參與其中來(lái)在此表示感謝。
增加了 API 的自動(dòng)化測(cè)試以及 CI 建立保障穩(wěn)定性。
作者:蔣衛(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)]有之一了。
話不多說(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):
其實(shí)擴(kuò)展一個(gè)類還是非常簡(jiǎn)單的,你只需要知道這個(gè)類會(huì)有哪些獨(dú)特的自有屬性,并搞定 _render() 方法即可。
因?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)然只是我覺得),比如:
// 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)板位置>
*請(qǐng)認(rèn)真填寫需求信息,我們會(huì)在24小時(shí)內(nèi)與您取得聯(lián)系。