防賊妙招!如何防止圖片被小偷盜連?

這兩天把 AWSTATS 給裝起來了,順道把 Apache Access Log 格式改成 Combined 格式,一併將 Referer 與瀏覽器/OS的類型一併記錄在Access Log 中。
開始紀錄了以後才發現,原來有人盜連我文章上的圖片。

220.132.143.85 – – [30/Jul/2007:00:02:46 +0800] “GET /blojsom/resources/default/20050911_azureus/step3.JPG HTTP/1.1” 403 357 “http://www.btpig.com/html/200702/649999.html” “Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-TW; rv:1.8.1.5) Gecko/20070713 Firefox/2.0.0.5”

按照 Referer 的網址連過去,果然又是大陸的網站。難怪先前沒事在看 Access Log 時,常常看到怎麼會只有圖片而沒有文章的的點擊紀錄。這下子得來想想怎麼防這些小偷。

股溝大神真是我的好朋友,有什麼問題問他,包準給你一個滿意的答覆。查了一下怎麼擋盜連圖片,大抵上都是說要透過 HTTP Header 上的 Referer 來達到阻擋的效果。

所謂 Referer 是指,瀏覽器在進行 HTTP Request 時,會自動將上一個 URL 放在 Referer 中。於是乎,如果是正常連結過來圖片,Referer 必然是從 broso.twbbs.org 所連結過來的。所以只要 Referer 不是 broso.twbbs.org,那就不用客氣了,殺無赦!!

於是調整了一下我的 Apache httpd.conf,增加參數如下:

1
2
3
4
5
6
7

# 防止人家盜連圖片, 擋 gif, jpg,png
SetEnvIfNoCase Referer "^http://broso\.twbbs\.org/" local_ref=1
<FilesMatch "\.([Gg][Ii][Ff]|[Jj][Pp][Gg]|[Pp][Nn][Gg] )$">
  Order deny,allow
  Deny from all
  Allow from env=local_ref
</FilesMatch>

稍微解釋一下

SetEnvIfNoCase 這一行,指的是任何 Referer 開頭是 http://broso.twbbs.org/ 都設定環境變數 local_ref 為 1
接著用 FilesMatch Tag,針對任何 gif/jpg/png 結尾的檔案進行檢查,有設定環境變數 local_ref 的要求才允許讀取

改完後,重起以後就可以了…

秋郊海報

從來沒想過自己也會需要學 PhotoShop。敗今年被選為部門福委之賜,公司的秋郊海報被交辦由我來製作。
以前 PhotoShop 對我來說是個超大型的繪圖處理軟體,我平常使用的不外乎圖檔 resize,調調顏色飽和度。殺雞焉用牛刀,這種技巧實在是用不著這套軟體,所以我也從來沒認真學過怎麼使用 PhotoShop。
這下子可糟了,硬著頭皮被逼著開始找資料學著使用。幸好有先前的秋郊海報圖檔可以參考,所以也不用一切重頭開始。大約搞了一個禮拜,才終於弄了三張出來,也許技巧熟練的人兩天就弄出來了說。:p

貼在這裡紀錄一下。

海報 1
海報 1

海報 2
海報 2

海報 3
海報 3

參考網址:
PhotoShop 之巧妙製作繩子及其應用

EXIFTool

過去拍完 raw 檔,回來後製轉檔為 jpeg 時,常用的軟體是 BreezeBrowser Pro,這套軟體好處是批次處理方便,出去旅遊回來動輒上百張的照片,如果一張張用 Canon 附贈的 DPP 來轉檔,那不知道要轉到什麼時候,這時候用 BreezeBrowser Pro 就很好用。然而,我覺得 BreezeBrowser Pro 轉出來的 jpeg 檔畫質總是沒有 DPP 來得細緻,但是為了節省時間似乎也只能暫時妥協。

