2010年7月6日星期二

與 FMIS、FMLE 有關的資源

記錄幾個與 Flash Media Interactive Server 錄影技術相關的連結

[自動化控制 Flash Media Live Encoder]

How to pragrammatically control Flash Encod
http://forums.adobe.com/thread/27425

How to Programmatically Control Adobe Flash Media Encoder
http://flex.sys-con.com/node/388456

Start Flash Media Live Encoder in command-line mode
http://help.adobe.com/en_US/FlashMediaLiveEncoder/3.0/Using/WS5b3ccc516d4fbf351e63e3d11c104babd5-7ffc.html

[讓 FMIS 支援 Digital Video Recorder]

Create server-side DVR application to be able to record DVR in FMS
http://stackoverflow.com/questions/805897/create-server-side-dvr-application-to-be-able-to-record-dvr-in-fms

2010年7月2日星期五

既有的 FLA 專案改成動態載入畫面元素

如果有一天,上面說,希望將現有的 Flash 介面,換掉部分元素後,賣給其他客戶。

這裡指的 "換掉部分元素",是在不變更設計、或不影響原程式座標邏輯之下,改變顏色、風格的需求。

作法一,將整份 FLA 複製一份,改完 UI 設計,輸出!
優:最快
缺:每份 FLA 都有程式邏輯,每次異動,都要重新發佈所有 FLA

作法二,調整一些程式,動態載入要更換的元素,放在與原設計相同的座標、縮放、旋轉角度、層級中。
優:邏輯只有一份,不同的 UI 可被動態載入
缺:有一堆苦工要作,可大可小

這裡不討論 Flex / MXML 的作法,畢竟木已成舟,誰叫我們以前都喜歡用 FLA 呢!

以下,我說明 作法二 我會怎麼作:

1.
假設 FLA 中的視覺如下,畫面中有 logo、bg、與其他一堆東西:



logo 是右上角的圓圈
bg 是整個畫面的框架
其他東西 就是那些各方框中的圓形按鈕



輸出畫面就不用看了,就跟上面的設計畫面一樣~
接下來,就是要儘量調整最少的程式,來作到將 logo、bg 由外部載入!

2.
將希望由外部載入的元素,變成 Class,如果原本就已經是 Class 也沒關係,譬如以下我將 logo 與 bg 連結到 CustResLogo 與 CustResBG 兩個 Class 上:



CustResLogo.as


package
{
import flash.display.MovieClip;

public class CustResLogo extends MovieClip
{
public function CustResLogo()
{
CustomizeResourceController.getInstance().registerView("CustResLogo", onResLoaded);
}

private function onResLoaded(Cls:Class):void{
//clear
while(numChildren>0)
removeChildAt(0);
graphics.clear();

//create
var mc:MovieClip = new Cls() as MovieClip;
addChild(mc);
}

}
}


CustResBG.as

package
{
import flash.display.MovieClip;

public class CustResBG extends MovieClip
{
public function CustResBG()
{
CustomizeResourceController.getInstance().registerView("CustResBG", onResLoaded);
}

private function onResLoaded(Cls:Class):void{
//clear
while(numChildren>0)
removeChildAt(0);
graphics.clear();

//create
var mc:MovieClip = new Cls() as MovieClip;
addChild(mc);
}

}
}


這兩個 Class 大同小異,都是向 CustomizeResourceController 註冊自己,目的是要取得外部資源 (*.swf) 中,名叫 "CustResLogo" 的 Class Name 的 Class,當取得之後(onResLoaded()被呼叫),就利用該 Class 重新建立視覺。

3.
新建 CustomizeResourceController 類別,這個類別負責載入外部 swf,並通知所有向自己註冊的 MovieClip 作更新畫面的工作:

CustomizeResourceController.as

package
{
import flash.events.ErrorEvent;
import flash.events.Event;
import flash.events.EventDispatcher;
import flash.events.IOErrorEvent;
import flash.events.SecurityErrorEvent;
import flash.system.ApplicationDomain;

public class CustomizeResourceController extends EventDispatcher
{
static private var _instance:CustomizeResourceController;
static public function getInstance():CustomizeResourceController{
if(_instance==null)
_instance = new CustomizeResourceController;
return _instance;
}

private var _isLoaded:Boolean = false;
private var _clsLdr:ClassLoader = new ClassLoader;

public function CustomizeResourceController()
{
if(_instance!=null)
throw new Error("plz use getInstance()");
_instance = this;
}

public function load(uri:String):void{
if(_isLoaded)
throw new Error("loaded"); //只 load 一次

_clsLdr.addEventListener(ClassLoader.CLASS_LOADED, onResLoaded, false, 0, true);
_clsLdr.addEventListener(IOErrorEvent.IO_ERROR, onError, false, 0, true);
_clsLdr.addEventListener(SecurityErrorEvent.SECURITY_ERROR, onError, false, 0, true);
_clsLdr.load(uri, new ApplicationDomain());
}

private function onResLoaded(e:Event):void{
_isLoaded = true;

notifyViews();

this.dispatchEvent(new Event(Event.COMPLETE));
}

private function onError(e:ErrorEvent):void{
//動作結束
this.dispatchEvent(new Event(Event.COMPLETE));
}

private var _views:Array = new Array();
public function registerView(className:String, callback:Function):void{
_views.push({className: className
, callback: callback});

if(_isLoaded)
notifyView(className, callback);
}

private function notifyViews():void{
for(var i:int=0; i<_views.length; i++){
notifyView(_views[i]["className"], _views[i]["callback"]);
}
}

private function notifyView(className:String, callback:Function):void{
var Cls:Class = _clsLdr.getClass(className);
if(callback!=null && Cls!=null)
callback(Cls);
}

}
}


4.
ClassLoader 類別,我就不轉貼了,請自己去任一版 AS3 Help 中取來用:
http://help.adobe.com/zh_TW/AS3LCR/Flash_10.0/flash/system/ApplicationDomain.html

只要注意 ApplicationDomain 的部分,因為我的範例中,放在外部 swf 中的類別名稱直接與主程式 swf 中一樣,所以我會將 ApplicationDomain 拉出來變成可以自己設定。

ClassLoader.as 部分程式碼:

public function load(lib:String, applicationDomain:ApplicationDomain=null):void {
trace(this, "load()", lib);

if(applicationDomain==null)
applicationDomain = ApplicationDomain.currentDomain;

swfLib = lib;
request = new URLRequest(swfLib);
var context:LoaderContext = new LoaderContext();
context.applicationDomain = applicationDomain;
loader.load(request,context);
}


5.
在 Document Class 中,執行載入外部 swf 的工作,這裡我的範例是載入 resource.swf:

Main.as

package{
import flash.display.MovieClip;
import flash.events.Event;

public class Main extends MovieClip{

private const customizeResourceUri:String = "resource.swf";

public function Main(){
loadCustomizeResource();
}

private function loadCustomizeResource():void{
if(customizeResourceUri != ""){
CustomizeResourceController.getInstance().addEventListener(Event.COMPLETE, onCustomizeResourceControllerLoaded);
CustomizeResourceController.getInstance().load(customizeResourceUri);
}else{
nextAction();
}
}
private function onCustomizeResourceControllerLoaded(e:Event):void{
CustomizeResourceController.getInstance().removeEventListener(Event.COMPLETE, onCustomizeResourceControllerLoaded);

nextAction();
}

private function nextAction():void{
trace("done!!");
}
}
}


6.
最後,當然就是要製作 resource.swf 囉,只要將 main.fla 中,剛剛有設定要動態置換的 logo 與 bg 從 library 中複製到 resource.fla 中,發佈即可。

