Plurk FaceBook Twitter 收進你的MyShare個人書籤 MyShare
  顯示內嵌語法

::旗標電腦文摘::最正確、最豐富的電腦知識寶藏!
2007-06-14│ NO378│訂閱電子報

本週活動:
本期主題:
最新主題:
:::最新出版:::
Windows Vista 使用手冊
施威銘主編
使用旗標Office2007/Windows Vista書籍優惠券購買,可抵用100元                   活動只到六月底止
 SQL Server 2005 Reporting Services 徹底解說
 ASP.NET 2.0 網頁設計範例教本 - 使用 C#
 Pro/ENGINEER Wildfire 3.0 零件設計應用實例
 數位攝影徹底研究 - 黑白之部
 數位攝影與托斯卡尼的邂逅 - 從拍攝、編修到藝術創作

本期主題:Cache Controller 模式 -- 為 Ajax 程式實作快取機制

實作快取有兩種方式:儘可能使用 Internet 架構來達成快取, 或是撰寫程式以協助 Internet 架構來進行快取。撰寫快取演算法雖然相當有趣, 不過卻很可能徒勞無功。這是因為在 HTTP 要求鏈中, 有許多元素皆會快取資料。如果再自行設計快取功能, 可能會在不同階段重覆快取相同的資料, 對於整體效能並無幫助。

HTML 與 HTTP 快取指令

藉由 Internet 架構來管理快取機制, 亦可稱為使用「HTTP 逾期」(HTTP Expiration) 模型。有兩種方式可藉由 Internet 架構來控制快取:新增 HTML 標記, 或是新增 HTTP ID。

以下範例使用 HTML 標記來控制快取:

<html>
<head>
<title>Hanging Page</title>
<meta http-equiv="Cache-Control" content="max-age=3600">
<meta http-equiv="Expires" content="Tue, 01 Jan 1980 1:00:00 GMT">
</head>
<body>
...


HTML meta 標記具有兩個可模仿 HTTP ID 的屬性:http-equiv 與 content。使用 HTML meta 標記的問題在於, 這些標記是供 Web 瀏覽器之用, 因此無法在 XML 資料流中加入 meta 標記。亦即, 此種依賴 HTML 的快取機制, 不適用於非 HTML 的資料。

使用 Internet 架構來控制快取的第二種方式, 便是產生一組 HTTP 標記, 如下列 HTTP 要求結果所示:

HTTP/1.1 200 OK
Cache-Control: Public, max-age=3600
Expires: Wed, 10 Aug 2005 10:35:37 GMT
Content-Type: text/html;charset=ISO-8859-1
Content-Length: 39
Date: Wed, 10 Aug 2005 09:35:37 GMT
Server: Apache-Coyote/1.1

<html><body>Hello world</body></html>

Cache-Control 與 Expires 等兩個 HTTP ID 負責管理快取網頁的方式。Cache-Control 指定將內容存放在快取中 3600 秒 (1 小時)。Expires 定義擷取的內容何時逾期。Cache-Control 與 Expires 皆可讓 Proxy 或瀏覽器以「HTTP 逾期」模型來快取 HTTP 內容。

若是在 script 中使用, 可藉由下列 ASP.NET 程式碼來產生 HTTP ID:
 

<%@ Page Language = "C#" %>
<%@ Import Namespace="System" %>
<%
Response.Cache.SetExpires(DateTime.Now.AddMinutes( 60 ) ) ;
Response.Cache.SetCacheability(HttpCacheability.Public) ;
%>
<html>
<head>
<title>Cached Page</title>
</head>
<body>
Hello world!
</body>
</html>


在 .NET 中, SetExpires 與 SetCacheability 方法會新增 Expires 與 Cache-Control ID。若要使用 Java Servlet 來達成相同效果, 請參考下列程式碼:
 

import javax.servlet.http.*;
import javax.servlet.*;
import java.io.*;
import java.util.*;

public class GenerateHeader extends HttpServlet {
protected void doGet(HttpServletRequest req,
HttpServletResponse resp)
throws ServletException, IOException {
resp.addHeader("Cache-Control", "Public, max-age=3600");
resp.addHeader("Expires",
"Fri, 30 Oct 2006 14:19:41 GMT");
resp.setContentType("text/html");
PrintWriter out = resp.getWriter();
out.println("<html><body>Hello world</body></html>");
}
}
 

...........更多的內容請見《實作 Ajax 網頁程式的最佳方案

本期主題:數位攝影 -- 將彩色影像轉為黑白影像的基本方法與原則

透過 Photoshop, 有 2 種簡單的方式可以把彩色影像轉成單色影像。一種是從 RGB 的個別色版中移除色彩資訊, 這種方式稱為【去除飽和度】(Desaturate)。另一種則是把彩色影像的 3 個色版轉換成單一的灰階色版, 換句話說, 是一種色彩模式的轉換。這兩種方式所達到的效果大致來說是相同但並不完全一樣, 各位不妨多準備不同的彩色影像並使用這 2 種方式來轉換後比較其結果。

 
   
原始圖檔
在印度的菩提迦雅一棵纏繞著橘紅色布幔的菩提樹, 佛陀曾在樹下悟道。在轉換時與橘紅色相關的色版會呈現比例變動 
灰階
這個 Photoshop 指令會把三個色版合併為一個灰階色版, 合併的過程中會自動的加強綠色色版的比重而降低藍色色版的比重。在本例中, 加強綠色與降低藍色權重造成了橘紅色布幔轉成灰階後階調偏淡 

 

 
   
【去除飽和度】
Photoshop 的【去除飽和度】指令會以相同的權重來處理 3 個色版, 因此轉換後的橘紅色布幔明顯的比上圖更暗。

轉換成灰階模式(『【影像/模式/灰階】』)則是使用了不同的原理。它把 RGB 三個色版裡的色相拿掉之後再併為一個色版, 而且在合併的過程中針對三個色版所使用的比例權重也不相同。在 Photoshop 的預設值是設定為紅色 30%, 綠色 59%, 藍色 11%。這樣子的設定是為了讓轉換之後的黑白影像能夠讓大部分的人感覺上更自然。

接著讓我們再更深入的探討。如果採用了平均權重的方式, 也就是每一色版都應設定為 33%(為了維持轉換後的明度正常, 因此三個色版加總應為 100%), 但在 Photoshop 中卻強調了綠色色版的權重。這樣的設定可以讓肌膚的階調在轉換後看起來更自然, 因為肌膚的表現對大多數人而言是最重要的部份(但是在白種人以外人種的肌膚表現上就不是那麼理想)。這個例子可以讓我們了解在這廣闊的、複雜的、具變化性的彩色轉黑白影像的數位領域中, 存在著許多的可能性供我們去探索。在了解色版合併的這幾種方法與原理後, 可以知道每種方法都有其意義。我們也可以不必依循這些已制定好的演算法來進行色版合併, 而是根據自己的喜好來作業。

 
   
【原始圖檔】
在這幅英格蘭的約克夏山谷風景中, 黃綠色為主要色調, 但也包含了些許淡藍色的陰影。色版均等的合併方式轉換出來的黑白影像具有適中的對比表現 

 

 
  【灰階】
綠色色版轉換的預設值為 59%, 使得田野在轉換後顯得稍淡, 而藍色色版轉換的預設值為 11%, 使得陰影部分在轉換之後對比更為強烈

...........更多的內容請見《數位攝影徹底研究 - 黑白之部


好書能增進知識、提高學習效率‧ 卓越的品質是旗標的信念與堅持
Copyright c 2007 Flag Publishing Co.,Ltd. All Rights Reserved 本電子報內容未經授權請勿轉載