DPP 從 2.0 以後就加入了批次處理的功能,同時還加上了 Canon 特有的 Picture Style 參數調整,於是批次處理照片不再是夢靨。最近 DPP 更新推出 3.0 版本,還加上了雜訊抑制的功能,讓原本雜訊純淨度有極佳表現的 Canon CMOS,這下子更是如虎添翼。

於是最近幾次的後製,就開始轉為使用 DPP 來批次轉檔。不過發現了另一個問題,DPP 似乎轉檔時,並不會將所有的 EXIF tag 完整複製到轉出的 jpeg 檔中,只保留少許重要的資訊,例如:曝光模式、白平衡、閃燈等資訊就付之闕如。真是有一好沒兩好。

於是又求助股溝大神,看看別人是如何解決這個問題,找了很久只有人提到這個問題,但也沒人說該怎麼解。最後找到有人提到 EXIFTool 這套小工具,可完整從 raw 檔複製所有的 EXIF tags 到指定的檔案中,於是就解決我的問題,只要將 DPP 轉出來的 jpeg 再用這個小工具從 raw 檔將 EXIF 複製過來即可,而且這個工具是用 perl 寫的,所以在 Linux 上寫個 shell script 去做批次複製更是沒問題。

寫了下面的 script 來做批次轉檔

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34


#!/bin/sh