這裡要注意的是在 library 中這些元素,都是在第一影格就匯出類別,而類別名稱可以任意決定,或像我一樣用與 main.fla 中相同的類別名稱。



7.
測試,再次輸出 main.swf 執行畫面如下:



可以看到 bg 框架與 logo 都已經置換,而其他元素(那堆綠色圓形按鈕)則維持原樣。

因為是動態載入 resource.swf,然後從中取得指定的 Class Name 實體化,來改變既有的視覺 UI,所以 loading 的機制是不可少的,不然就會被網友看到畫面的改變,loading 機制在原本的專案中應已含括,這裡就不 demo 了。

2010年6月18日星期五

Adobe為雜誌媒體推出數位瀏覽器技術

藉由 Adobe 數位出版科技,"WIRED"雜誌推出革命性電子書應用程式


[2010618日,台北訊] 全球軟體大廠奧多比推出新的數位瀏覽器技術,可使平面出版業者讓雜誌以豐富的數位內容生動呈現。此新版軟體是由出版商康泰納仕(Condé Nast’s)旗下的"Wired"雜誌投入開發,運用新的數位瀏覽器技術為Apple iPad首次發行數位雜誌。連線雜誌六月號電子書應用程式已可經由Apple iTunes App Store購買,全雜誌使用奧多比數位瀏覽器軟體製作。


奧多比創意解決方案副總裁兼總經理David Burkett表示:「奧多比和"Wired"雜誌聯手替數位出版建立新的商業模式,為讀者創造引人入勝的閱讀體驗,將能使出版業在數位出版領域突顯其獨特的內容與廣告。我們的目標在於盡快使數位瀏覽器軟體提供讓所有出版業者使用,並將具吸引力的數位內容傳遞於各式平台上。若你已經是使用InDesign CS5製作出版內容,更具保障的是,你已是朝著正確的方向創造出色的數位內容。」


有了具高度參與與互動性功能及全新導航模擬,"Wired"雜誌電子書展現了奧多比新數位瀏覽器技術的優異性能,讓讀者體驗各式影片內容、幻燈片、360度立體影像和直式橫式自動翻轉模式。由獲獎肯定的出版小組設計,"Wired"雜誌電子書更進一步善用面板優勢,讓讀者以觸控方式閱讀雜誌,其中包含使用縮小瀏覽模式可讓內容更容易一次盡收眼底。有了具動態互動的數位媒體,讀者更能體驗平面雜誌所欲忠實呈現的設計內容。


「新數位瀏覽器技術的發佈對亞太地區出版業來說極其重要,尤其是當出版業者此刻正積極尋找新的商業模式、新的市場及新的機會來幫助他們將品牌擴展於網路世界,以期吸引更多忠實且敏銳度高的新讀者。」奧多比亞太區資深行銷總監 Mark Phibbs表示:「亞太區是全球雜誌出版成長最快速的區塊,無庸置疑,在面對隨時掌握科技潮流的線上讀者時,這群適應力強且具創業家精神的亞太區出版業者在採用新裝置及具市場導向的新商業模式之意願上也領先全球。透過該創新技術,奧多比將能持續領先於出版技術領域,並能傳達如何利用創意與資訊與世界溝通的使命。」


奧多比亞太區創意解決方案產品專家Michael Stoddart總結:「我們正與亞太地區當地的傳播媒體及地方出版夥伴合作。透過此科技,我們正迅速建立並執行新工作流程,為我們的出版客戶創造高投資報酬率。


此外,瀏覽器科技更為廣告豎立新典範。連線雜誌電子書主要合作夥伴已開始使用新互動功能來傳遞具高度感染力的品牌廣告。在讀者閱讀雜誌的同時嵌入互動性內容,讓廣告能使讀者與品牌互動。採用新式數位雜誌媒體,出版業者將有機會擴展廣告量並用新的方式觸及讀者,增加發行量並獲取數位出版收益。


「我們與奧多比的合作讓我們能再次想像並重塑印刷刊物,並已在iPad上獲得很棒的數位雜誌體驗」 康泰納仕(Condé Nast’s)主編Thomas J. Wallace表示:「連線雜誌對奧多比技術理想的實踐方式是將新媒體的影響力擴展到所有康德納斯旗下的雜誌。我們和奧多比的合作關係才剛開始,我們期待在接下來的幾個月能持續利用此技術發行更多的電子刊物。


透過Adobe InDesign CS5和其他奧多比的出版技術,"Wired"雜誌瀏覽器展示了如何讓雜誌和出版物透過面板、智慧型手機和其他裝置傳遞具突破性的閱讀體驗。近期,奧多比還計畫將於Adobe Labs平台上提供軟體,幫助出版業者將InDesign CS5排版設計轉化為有如連線雜誌閱覽器般引人入勝的應用程式。有了數位雜誌解決方案與Adobe Creative Suite® 5的緊密結合,出版業者預期將可利用現有的工作流程與設計力達到綜效。


連線雜誌瀏覽器現可從Apple iTunes App Store下載,費用為US$4.99


Adobe 針對雜誌、電子書及新聞等數位出版平台之更多資訊,請造訪 :

www.adobe.com/go/digitalpublishing

預覽iPad上的有線雜誌電子書影片,請造訪 : http://tv.adobe.com/watch/xd-inspire/introducing-wired-on-ipad

奧多比公司簡介

奧多比提供革命性技術,讓人們隨時隨地都能透過任何媒體,完美的利用創意、資訊與世界溝通。欲查詢更多詳細資料,請至奧多比公司主網站:www.adobe.com 或台灣分公司網站:www.adobe.com/tw

2010年6月7日星期一

透過 FluorineFx 使用 Flex Remoting 與 .NET 溝通

今天研究了一下透過 FluorineFx 讓 Flex 與 .NET 溝通,並找出最基本需要佈署的 FluorineFx 檔案有哪些,以下是簡單的步驟記錄:

1.
下載 FluorineFx v1.0.0.15
http://www.fluorinefx.com/download.html

2.
安裝後,可以在 VS.NET 2005 中,使用相關的專案,
不過,下面要敘述的是,如何複製必要的檔案,就可以在既有的網站中,使用 Flex Remoting

3.
對於提供 service 的 dll 的部分:

3.1.
先在 Class Library 的專案中,加入 FluorineFx.dll 的參考,

3.2.
Class1.cs 原始檔:


using System;
using System.Collections.Generic;
using System.Text;
using FluorineFx;

namespace ServiceClsLib
{
[RemotingService]
public class Class1
{
public string hello(string who)
{
return "hello, " + who;
}

}
}


4.
網站專案的部分:

4.1.
加入以下參考:
* FluorineFx.dll
* FluorineFx.ServiceBrowser.dll
* 步驟三的 dll

4.2.
web.config 中加入 Fluorine 的 httpModule

<system.web>
<httpModules>
<add name="FluorineGateway" type="FluorineFx.FluorineGateway, FluorineFx"/>
</httpModules>
</system.web>


4.3.
放一個 Gateway.aspx,可以不加任何程式,但是一定要放,
想必是,主要工作還是由 httpModule 來處理,但是若沒有這個 gateway.aspx 的話,會因 404 錯誤而中斷,

4.4.
放一個 Console.aspx,負責導向至 Fluorine.aspx,
若你想直接連 Fluorine.aspx,也 OK,

5.
Flex client 的部分:

5.1.
準備 services-config.xml

<?xml version="1.0" encoding="utf-8" ?>
<services-config>
<services>
<service-include file-path="remoting-config.xml" />
</services>
<channels>
<channel-definition id="my-amf" class="mx.messaging.channels.AMFChannel">
<endpoint uri="http://localhost:3000/Gateway.aspx" class="flex.messaging.endpoints.AMFEndpoint"/>
</channel-definition>
</channels>
</services-config>


5.2.
準備 remoting-config.xml

<?xml version="1.0" encoding="UTF-8"?>
<service id="remoting-service" class="flex.messaging.services.RemotingService" messageTypes="flex.messaging.messages.RemotingMessage">
<adapters>
<adapter-definition id="dotnet" class="FluorineFx.Remoting.RemotingAdapter" default="true"/>
</adapters>

<default-channels>
<channel ref="my-amf"/>
</default-channels>

<destination id="fluorine">
<properties>
<source>*</source>
</properties>
</destination>
</service>


5.3.
測試程式

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical" horizontalCenter="true">

<mx:Script>
<![CDATA[
import mx.events.CloseEvent;
import flash.net.registerClassAlias;
import mx.rpc.AsyncToken;
import mx.controls.Alert;
import mx.rpc.events.FaultEvent;
import mx.rpc.events.ResultEvent;
import mx.rpc.remoting.RemoteObject;

//======================================================================

private function onFault(e:FaultEvent):void{
Alert.show(e.fault.faultString, "Error");
}

//======================================================================

private function onBtnInvoke_hello_click():void{
var remObj:RemoteObject = new RemoteObject("fluorine");
remObj.source = "ServiceClsLib.Class1";
remObj.addEventListener("fault", onFault);
remObj.hello.addEventListener("result", onHello_result);
remObj.hello("Ben Chang");
}

private function onHello_result(e:ResultEvent):void{
var result:String = e.result as String;

Alert.show(result);
}

]]>
</mx:Script>

<mx:Button label="Invoke ServiceClsLib.Class1 -> hello()" click="onBtnInvoke_hello_click()"/>

</mx:Application>




測試結果:

2010年6月4日星期五

當然,Flex Remoting 是 Call by Value

最近測試 WebORB,發現一個問題,若是 .NET 程式中,A.dll 中的 PackageA.ClassA,提供了 getB() 的 method,但是回傳物件是屬於 B.dll 中的 PackageB.ClassB 的話,當 invoke getB() 時便會發生 gateway 解析不出自定類別物件 ClassB 的情況。



只能先猜,他無法跨 dll 找類別,畢竟每次呼叫 沒有必要的話 應該不會將 bin 下的所有 *.dll 都巡一遍。



所以,只要將 PackageA.ClassA 與 PackageB.ClassB 放在同一個 *.dll 中,執行就會正常了:







接著,進入主題,根據 codegen 出來的 AS3 程式碼:ClassLibraryFactory.getObj() 取得的 ClassLibrary,是一個不帶 method() 的 ValueObject:



雖然在 .NET 的 ClassLibrary 類別中,有 getMessage() 的 method:


然而在 AS3 ValueObject 中,只帶有 public member data,不會有任何 method;這個 VO 會被用來傳遞給 Flash 端,不會是將 Server 端、記憶體中的 ClassLibrary 物件參考,傳給 Flash,因此當然 Flash 也無法利用拿到的物件 作任何遠端呼叫。




另一個 ClassLibraryLib.ClassLibrary 透過 codegen 產出的 AS3 code,則是提供給 Flash 端進行 RPC call 的 proxy,所以裡面沒有 public member data,只有 public method:





基於這些基本關係,如何設計 Flex Remoting 的 service interface 就變得需要花點腦筋。




其他有些參考資源:

Mapping Server Side Classes to Flex via Flex AP
http://support.themidnightcoders.com/knowledgebase.php?act=art&article_id=87

ActionScript and .NET client-server class mappings
http://www.adobe.com/devnet/flex/articles/class_mappings.html

.NET Attributes in WebORB 2.1
http://www.themidnightcoders.com/blog/2006/05/net-attributes-in-weborb-21.html

如果要作 call by reference 的話,或是某種程度上來達到相似的意義的話,可能要再繼續研究一下 WebORB 如何將 .NET 的 Class 放在 Session 中。

透過 WebORB 使用 Flex Remoting 與 .NET 溝通

今天研究了一下透過 WebORB 讓 Flex 與 .NET 溝通,並找出最基本需要佈署的 WebORB 檔案有哪些,以下是簡單的步驟記錄:

1.
下載 WebORB,安裝在 IIS 中,重點在於接下來要從安裝的目錄中,複製哪些檔案到自己的網站專案中。