if [ $# = 0 ]; then
    echo "Usage : copy_exif.sh <RAW_SOURCE_FOLDER>"
    exit
fi

RAW_SOURCE_FOLDER=$1

for file in `ls *`
do
    if [ -f $file ]; then
        PREV_FILENAME=`echo $file|awk -F"." '{print $1}'`
        EXT_FILENAME=`echo $file|awk -F"." '{print $2}'`

        RAW_FILE_LOWER=$RAW_SOURCE_FOLDER/$PREV_FILENAME.cr2
        RAW_FILE_UPPER=$RAW_SOURCE_FOLDER/$PREV_FILENAME.CR2
        EXIFTOOL_BACKUP_FILE=`echo "$file"_original`

        if [ -f $RAW_FILE_LOWER ]; then
            echo Copying EXIF tags from $RAW_FILE_LOWER to $file
            exiftool -TagsFromFile $RAW_FILE_LOWER $file
            rm $EXIFTOOL_BACKUP_FILE
        else
            if [ -f $RAW_FILE_UPPER ]; then
                echo Copying EXIF tags from $RAW_FILE_UPPER to $file
                exiftool -TagsFromFile $RAW_FILE_UPPER $file
                rm $EXIFTOOL_BACKUP_FILE
            fi
        fi
    fi
done

用法為在轉檔完畢的 jpeg 目錄下面執行,給定一個 raw 檔的來源目錄即可

copy_exif.sh <RAW_SOURCE_FOLDER>

Using Ramdisk on Windows Vista

過年時閒來無聊,便在我的 VAIO S56 上面裝 Vista Ultimate 試用版,裝完後效能評估得到的分數如下:

Vista 效能評估

Aero 特效雖然跑起來只有 2.3 分,但是實際上 Aero 特效啟動後也並不會感覺很慢,相反的我似乎覺得比 XP 還來得快了一點點??
也許是 VAIO 原版的 XP 內建一大堆有的沒的軟體。其實 S56 買來一年了,那些內建的軟體也只有剛買來時點開來玩玩,所以沒裝也沒什麼差。
試用了近一個月,常用的除了一些特定軟體因相容性的問題無法使用之外,整體來說還不錯,於是也想正式升級為正版軟體。

為了讓整體效能跑起來更順一些,我也將系統記憶體一次升級到 2G 滿檔,雖然使用起來沒什麼特別感覺,但是心理層級的爽度卻是大大的加分。
上禮拜在 Yahoo 買下了 Vista 的 Home Premium 版,拿到貨之後便迫不及待裝上去並且啟用成功,使用正版軟體跟之前裝好 XP 後還要到處找破解的那種心情真是差太多了,雖然正版軟體還真是不便宜。

不過今天這篇主要不是來聊安裝 Vista 後的爽度,主要是要來記錄一下怎麼在 Vista 上面安裝 Ramdisk 的軟體。
Ramdisk 的類似軟體很多,以前用 XP 時,常使用 Gavotte Ramdisk 這套軟體,主要是因為這套免費,沒有使用容量上的限制,用起來又很穩定,所以拿來當 IE / Firefox 的暫存目錄碟是最佳不過。

不過在 Vista 上面安裝時直接按下 Install Ramdisk,卻會發生 Fail 的訊息。

Install Failed!

研讀了一下 Gavotte Ramdisk 的 Readme 後才發現,原來其實 Gavotte 在撰寫這套軟體時,並沒有撰寫 ramdisk.exe 這個安裝的 GUI 介面,而是必須靠手動方式在 Registry 中設定相關的參數,Registry 的路徑如下

[HKEY_LOCAL_MACHINE\SYSYEM\CurrentControlSet\Services\RRamdisk\Parameters]

稍微看了一下裡面的參數設定,其中

Regidtry Parameters

DiskSizeM 是指定 Ramdisk 的磁碟大小,以 MB 計算,也可以使用 DiskSizeK 來以 KB 為計算單位,其中 DiskSizeK 設定為優先。
DriveLetter 是指定 Ramdisk 使用的磁碟機代號。
MediaType 則是指定磁碟機的類型,預設為 2 (Fixed Media)。

於是便開始手動安裝 Gavotte Ramdisk 了

Step 1. 安裝 Gavotte Ramdisk Driver.

開啟裝置管理員,選擇 執行–>新增傳統硬體,再選擇 安裝我從清單中手動選取硬體(進階選項) –> 顯示所有裝置 –> 從磁片安裝,然後瀏覽至 Gavotte Ramdisk 解開目錄中的 RRAMDISK.INF


最後按下開啟舊檔 –> 確定,接下來便看到硬碟一陣狂轉,然後在裝置管理員便多了一項裝置

Step 2. 修改 Registry 參數

打開 Regedit,並瀏覽至 [HKEY_LOCAL_MACHINE\SYSYEM\CurrentControlSet\Services\RRamdisk\Parameters]

雙擊 DiskSizeM 參數,修改磁碟大小為 512M
如果要改磁碟機代號,就必須一道修改 DriveLetter 參數
改完後重新開機

Step 3. 修改 IE 或 Firefox 的暫存目錄路徑

IE 修改方式很簡單,從 網際網路選項 中按照下圖修改後重新登入即可

Firefox 修改路徑比較麻煩,從網址列打入 about:config,然後在篩選器中輸入 browser.cache.disk.parent_directory
如果沒找到,就自行新增一個字串設定,內容就是完整的目錄路徑即可,設定完畢後重新開啟 Firefox 即可生效

Nikon S7 曲線機 開箱測試

Reyna 過年前想買台傻瓜數位相機給家裡用,研究很久決定目標為 Nikon S7,710 萬畫素/3″ LCD/數位防手振/臉部辨識功能。於是趁同學會後,帶她到
全台最大水貨商億華去敗家。到了現場真是人山人海,億華從先前在芝山站前的小小店面,擴展到目前雙拼店面的規模,我想服務及後續保固處理應該是他最大的賣點吧。

好不容易擠到了櫃臺前,請小姐拿 S7 出來把玩測試,3″ LCD 果然是明亮動人,情境模式超多,真的挺適合初學者,名符其實的傻瓜數位相機。最後測完以後,付了錢後就趕緊回家來開箱拍照。

未開封 Nikon S7 盒裝

打開上蓋後 S7 靜靜的躺在盒中,安全的包裹在塑膠保護袋中

鏘鏘鏘鏘…S7 的初見靚影

側面是亮銀握把,閃閃動人,不過也很容易留下指紋

正背面,寬大的 3″ LCD 螢幕及操作介面

S7號稱曲線機,正上方的操作介面,由左至右分別為
啟動/關閉 臉部辨識功能、錄影收音麥克風、電源開關、電源指示燈、Zoon In/Out

多買了記憶卡/電池套件,另外還附了清潔組及桌上型小腳架

套件也另外附贈一個皮套,挺有質感的

S7 裝進皮套後,質感加倍

S7 的屁屁下方還有傳輸接點,另附底座以便與電腦連接或做充電使用

多來幾張 S7 各個角度的照片




這次去億華順道買了兩片濾鏡,一片是要給 24-105mmF4L 用的,原先是拿 17-40mmF4L 的濾鏡先頂著用,兩者剛好都是 77mm 口徑,所以可以共用
另一片是 Suzuki 請我幫他的 17-85mm 買的,聽說原來濾鏡的在日本摔破了。

銷魂的 B+W 字樣

下面是 S7 實際拍出來的測試照,試拍結果覺得 S7 的近拍能力真是強,不過高 ISO 的雜訊還是嚴重的有點無法接受
也許是已經習慣 Canon 高 ISO 的可用性了吧






DBUtils 如何處理 oracle.sql.TIMESTAMP

接續上篇 java.sql.Date v.s. java.sql.Timestamp in Oracle 9i

Oracle JDBC 的 FAQ 中提到,在 Oracle 9i 中如果要取得時間部分的資料,最好也最標準的方法是將資料型態由 DATE 改為 TIMESTAMP。經過實際測試將資料型態改為 TIMESTAMP 之後,Oracle 9i JDBC Driver 並非如預期地將 TIMESTAMP 轉為 java.sql.Timestamp,而是轉型為 oracle.sql.TIMESTAMP,應用程式必須再呼叫一次 oracle.sql.TIMESTAMP.timestampValue(),才能正確轉回 java.sql.Timestamp,這對我原先已經撰寫完成的許多程式來說,必須一一修改,相當麻煩。

所幸原先程式係透過一個共用元件來使用 DBUtils,經過檢視 Jakarta Commons DBUtils 的原始碼後,問題出在 org.apache.commons.dbutils.BasicRowProcessor 的 toMap() 函式

1
2
3
4
5
6
7
8
9
10
11
12
13


    public Map toMap(ResultSet rs) throws SQLException {
        Map result = new CaseInsensitiveHashMap();
        ResultSetMetaData rsmd = rs.getMetaData();
        int cols = rsmd.getColumnCount();

        for (int i = 1; i <= cols; i++) {
            result.put(rsmd.getColumnName(i), rs.getObject(i));
        }

        return result;
    }

裡面使用 ResultSet.getObject() 來直接取得 JDBC Driver 回傳的型態,而 Oracle 9i JDBC Driver 遇到資料型態為 DATE,則回傳 java.sql.Date,資料型態為 TIMESTAMP,則回傳 oracle.sql.TIMESTAMP。真不知道是 Oracle 的 bug 還是故意這麼搞的,所以 DBUtils 得到的就絕對不會是 java.sql.Timestamp

思考之後,最好的方式應該是寫一個 Wrapper 去繼承 org.apache.commons.dbutils.BasicRowProcessor,然後只改寫 toMap()函式如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32


public class BasicRowProcessorWrapper extends BasicRowProcessor {
    /**
     * 繼承自 org.apache.commons.dbutils.BasicRowProcessor
     * 由於 Oracle 9i JDBC Driver 遇到資料型態為 DATE 會轉為 java.sql.Date
     * 導致僅留下日期而遺失時間的部分,遇到資料型態為 TIMESTAMP 會轉為 oracle.sql.TIMESTAMP
     * 必須自行再轉為 java.sql.Timestamp,因此改寫 toMap() 函式
     * @param rs ResultSet
     * @return Map
     * @throws SQLException
     */
    public Map toMap(ResultSet rs) throws SQLException {
        Map result = new CaseInsensitiveHashMap();
        ResultSetMetaData rsmd = rs.getMetaData();
        int cols = rsmd.getColumnCount();

        for (int i = 1; i <= cols; i++) {
            Object obj = rs.getObject(i);
            if ("oracle.sql.TIMESTAMP".equals(obj.getClass().getName())) {
                result.put(rsmd.getColumnName(i), rs.getTimestamp(i));
            } else if (obj instanceof java.sql.Date) {
                result.put(rsmd.getColumnName(i), rs.getTimestamp(i));
            } else  {
                result.put(rsmd.getColumnName(i), obj);
            }
        }

        return result;
    }
}

遇到 JDBC Driver 型態為 oracle.sql.TIMESTAMP 或是 java.sql.Date,則強迫使用 getTimestamp() 函式來轉型為 java.sql.Timestamp,如此一來,即使未來 DBUtils 改版更新,也無須更動舊有程式

下載相關原始碼

java.sql.Date v.s. java.sql.Timestamp in Oracle 9i

我們都知道 JDBC 中 java.sql.Date 與 java.sql.Timestamp 的差異在於java.sql.Date 是不包含時間的部分

而最近在工作上碰到一個問題…
程式使用

Oracle 9i JDBC thin driver
Jakarta commons DBCP
Jakarta commons DBUtils

等元件進行資料庫的存取..
而使用的資料庫版本為 Oracle9i Enterprise Edition Release 9.2.0.7.0 – 64bit Production

如果撈取 Oracle 資料型態為 DATE 的欄位時,我希望撈出例如 2007/01/24 13:14: 20格式的資料(用 sqlplus 撈出來是有 時間 部分的)
但抓到的資料卻只有 2007/01/24 ,也就是說 時間 的部分不見了

查了很久的問題,加上股溝大神的協助,終於發現原因…
可以參考這個網址

http://www.oracle.com/technology/tech/java/sqlj_jdbc/htdocs/jdbc_faq.htm#08_01

What is going on with DATE and TIMESTAMP?

原來 Oracle 在 9.2 版以前,資料庫資料型態只有 DATE (含有日期與時間),
而 JDBC 9.2 版以前的 drvier 查完資料 mapping 回來會是 java.sql.Timestamp,所以查出來的資料會是包含日期與時間的值

但 Oracle 9.2 後,資料庫資料型態除了 DATE ,還新增了 TIMESTAMP 型態
如果 table schema 建立時使用 DATE 型態建立 (雖然是 DATE , 但是實際上日期時間也都會保留在欄位裡, 用 sqlplus 可以驗證)
但 9.2 版以後的 jdbc driver 查完資料 DATE 型態 mapping 回來會是 java.sql.Date, 而不是 java.sql.Timestamp
所以自然程式取出來的時間部分就不見了

除非 table schema 建立時,欄位型態就是 TIMESTAMP,那麼 jdbc driver 就會幫你轉回 java.sql.Timestamp
但這種情形太少了,原有的 table 我們大部分都是用 DATE 去建立欄位的…

在上述網址中提到四個解法中,

1. 建議我們建立 table 時就要使用 TIMESTAMP,這是最標準的作法
但這不可能,因為目前 table 已經建立了
因此以後如要建立新的 Table , 時間欄位型態請記得改用 TIMESTAMP.

2. 與 3 在如果搭配 DBCP 與 DBUtils 元件的情況下,我們也無法介入調整 (因為根本碰不到 JDBC ResultSet)

4. 方式最簡單,定義一個系統變數 -Doracle.jdbc.V8Compatibility=”true” 即可,看來最快也最簡單,但經我測試的結果,撈出來的資料值會是類似下面降子

2007/01/24 00:00: 00

也就是說,雖然時間的部分出現了,但是值還是 00:00:00 ,所以還是沒用

最後我直接把 JDBC Driver downgrade 到 8.1.7 版,雖然使用舊版,但 DATE 型態就會正確的轉回 java.sql.Timestamp

ps. 需注意的是用 8.1.7 的 jdbc driver 來連 Oracle 9i , Oracle 官方說法是必須需上一個 patch 後才不會有問題
雖然我沒上 patch 也是正常…@@

ROME: RSS/ATOM Java Utilities.

昨天用 RSS4j 替相簿產生了 RSS Feed 後,再仔細研究下去才發現 RSS4j 目前只支援 RSS 0.90/0.91/1.0,
並不支援最新的 RSS 2.0 與 Google 的ATOM 0.3/1.0,於是又找了另一個 RSS java library : ROME

ROME 目前支援的 RSS 版本相當齊全,列舉如下:

RSS 0.90, RSS 0.91 Netscape, RSS 0.91 Userland, RSS 0.92, RSS 0.93, RSS 0.94, RSS 1.0, RSS 2.0, Atom 0.3, and Atom 1.0

所以用 ROME 來製作各種格式的 RSS Feed 當然不是問題,甚至可以用來做各種格式間的轉換,功能相當強大。
於是我就利用 ROME 的 API ,稍微包裝一下後,弄了一個簡單使用 ROME 的類別 broso.rss.ROMERSSGenerator

包裝起來以後,用法比昨天的 RSS4j 就更簡單了
把昨天的範例程式用 ROMERSSGenerator 修改一下..

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
`

    String photo_root = this.getServletContext().getRealPath("/");
String rss1_file = photo_root + File.separator + "rss1.xml";
String rss2_file = photo_root + File.separator + "rss2.xml";
String atom03_file = photo_root + File.separator + "atom03.xml";
String atom10_file = photo_root + File.separator + "atom10.xml";

// 產生 RSS XML Document
SimpleDateFormat dateParser = new SimpleDateFormat("yyyy/MM/dd");

ROMERSSGenerator rssGenerator = new ROMERSSGenerator();
rssGenerator.setRSS1(rss1_file); // 設定寫出 RSS 1.0 格式
rssGenerator.setRSS2(rss2_file); // 設定寫出 RSS 2.0 格式
rssGenerator.setATOM03(atom03_file); // 設定寫出 ATOM 0.3 格式
rssGenerator.setATOM10(atom10_file); // 設定寫出 ATOM 1.0 格式

// 產生相簿這個 Channel
rssGenerator.setFeedTitle("我的相簿");
rssGenerator.setFeedLink("http://broso.twbbs.org/photo");
rssGenerator.setFeedDescription("隨想意誌 我的相簿");


for (int i=0;i<photo_album.size();i++) {
....
....
// 將每個相簿加入 RSS 中
String link = "http://broso.twbbs.org/photo/"+DirName;
rssGenerator.addEntry(Title,link,dateParser.parse( Date),"text/html");
}

// 產生 RSS XML
rssGenerator.writeFeed();

需注意的是 ROME 需使用 J2SE 1.4 與 JDOM 1.0

下載
ROMERSSGenerator,
ROME,
JDOM 1.0

相簿即日起提供 RSS 訂閱服務

最近想幫相簿製作 RSS Feed,研究了一下,找到一個 java 的 Open Source RSS4j
提供 RSS 製作與剖析,參考作者的 Sample Code,很快地就整合到相簿的管理介面裡了。以後每次 Publish 一個相簿,RSS 都會自動更新了。

簡單說明一下如何利用 RSS4j 來製作 RSS

1.先去下載 RSS4j 回來,解開後把 rss4j.jar 放到 WEB-INF/lib 下面。
2.再到 Apache Xerces 下載最新的 xerces2-j ,解開後將裡面的 jar 檔都一併放到 WEB-INF/lib 下面。
3.剩下的就是寫 code 整合到相簿的管理介面中了。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
`

    String photo_root = this.getServletContext().getRealPath("/");
String rss_file = photo_root + File.separator + "rss.xml";

// 產生 RSS XML Document
RssDocument doc = new RssDocument();
doc.setVersion(RssDocument.VERSION_10);

// 產生相簿這個 Channel
RssChannel channel = new RssChannel();
channel.setChannelTitle("我的相簿");
channel.setChannelLink("http://broso.twbbs.org/photo");
channel.setChannelDescription("隨想意誌 我的相簿");
channel.setChannelUri("http://broso.twbbs.org/photo");
doc.addChannel(channel);


for (int i=0;i<photo_album.size();i++) {
....
....
// 將每個相簿加入 RSS 中
RssChannelItem item1 = new RssChannelItem();
item1.setItemTitle(Title);
item1.setItemLink("http://broso.twbbs.org/photo/"+DirName);
item1.setItemDescription( Date);
channel.addItem(item1);
}

// 產生 RSS XML
File file = new File(rss_file);
try {
RssGenerator.generateRss(doc, file);
System.out.println("RSS file written.");
} catch (RssGenerationException e) {
System.out.println(e.getMessage());
e.printStackTrace();
out.println(e.getMessage());
return;
} catch (Exception e) {
System.out.println(e.getMessage());
e.printStackTrace();
out.println(e.getMessage());
return;
}

4.搞定!!

EF 24-105mm F4L IS USM

這次的香港行在出發前就已經做好功課,在香港買鏡頭帶回來台灣,如果要台灣的代理商彩虹先進同樣保固,那麼一定得買香港 Canon 的行貨,
那麼自然就有國際保單,同時必須跟購買的商家索取購買時的發票,不然彩虹是不會收的。所以這次在香港買的時候就特別注意了這點。

在旺角通菜街的萬成測完了鏡頭,覺得沒什麼問題以後,就爽快的敗家下去了。本來國際保單上還差點忘了請萬成蓋上店章,還好回飯店以後就
發現這個問題,第三天趕緊抽空回旺角一趟補蓋店章。

Canon 國際保單
Canon 國際保單

萬成發票
萬成發票

在香港行的後兩天中一直是使用這支鏡頭來做拍攝,這兩天下來的心得只能說有了 IS 還真是好用,這顆鏡頭 IS 機構依據 Canon 的官方說法是
可降低快門達三級之多,再加上 5D 高 ISO 的可用性,於是在室內或是夜晚想要手持拍攝就也不再是件不可能的任務。

昨天原本要趁下台中聽優客李林的演唱會時,順道一遊東海大學,無奈出發時間太晚了,以致於無多餘時間去東海大學,只有在回程時在清水服務區
拍了幾張,順便測試看看 高 ISO + IS 防手振的能耐。

出發前在家裡拍的,銳利度很不錯
85mm,F4,1/60s,ISO400,外閃

85mm,F4,1/60s,ISO400,外閃

92mm,F4,1/60s,ISO400,外閃

92mm,F4,1/60s,ISO400,外閃

深夜12點的清水服務區
深夜12點的清水服務區

1/4 仍可拍出清晰的照片
1/4 仍可拍出清晰的照片

快門 0.6s ,已經稍嫌晃動了
快門 0.6s ,已經稍嫌晃動了

加了外閃,快門拉高至 1/60s,所以背景曝光不足
加了外閃,快門拉高至 1/60s,所以背景曝光不足

改用光圈優先模式加外閃補亮主體,不過曝光一秒就真的手振了
改用光圈優先模式加外閃補亮主體,不過曝光一秒就真的手振了

換個場景,同樣用光圈優先模式加外閃,這次快門 1/4 秒,IS 的好用就看的出來了
換個場景,同樣用光圈優先模式加外閃,這次快門 1/4 秒,IS 的好用就看的出來了

45mm,F4,1/60s,ISO1600,外閃,P 模式
45mm,F4,1/60s,ISO1600,外閃,P 模式

45mm,F8,1/3s,ISO1600,外閃,Av 模式
45mm,F8,1/3s,ISO1600,外閃,Av 模式

45mm,F8,0.4s,ISO1600,外閃,Av 模式
45mm,F8,0.4s,ISO1600,外閃,Av 模式