2.
複製以下資料夾與檔案
/bin/*.dll
/console/*.*
/WEB-INF/flex/*.xml
/weborbassets/*.*

diagnostics.aspx
weborb.config
weborbconsole.html

有些檔案是為了 console 管理介面用的

3.
複製 web.config 的部分內容


<configuration>
<system.web>
<httpHandlers>
<add verb="*" path="weborb.aspx" type="Weborb.ORBHttpHandler"/>
<add verb="*" path="codegen.aspx" type="Weborb.Management.CodeGen.CodegeneratorHttpHandler"/>
</httpHandlers>
</system.web>
</configuration>


4.
瀏覽 http://localhost:3000/weborb.aspx 應會自動導到 http://localhost:3000/weborbconsole.html,在此管理介面可佈署 *.dll,也可將想佈署的 *.dll 自己放到網站 bin 資料夾即可。

這裡的 port 是依照自己使用 VS.Net Express 設定的 Developer WebServer 決定,若使用 IIS 亦可使用 80 或其他 port。

5.
網站專案中,任意開發一個 class,譬如:

MyClass.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace RemoteClassLib
{
public class MyClass
{
public String greeting(String who){
return "hello, " + who;
}
}
}


編譯後,應會在 bin 中,出現 RemoteClassLib.dll,若在 WebORB 管理介面中,也會看到這個套件已經被佈署,並可測試 MyClass 的 greeting()。

6.
開發 Flex 的部分之前,先準備幾個 xml 檔,描述 Flex Remoting 的位置,晚點要給 Flex 編譯時包進去

services-config.xml

<?xml version="1.0" encoding="UTF-8"?>
<services-config>

<services>
<service-include file-path="remoting-config.xml" />
</services>

<channels>
<channel-definition id="my-amf" class="mx.messaging.channels.AMFChannel">
<endpoint uri="http://localhost:3000/weborb.aspx" class="flex.messaging.endpoints.AMFEndpoint"/>
<properties>
<polling-enabled>false</polling-enabled>
</properties>
</channel-definition>
</channels>
</services-config>


remoting-config.xml

<?xml version="1.0" encoding="UTF-8"?>
<service id="remoting-service"
class="Weborb.V3Types.Core.RemotingHandler"
messageTypes="flex.messaging.messages.RemotingMessage">

<adapters />

<default-channels>
<channel ref="my-amf"/>
</default-channels>


<destination id="GenericDestination">
<properties>
<source>*</source>
</properties>
</destination>
</service>


7.
開發 Flex 程式,看你喜歡用 mx.rpc.remoting.mxml.RemoteObject 或 mx.rpc.remoting.RemoteObject 來連接都可以:

WebORBSimpleTestClient.mxml

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" minWidth="955" minHeight="600">
<mx:Script>
<![CDATA[
import RemoteClassLib.MyClass;

import mx.controls.Alert;
import mx.rpc.AsyncToken;
import mx.rpc.events.FaultEvent;
import mx.rpc.events.ResultEvent;
import mx.rpc.remoting.RemoteObject;

private function greetingHandler(event:ResultEvent):void
{

var returnValue:String = event.result as String;

Alert.show(returnValue);
}

private function onFault (event:FaultEvent):void
{
Alert.show(event.fault.faultString, "Error");
}
]]>
</mx:Script>
<mx:creationComplete>
<![CDATA[
var remoteObject:RemoteObject = new RemoteObject("GenericDestination");
remoteObject.source = "RemoteClassLib.MyClass";

remoteObject.greeting.addEventListener("result",greetingHandler);

remoteObject.addEventListener("fault", onFault);

var asyncToken:AsyncToken = remoteObject.greeting("Ben Chang");
]]>
</mx:creationComplete>
</mx:Application>


8.
測試,運氣好的話,就可以看到 Alert 出 "Hello, Ben Chang" 的畫面。

2010年6月3日星期四

Adobe 宣布為 Dreamweaver CS5 推出 HTML5 擴充套件

2010 6 3 ,台北訊】球軟體大廠奧多比於甫結束的 Google I/O 開發者大會中正式宣布,將為全球網頁設計及開發人員,推出一項HTML5最新解決方案 Adobe HTML5 Pack。這項擴充套件是專為業界領導網頁設計及 HTML編輯工具Adobe Dreamweaver CS5所開發,將能為Adobe Creative Suite 5用戶提供更為豐富的創意選項 讓他們可以針對最多樣化的裝置,輕鬆製作及傳遞一致且最具吸引力的內容,帶來最高的商業收益成效。

HTML5 Pack 擴充套件的推出,是來自於Adobe MAX 2009 大會舉辦時客戶的正面回應,當時奧多比首度對外界預先展示這項技術,之後最近在奧多比的Design and Web部落格也發佈後續消息,說明新增加的 HTML5CSS3研發投入,更引發廣泛熱烈討論。為了回應網頁新標準的需求,奧多比決定加速為Dreamweaver CS5推出HTML5 Pack 擴充套件,並且提供免費下載。下載網址為:http://labs.adobe.com/downloads/html5pack.html

「奧多比很榮幸能夠推出這項業界標準創意工具,並且相容於多樣最受歡迎的網頁程式語言、格式、API及函式庫。」奧多比創意解決方案資深副總監Lea Hickman表示:「我們將持續支援最先進的HTML標準開發工作,讓客戶能夠運用最新的HTML效能,提供創意內容。」

Dreamweaver優異效能之一就是絕佳的擴充性,因此我們非常高興看到奧多比迅速提供HTML5CSS3支援。這兩項標準,已經廣泛得到眾多瀏覽器的支援。」 Foundation PHP創辦者暨開發人員 David Powers 表示:「透過擴充套件加入支援的方式,將比更動核心程式的作業更具優勢。在規格及瀏覽器的演進潮流中,Dreamweaver 果然能夠跟隨開發趨勢取得重大進展。」

HTML5 Pack 擴充套件中包含了嶄新的HTML5 CSS3 程式碼提示(code hinting)功能,讓 Dreamweaver 用戶能夠輕鬆運用各式最新的HTML5 標籤。擴充套件也同時包含了WebKit引擎更新,以及改善 Dreamweaver CS5 Live View的影像與音訊支援。透過新的CSS3 功能,用戶將能更加輕鬆設計出多重螢幕網頁,並且預覽這些網頁如何在各種瀏覽器及裝置上運算執行。此外,HTML5 Pack 也為 Dreamweaver CS5 的「開啟新檔案(New Document)」對話盒,加入了HTML5 起始版面功能,可以讓用戶設計及開發最新一代網頁標準的工作變得更為簡單快速。

「對於包括台灣在內的大中華區創新應用程式及RIA豐富網際網路應用程式)開發人員來說,HTML5 Pack 擴充套件將能為他們帶來更多機會,讓他們得以選擇合乎需求的工具執行開發工作。」奧多比大中華區總經理黃耀輝表示:「展望未來,我相信將會在大中華區看到更多運用Dreamweaver CS5所所設計的高吸引力及先進網站與網頁應用程式。」

關於Dreamweaver CS5

屢獲大獎的Adobe Dreamweaver CS5,是奧多比所推出的最新一代網頁設計及建置編譯軟體,能為PHP程式開發者提供多項強大工具,並且支援多樣最受歡迎的PHP式內容管理系統,例如 DrupalJoomlaWordPressDreamweaver CS5同時還提供了一項嶄新強大的CSS檢查工具,能在Live View即時檢閱時,協助設計人員預視複雜的樣式關連,執行更有效率的編輯工作。內建支援Adobe BrowserLab 也是Dreamweaver CS5 的另一項新功能,可以讓不同瀏覽器及作業系統的網頁設計測試工作,變得更為簡單快速。

價格、上市時間及系統需求

Dreamweaver CS5 HTML5 Pack擴充套件提供Mac OS XWindows版本,用戶可以透過Adobe Labs免費下載:

http://labs.adobe.com/downloads/html5pack.html.

Dreamweaver CS5 由奧多比授權經銷商供貨,現有 Macromedia Dreamweaver 8GoLiveAdobe Dreamweaver CS3CS4客戶,可以採購升級版本。Dreamweaver CS5同時也整合於Adobe Master Collection CS5Adobe Design Premium CS5Adobe Web Premium CS5套裝產品中。

奧多比公司簡介

奧多比提供革命性技術,讓人們隨時隨地都能透過任何媒體,完美的利用創意、資訊與世界溝通。欲查詢更多詳細資料,請至奧多比公司主網站:www.adobe.com 或台灣分公司網站:www.adobe.com/tw

由頤德國際(Veda International Corp.) 代表奧多比公司(Adobe Systems) 發稿

2010年5月5日星期三

製作動態載入 Theme,Part 2

上一篇介紹,以 Flash IDE 製作的 swf,被當作 Flex 的素材,以 css 的方式定義,並將 css 轉成 swf 讓 Flex 應用程式動態載入,程式可透過 css 取得 Class,動態建立視覺物件。
http://blog.ben.idv.tw/2010/05/flex-flash-theme.html

這篇,少掉 Flex 的架構 (雖然我是用 Flex Builder 的 ActionScript 專案在開發),以 Flash IDE 製作的 swf 直接被當作動態載入的 Theme 資源,載入後直接由其中取出 Class,動態建立視覺物件。

首先,同樣先準備三個 FLA,結構必須相同,意思是 instance name 必須相同:







第二步驟,準備開發主程式,檔案架構如下圖所示:



與上一篇最大的不同,就在於這次因為沒有定義 css,所以不是採用 css 的方式來載入外部 Theme 資源,而是使用自定的 ThemeLoader 來載入,載入完成後的其它步驟就與上一篇相同。

ThemeDemo.as


package {
import flash.display.Sprite;
import flash.events.Event;

import ui.proxy.MC1Proxy;

import util.ThemeLoader;

[SWF(width="640", height="480")]
public class ThemeDemo extends Sprite
{
static public const Theme1Url:String = "asset/asset1.swf";
static public const Theme2Url:String = "asset/asset2.swf";
static public const Theme3Url:String = "asset/asset3.swf";

private var _mc1:Sprite;
private var _mc1proxy:MC1Proxy;

public function ThemeDemo()
{
ThemeLoader.getInstance().addEventListener(Event.CHANGE, onThemeLoader_change);

ThemeLoader.getInstance().load(ThemeDemo.Theme1Url);
}

private function onThemeLoader_change(e:Event):void{
if(_mc1!=null && _mc1.parent!=null)
_mc1.parent.removeChild(_mc1);

var Cls:Class = ThemeLoader.getInstance().getClass("ui.MC1");
if(Cls!=null){
_mc1 = new Cls() as Sprite;
this.addChild(_mc1);
}

if(_mc1proxy==null)
_mc1proxy = new MC1Proxy(_mc1);
else
_mc1proxy.updateView(_mc1);
}
}
}


MC1Proxy.as

package ui.proxy
{
import flash.display.SimpleButton;
import flash.display.Sprite;
import flash.events.MouseEvent;

import util.ThemeLoader;

public class MC1Proxy extends FlashUIComponentProxy
{
//child
private var _b1:SimpleButton;
private var _b2:SimpleButton;
private var _b3:SimpleButton;
private var _mcInner:Sprite;

//child proxy
private var _mcInnerProxy:MCInnerProxy;

public function MC1Proxy(view:Sprite)
{
super(view);
}

override protected function makeLink():void{
//child
_b1 = view.getChildByName("b1") as SimpleButton;
_b2 = view.getChildByName("b2") as SimpleButton;
_b3 = view.getChildByName("b3") as SimpleButton;
_mcInner = view.getChildByName("mcInner") as Sprite;

//child proxy;
if(_mcInnerProxy==null)
_mcInnerProxy = this.setChildProxy(_mcInner, MCInnerProxy) as MCInnerProxy;
else
_mcInnerProxy.updateView(_mcInner);

//child's event handler
_b1.addEventListener(MouseEvent.CLICK, onB1_click, false, 0, true);
_b2.addEventListener(MouseEvent.CLICK, onB2_click, false, 0, true);
_b3.addEventListener(MouseEvent.CLICK, onB3_click, false, 0, true);
}

private function onB1_click(e:MouseEvent):void{
_mcInnerProxy.msg = "click 1";
ThemeLoader.getInstance().load(ThemeDemo.Theme1Url);
}

private function onB2_click(e:MouseEvent):void{
_mcInnerProxy.msg = "click 2";
ThemeLoader.getInstance().load(ThemeDemo.Theme2Url);
}

private function onB3_click(e:MouseEvent):void{
_mcInnerProxy.msg = "click 3";
ThemeLoader.getInstance().load(ThemeDemo.Theme3Url);
}

}
}


MCInnerProxy.as

package ui.proxy
{
import flash.display.Sprite;
import flash.text.TextField;

public class MCInnerProxy extends FlashUIComponentProxy
{
//child
private var _txt:TextField;

//getter / setter
private var _msg:String = "";
public function get msg():String{return _msg;}
public function set msg(value:String):void{
if(_msg==value)
return;
_msg = value;
this.invalidateDisplayList();
}

public function MCInnerProxy(view:Sprite)
{
super(view);
}

override protected function makeLink():void{
//child
_txt = view.getChildByName("txt") as TextField;
}

override protected function updateDisplayList():void{
_txt.text = msg;
}

}
}


ThemeLoader.as

package util
{
import flash.events.Event;
import flash.events.EventDispatcher;

[Event(name="change", type="flash.events.Event")]
public class ThemeLoader extends EventDispatcher
{
static private var _instance:ThemeLoader;
static public function getInstance():ThemeLoader{
if(_instance==null)
_instance = new ThemeLoader;
return _instance;
}

private var _loader:ClassLoader = new ClassLoader();

public function load(url:String):void{
_loader.addEventListener(ClassLoader.CLASS_LOADED, onLoaded);
_loader.load(url);
}

private function onLoaded(e:Event):void{
this.dispatchEvent(new Event(Event.CHANGE));
}

public function getClass(className:String):Class{
if(_loader==null)
return null;
return _loader.getClass(className);
}
}
}


Demo

2010年5月4日星期二

於 Flex 使用 Flash 素材,與製作動態載入 Theme

最近工作上,花了很多時間在處理 Flash 與 Flex 之間的合作。

目標是,美術製作的 Flash 素材,Flex 可以直接使用,不用重新依照 Flash 的設計而在 Flex 中重新以 MXML 組合 layout;並且要能支援動態載入外部 *.swf 素材,達到切換 theme 的機制。

步驟一:準備數款 Flash 設計的檔案,並輸出 *.swf

/asset/asset1.fla -> /asset/asset1.swf


/asset/asset2.fla -> /asset/asset2.swf


/asset/asset3.fla -> /asset/asset3.swf


步驟二,將 Flash 素材,轉變成 Flex 素材

/css/asset1.css -> /css/asset1.swf


.MyBtns{
class: Embed(source="../asset/asset1.swf", symbol="ui.Btns");
}


/css/asset2.css -> /css/asset2.swf

.MyBtns{
class: Embed(source="../asset/asset2.swf", symbol="ui.Btns");
}


/css/asset3.css -> /css/asset3.swf

.MyBtns{
class: Embed(source="../asset/asset3.swf", symbol="ui.Btns");
}


步驟三,開一 MXML 專案

畫面中只放一個自訂 UIComponent : MyBtnsUIComponent

Theme.xml

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" xmlns:local="*">
<mx:creationComplete>
<![CDATA[
StyleManager.loadStyleDeclarations("Users/ben/Documents/Flex Builder 3/Theme/css/asset1.swf");
]]>
</mx:creationComplete>
<local:MyBtnsUIComponent />
</mx:Application>


這個 MyBtnsUIComponent 作的事情是,從 CSS 中,取得 ui.Btns 類別,建立視覺物件,放到畫面上;因為從 Flash 產生的物件是 Sprite 或 MovieClip,無法直接放到 Application 中,所以要放在自訂的 UIComponent 中。

MyBtnsUIComponent.as

package
{
import flash.display.Sprite;
import flash.events.Event;

import mx.core.UIComponent;
import mx.events.FlexEvent;

public class MyBtnsUIComponent extends UIComponent
{
private var Cls:Class;
private var _view:Sprite;
private var _viewProxy:MyBtnsProxy;

public function MyBtnsUIComponent()
{
super();

this.addEventListener(FlexEvent.INITIALIZE, onInitialize, false, 0, true);
}

private function onInitialize(e:Event):void{
this.removeEventListener(FlexEvent.INITIALIZE, onInitialize);

this.styleName = "MyBtns";
}

override public function styleChanged(styleProp:String):void{
Cls = this.getStyle("class") as Class;
if(Cls!=null)
createView();
}

private function createView():void{
if(_view!=null && _view.parent!=null)
_view.parent.removeChild(_view);

_view = new Cls as Sprite;
this.addChild(_view);

if(_viewProxy==null)
_viewProxy = new MyBtnsProxy(_view);
else
_viewProxy.updateView(_view);
}
}
}


另外,設計了一個 FlashUIComponentProxy 用來包裝所有來自 Flash 的 MovieClip / Sprite。

FlashUIComponentProxy.as

package
{
import flash.display.Sprite;
import flash.events.Event;

public class FlashUIComponentProxy
{
static private var _updateController:Sprite = new Sprite();
static private var _updateProxies:Array = [];
static private function invalidateDisplayList(proxy:FlashUIComponentProxy):void{
_updateProxies.push(proxy);

if(!_updateController.hasEventListener(Event.ENTER_FRAME))
_updateController.addEventListener(Event.ENTER_FRAME, onUpdateController_update, false, 0, true);
}
static private function onUpdateController_update(e:Event):void{
_updateController.removeEventListener(Event.ENTER_FRAME, onUpdateController_update);

var ary:Array = _updateProxies.splice(0, _updateProxies.length);
for(var i:int=0; i<ary.length; i++){
(ary[i] as FlashUIComponentProxy).updateDisplayList();
}
}

protected var view:Sprite;

public function FlashUIComponentProxy(view:Sprite)
{
updateView(view);
}

private var _childProxies:Object = new Object();
public function setChildProxy(view:Sprite, ProxyCls:Class):FlashUIComponentProxy{
if(_childProxies[view.name] == null)
_childProxies[view.name] = new ProxyCls(view);
else
(_childProxies[view.name] as FlashUIComponentProxy).updateView(view);

return _childProxies[view.name] as FlashUIComponentProxy;
}

public function updateView(view:Sprite):void{
this.view = view;

makeLink();

invalidateDisplayList();
}

protected function makeLink():void{
}

protected function invalidateDisplayList():void{
FlashUIComponentProxy.invalidateDisplayList(this);
}

protected function updateDisplayList():void{

}
}
}


以這個例子來說,我有一個 Sprite 中,放了三個按鈕、一個文字欄位、一個 Sprite,因為這一整組 Sprite 會有自己的邏輯,所以建立了一個 MyBtnsProxy 來包裝。

MyBtnsProxy.as

package
{
import flash.display.SimpleButton;
import flash.display.Sprite;
import flash.events.MouseEvent;
import flash.text.TextField;

import mx.styles.StyleManager;

public class MyBtnsProxy extends FlashUIComponentProxy
{
private var _b1:SimpleButton;
private var _b2:SimpleButton;
private var _b3:SimpleButton;

private var _txtData:TextField;

private var _mcInner:Sprite;
private var _mcInnerProxy:MyInnerProxy;



private var _myData:String = "";
public function get myData():String{return _myData;}
public function set myData(value:String):void{
if(_myData==value)
return;
_myData=value;
this.invalidateDisplayList();
}



public function MyBtnsProxy(view:Sprite)
{
super(view);
}

override protected function makeLink():void{
_b1 = view.getChildByName("b1") as SimpleButton;
_b2 = view.getChildByName("b2") as SimpleButton;
_b3 = view.getChildByName("b3") as SimpleButton;

_txtData = view.getChildByName("txtData") as TextField;

_mcInner = view.getChildByName("mcInner") as Sprite;
_mcInnerProxy = this.setChildProxy(_mcInner, MyInnerProxy) as MyInnerProxy;


_b1.addEventListener(MouseEvent.CLICK, on_b1_click, false, 0, true);
_b2.addEventListener(MouseEvent.CLICK, on_b2_click, false, 0, true);
_b3.addEventListener(MouseEvent.CLICK, on_b3_click, false, 0, true);
}

private function on_b1_click(e:MouseEvent):void{
myData = "on_b1_click";
_mcInnerProxy.myData = "inner 1";

StyleManager.loadStyleDeclarations("Users/ben/Documents/Flex Builder 3/Theme/css/asset1.swf");
}

private function on_b2_click(e:MouseEvent):void{
myData = "on_b2_click";
_mcInnerProxy.myData = "inner 2";

StyleManager.loadStyleDeclarations("Users/ben/Documents/Flex Builder 3/Theme/css/asset2.swf");
}

private function on_b3_click(e:MouseEvent):void{
myData = "on_b3_click";
_mcInnerProxy.myData = "inner 3";

StyleManager.loadStyleDeclarations("Users/ben/Documents/Flex Builder 3/Theme/css/asset3.swf");
}

override protected function updateDisplayList():void{
_txtData.text = myData;
}
}
}


在上述的 Sprite 中,又另外有一個叫作 mcInner 的 Sprite,內含一個文字欄位,所以這裡也建立了另一個 MyInnerProxy 來包裝這個 Sprite。

MyInnerProxy.as

package
{
import flash.display.Sprite;
import flash.text.TextField;

public class MyInnerProxy extends FlashUIComponentProxy
{
private var _myData:String = "";
public function get myData():String{return _myData;}
public function set myData(value:String):void{
if(_myData==value)
return;
_myData=value;
this.invalidateDisplayList();
}



private var _txtInner:TextField;

public function MyInnerProxy(view:Sprite)
{
super(view);
}

override protected function makeLink():void{
_txtInner = view.getChildByName("txtInner") as TextField;
}

override protected function updateDisplayList():void{
_txtInner.text = myData;
}

}
}


以上,是所有程式碼,執行畫面如下:

按下按鈕一,動態載入 asset1.swf


按下按鈕二,動態載入 asset2.swf


按下按鈕三,動態載入 asset3.swf


整套程式的目的在於,動態換掉視覺後,文字欄位、資料的部分仍要能保存下來;決定是否要建立一個 FlashUIComponentProxy 來包裝一個 Sprite 在於這個 Sprite 有多複雜。

2010年4月13日星期二

Adobe Creative Suite引領學子打造21世紀職場競爭力

全新版本整合課程、認證方案、學習資源及優惠價格,將能提供學校單位最為完整的教育解決方案

2010 4 13 日,台北訊】面對今日科技導向的職業生涯趨勢,為了協助中、小學及高等教育機構學子儲備豐沛的工作競爭能力,全球軟體大廠奧多比今日宣佈推出Adobe® Creative Suite® 5系列產品(請參考同步發表的新聞稿),並將同時提供多項相關教育支援計畫。奧多比預定推出的各項嶄新課程、認證計畫及學習資源,將能讓學生及教職員取得最佳的數位溝通與協同研究技巧,以為21世紀職場趨勢作好準備。全新的Creative Suite 5 學生及教師版本,將以極為平易近人的教育授權價格提供給教育機構,同時這將是奧多比首度以大幅優惠價格,為學生及教職員提供軟體家用解決方案。

「無論是任何職業領域,都要求能夠真實而具體的表達自我創意理念。此一傳達過程,都與科技應用、創作、溝通、關鍵思考及協同技巧,有牢不可分的關係。」奧多比全球教育部門副總裁Peter Isaacson表示:「透過最新一代Creative Suite 5 的發表,我們將能讓教育機構、學生及教職員能夠更輕易地實踐創意,並且讓他們可以隨時隨地運用- 無論是在課堂、家中或是網路。」

Creative Suite 5 能夠幫助學生及教職員,輕鬆製作印刷、網頁、影像、音訊及行動內容,並將創作整合至他們的課業報告中。Creative Suite 5 可以讓他們更快速完成精彩作品,高效率展開共同研究,同時以視覺化方式將創意與他人溝通。舉例來說,透過新的Adobe Flash® Catalyst元件,不需要撰寫程式碼,就能立即完成互動式內容的製作。此外,新加入整合的Adobe CS Live線上服務,能夠提供線上共同作業環境,讓課業專案高效率完成。(CS Live服務提供限定期間的免費服務)

「透過Creative Suite 5,奧多比將能夠提供創新工具,讓跨媒體技巧的教學工作變得更為容易。」溫哥華電影學院數位設計科系領導人Brett Forsyth 表示:「運用Adobe Creative Suite 5,學生將能夠深入了解產業標準工具,同時拓展他們的創意技能 由正確的起點邁向未來成功的職能生涯。」

根據研究顯示,現今的學生其實都是數位媒體製造者,而非只是單純的數位媒體消費者 在社交網路及個人部落格中製作及分享創意、照片與影像,已經成為他們日常生活的一部份,他們透過此一方式展開社會溝通,同時也希望能將這些元素帶入他們的學校作業中。Adobe Creative Suite 5 提供了完整的教育訓練資源及合適的價格,讓學生及教職員們有機會能夠學習如何高效率運用Creative Suite 5,製作最具吸引力的作業研究內容,同時盡情展現創意自我。

明志科技大學視覺傳達設計系助理教授林金祥表示:「過去教導學生,需要花很多時間是在解決技術上的問題,那是painful” 的時期,後來隨著Adobe產品的逐漸革新,進階到painless” 的階段。隨著Adobe CS5 的誕生,相信未來將準備邁入”pain free” 的境界,很開心看到Adobe做到了!」

全新的教育資源

為了能夠完整提供Creative Suite 5 軟體資源,奧多比將提供多項嶄新的教育資源,包括課程、針對學生及教師舉辦的相關專業認證計畫、以及教師專業培訓方案等。

奧多比特別設計了三項不同的CS5課程,將能夠協助教師執行設計、網頁與影像教學計畫。這些課程主要著重於學生要能達成溝通,所需了解的科技技巧及設計理論,課程包括:數位設計:網頁設計基礎;視覺設計:設計及印刷製作基礎;以及數位影像:影像設計與製作基礎。年度的課程指導將由奧多比免費提供,同時課程內已完全符合國際科技教育協會(The International Society for Technology in EducationISTE®)標準。

教師及學生將可以取得ACAAdobe Creative Associate)入門等級技能認證,以及ACEAdobe Certified Expert)專業等級技能認證,此認證乃由Certiport®公司負責規劃與執行,針對學生的技術與溝通技巧進行認證。這對於他們將來的升學及職場選擇將非常具有幫助。

Creative Suite 5產品內容

Creative Suite 5系列產品包括:Creative Suite 5 Master CollectionCreative Suite 5 Design PremiumCreative Suite 5 Web PremiumCreative Suite 5 Production PremiumCreative Suite 5 Design Standard,以及15項重點產品與相關技術,以及Adobe CS Live整合服務* Adobe Creative Suite 5 Master Collection套件中包含了多項完整的應用程式:Photoshop® CS5Illustrator® CS5InDesign® CS5Flash Catalyst CS5Flash CS5 ProfessionalDreamweaver® CS5Adobe Premiere® Pro CS5After Effects® CS5。這些工具軟體,同時也將以獨立產品包裝或整合於另外五款Creative Suite版本中推出。

Adobe CS5 產品家族同時也為即將推出的Flash 10.1Adobe AIR® 2,提供內容與應用程式製作功能。這兩項嶄新的平台技術,能為行動裝置螢幕帶來最佳顯示效果,並且可以充分發揮裝置原生效能營造更具吸引力的用戶體驗。如需更多產品功能詳細資訊,請造訪:http://www.adobe.com/education/products/creativesuite/

價格與上市時間

Adobe Creative Suite 5 英文版預定將於4月份到貨,透過奧多比台灣代理商上奇科技(02) 8792-3001及展碁國際(02) 2371-6000 正式上市。此外,還將推出相關升級價格及大量授權方案。Adobe CS5 所整合的Adobe CS Live Services,將提供限定期間的免費服務 *。如需更多關於產品功能、作業系統支援、升級規定、價格與語言版本的詳細資訊,請造訪: www.adobe.com/go/creativesuitemaster

奧多比公司簡介

奧多比提供革命性技術,讓人們隨時隨地都能透過任何媒體,完美的利用創意、資訊與世界溝通。欲查詢更多詳細資料,請至奧多比公司主網站:www.adobe.com 或台灣分公司網站:www.adobe.com/tw

由頤德國際(Veda International Corp.) 代表奧多比公司(Adobe Systems) 發稿

Adobe宣佈推出Creative Suite 5 家族產品

突破性互動設計工具,將廣泛應用於媒體與行動裝置,為創意內容及數位行銷市場帶來震撼衝擊

2010 4 13 日,台北訊】全球軟體大廠奧多比今日宣佈推出Adobe® Creative Suite® 5 家族產品,這套最新一代業界標準設計及開發軟體,將能為創意工作流程開啟革命新頁!大幅提升互動性與效率,同時擁有數位內容與行銷製作高度影響力,Creative Suite 5 產品系列將為旗艦級創意工具帶來多樣令人震撼的完整升級功能,為設計及開發人員,提供無與倫比的工作流程以強化效能。首度整合線上內容與數位行銷最佳化功能,Creative Suite® 5能夠運用強大的Omniture技術,擷取、儲存及分析來自網頁或其他資源的相關資訊。此外,Creative Suite 中也加入了Adobe Flash® Catalyst™全新元件,這項功能將引導用戶無須撰寫程式碼就能完成互動內容設計,同時更可以大幅改善設計與開發人員的協同整合作業流程。

Adobe Creative Suite5 產品家族,同時也將針對眾所矚目的Flash 10.1 Adobe AIR® 2 提供內容與應用程式製作能力。這兩項嶄新的平台技術,能為行動裝置螢幕帶來最佳顯示效果,並且靈活運用裝置的原生效能,營造更豐富及更具吸引力的用戶體驗。

Adobe Creative Suite 5 Master Collection 的單一套件包裝中,整合了奧多比所有最為知名的Creative Suite 工具產品,例如:Photoshop® CS5Illustrator® CS5InDesign® CS5Flash Catalyst CS5Flash CS5 ProfessionalDreamweaver® CS5Adobe Premiere® Pro CS5After Effects® CS5。這些工具軟體,同時也將以獨立產品包裝或整合於另外五種Creative Suite 套裝產品中推出。這五套Creative Suite 5 系列套裝產品,包括:Creative Suite 5 Master CollectionCreative Suite 5 Design PremiumCreative Suite 5 Web PremiumCreative Suite 5 Production PremiumCreative Suite 5 Design Standard。另外同時宣佈推出的還有15項重點產品與相關技術,以及最新的Adobe CS Live整合服務(CS Live Service提供限定期間的免費服務)*

Creative Suite 5 將能延續奧多比打造嶄新創意功能的使命,新版本的首要任務,就是為全球出版及創意業界承接重大的挑戰 如何以數位內容建構可獲利的商業體系。」奧多比總裁暨執行長Shantanu Narayen表示:「以奧多比創意工具結合線上商業分析能力,我們將能夠確保出版商、設計與行銷人員,得以為所有媒體及裝置,製作、提供與配置最完美並極具吸引力的數位體驗。」

奧多比大中華區總經理黃耀輝表示:「在政府的積極帶領下,台灣近年來致力於文化創意產業的發展,其中,近期行政院為電子書發展點火,表示未來5年將投入新台幣21.34億以上的預算,整合各部會資源、全力推動電子書產業發展。相信在政府的帶動下,台灣文創產業的市場規模將大幅提昇」**1

「最近台灣設計師的作品也屢屢在國際設計大獎中大放光芒,讓台灣設計實力逐漸受到國際注目。同時讓所有人都感到興奮的是,台北奪得了2011年『世界設計大會』主辦權,此代表了國際設計社群對台灣設計與創意表現的高度肯定,同時亦是政府長期支持設計產業發展的具體成果!此外,行政院將明年訂為『設計年』,預計全年舉行約50項設計相關活動。」黃耀輝強調:「Adobe不斷突破創意發展中的工作流程,協助使用者提高工作效能,設計者的創意將能發揮到前所未有的極致。相信未來在Adobe Creative Suite 5 強大功能的推波助瀾之下,將會帶領台灣設計走向另一個巔峰。」**2

顧客證言

黃耀輝指出:「已試用Adobe Creative Suite 5 測試版的創意人士皆給予極正面評價,並強烈表示產品的上市將為設計人員的工作方式帶來極大的正面影響。」

明志科技大學視覺傳達設計系助理教授林金祥表示:「過去教導學生,需要花很多時間是在解決技術上的問題,那是painful” 的時期,後來隨著Adobe產品的逐漸革新,進階到painless” 的階段。隨著Adobe CS5 的誕生,相信未來將準備邁入”pain free” 的境界,很開心看到Adobe做到了!」

蘋果日報資訊科技部資深技術支援工程師王桂森:「Adobe Creative Suite 5 在數位創意文件的製作上有很大的進展,尤其是InDesign CS5版面編排功能,能夠讓內容從印刷排版到網頁以及手持裝置上的呈現一氣呵成,這對於報紙媒體來說將節省許多寶貴的作業時間,同時也將為讀者帶來豐富且具吸引力的閱讀新體驗。」

創意設計無疆界

Adobe Creative Suite 5 Master Collection 整合超過250項最新功能。InDesign CS5 將以最新的互動文件及強化的電子書裝置支援,強化邁向電子出版領域的轉型能力。Photoshop CS5 的去背功能技術則將帶來影像製作與編輯效能的全新升級,這項技術將提供更強大的邊緣偵測效能,以及更完美的快速遮罩效果;Photoshop CS5 同時還將提供一項創新的Content-Aware Fill 功能,能夠移除指定的影像元素,並立即自動代換所搬移的畫素。新的筆刷(stroke)選項功能,可以讓Adobe Illustrator CS5 用戶製作多種寬度的筆刷,並且透過筆刷上的任一點精確調整寬度。

更快速 更精確

透過Adobe Creative Suite 5 Master Collection 多樣突破性技術的整合,將能夠驚人提升創意執行效率。現在,Adobe PhotoshopAdobe Premiere ProAfter EffectsMacWindows®版本,皆已全部升級成為原生的64位元應用程式,因此將能讓用戶的高解析度專案執行更為流暢順利。藉由極受期待的NVIDIA® GPU 加速Adobe Mercury Playback Engine 播放引擎功能,將可以讓Adobe Premiere Pro CS5 用戶更快速開啟專案、即時剪輯效果豐富的高解析度場景,同時無須執行運算就能播放複雜的專案內容。After Effects 革命性的高效率Roto Brush筆刷功能,能夠幫助用戶在正常時間片段中獨立出移動的前景元素。此外,Dreamweaver CS5 新加入支援多項最受歡迎的內容管理系統 DrupalJoomla!WordPress能夠讓設計人員精確檢閱系統中的動態網頁內容資訊。

加速配置創意工作流程

Adobe Creative Suite 5 產品整合了創新的Adobe CS Live,將能夠透過五項系列線上服務的提供,加速創意工作流程,並讓設計人員更專注於創意工作本身。CS Live提供限定期間的免費服務,包括:Adobe BrowserLabAdobe CS ReviewAcrobat.comAdobe StoryOmnitureSiteCatalyst® NetAverages™Adobe CS Review服務,能夠讓Creative Suite 5 應用程式直接線上檢閱設計作品;Adobe BrowserLab 則是提供了一項不可或缺的工具服務,能夠用來測試網頁內容在各種不同瀏覽器及作業系統中的表現;NetAverages 服務可以提供網頁使用資料,幫助用戶在網頁及行動裝置創意設計流程前期,減少不必要的使用狀況猜測;Adobe Story是一項能夠執行協同作業的腳本撰寫(scriptwriting)工具,可以提升CS5 Production Premium 的製作與後製工作流程效率;透過Acrobat.com 的各項服務運用,例如Adobe ConnectNow 網頁會議功能,將能夠大幅強化與同事及全球客戶的資訊交換討論工作。

為更多行動平台製作提供內容

運用Flash Professional CS5,設計及開發人員將能夠針對更多樣化的行動平台與裝置,例如智慧手機、平板裝置、筆記型電腦、智慧閱讀機及其他消費性電子產品,製作、測試及提供網頁內容。這些內容將可以傳遞給擁有Flash Player 10.1 的瀏覽器,或是透過AIR 2 製作成獨立的應用軟體。此外,現在用戶可以運用嶄新的Flash Pro Packager製作iPhone應用程式,這些應用程式將能提供給iPhoneiPad使用(需通過美商蘋果公司的規範與審核),未來還將支援AndroidBlackBerryPalm webOS等更多樣的裝置。

台灣上市發表會訊息

本次Adobe 也特別於413日中午舉辦Creative Suite 5 亞太線上發表會, 並將於526日在台北國際會議中心,將有逾千位的創意設計達人,從平面製圖、網頁設計、行動科技、互動設計、影片製作等業界專業人士齊聚一堂,共同迎接Adobe Creative Suite 5 的在台上市。

l 台灣奧多比將在526日於台北國際會議中心盛大舉辦Adobe Creative Suite 5 上市發表會,由多位知名的教父級講師揭露全新CS5 強大產品功能及創意革新,預期將有超過一千人前來共襄盛舉。此活動為免費參加,請及早報名以免向隅,相關訊息請參考http://www.myadobe.com.tw/

l 為慶祝奧多比Creative Suite 的隆重上市,台灣奧多比所新成立的Facebook 粉絲頁面將持續分享第一手Creative Suite 5 的相關訊息並增進與奧多比產品擁護者的溝通與互動。欲瀏覽最新的即時資訊,請造訪www.facebook.com/adobeTW

價格與上市時間

Adobe Creative Suite 5 英文版預定將於4月份到貨,透過奧多比台灣代理商上奇科技(02) 8792-3001及展碁國際(02) 2371-6000 正式上市。此外,還將推出相關升級價格及大量授權方案。Adobe CS5 所整合的Adobe CS Live Services,將提供限定期間的免費服務 *。如需更多關於產品功能、作業系統支援、升級規定、價格與語言版本的詳細資訊,請造訪: www.adobe.com/go/creativesuitemaster

奧多比公司簡介

奧多比提供革命性技術,讓人們隨時隨地都能透過任何媒體,完美的利用創意、資訊與世界溝通。欲查詢更多詳細資料,請至奧多比公司主網站:www.adobe.com 或台灣分公司網站:www.adobe.com/tw

* 透過多樣化的主控式線上服務,包括CS Live 線上服務(以下簡稱線上服務),這項產品將能夠為用戶大幅延伸使用效能,提供高效率網際網路運用。線上服務的部份功能,可能會因為地區、語言及幣值的不同而有所差異,如有任何變動將不另行通知。線上服務的使用,必須另行遵照Online Privacy Policy 線上隱私政策條款規定,部份服務可能會要求用戶註冊。部份線上服務,包含免費使用部份,可能會需要其他額外的費用支付以及需要另外訂閱。如需深入了解使用條款及線上隱私政策資訊,請造訪 www.adobe.com;更多CSLive線上服務資訊,請造訪 www.adobe.com/go/cslive

**資料來源 : 1 行政院新聞局新聞稿「行政院未來5年投入新台幣21.34億全力推動電子書產業」http://www.ey.gov.tw/ct.asp?xItem=64710&ctNode=1435&mp=1

2台北世界設計大會 新聞稿 http://www.2011ida.com/tdc_newsview.asp?PageCode=Home-Press&PageSession=7&PageKey=1&yr=2009&NewsTo=1&sno=BF

由頤德國際(Veda International Corp.) 代表奧多比公司(Adobe Systems) 發稿

關於我






* ben {dot} chang {at} ben {dot} idv {dot} tw
* FriendFeed

贊助我1元美金:

Plurk

標籤雲