小時候玩過一種卡片,拿在手上,角度改變,圖案也跟著改變,兩個圖案變來變去的,滿好玩的。後來兩個圖案設計成像動畫一般,例如:一隻奔馳的馬。有的卡片則是會讓圖案變成立體的。查了一下,原來這叫作「雙變卡」,甚至有「三變卡」,英文則是「3D Lenticular Card」。關鍵一是在圖案前的那片薄薄的透明「光柵」,其二則是不同圖案被拆成一條條後交替重組成新的圖案。「一條條」的圖案在卡片轉至某個角度經過光柵折射後,又重組成原來的圖案,讓我們看到;其它的圖形也因為折射角的關係,而無法在我們的眼睛呈現。
知道原理以後,可不可以自己來做一個雙變卡呢?用「homemade Lenticular Card」的關鍵字去搜尋,真的有耶!有人寫了程式,可以把兩張圖片「一條條」重組,並輸出圖檔。我們只要把圖檔列印以後,再動手摺一摺,就是一個「雙變圖」了。
看了前面手動摺紙的方法,激發了我寫支模型產生器,利用 3D printer 來印一個「雙變卡」的想法。
產生器主要的程序很簡單:
- 將兩張圖片裁成一條條大小相同的圖案。
- 產生正三角柱。
- 將兩張圖片相同位置的部份,貼在三角柱的共邊的兩側
- 重覆前兩部份,直到所有小圖片都貼完。
這種有重覆動作的工作,當然是利用程式來做最方便。這次選用的開發工具是:
- OpenSCAD ( http://www.openscad.org/ )
LenticularCard 專案
完成的專案放在 GitHub 中:
使用方法
準備工作
- 安裝 OpenSCAD
- 下載 LenticularCard 專案檔案
裁切圖片
專案需使用到兩張不同的圖片,為了減少產生 3D 模型等候的時間,程式預設是用使 100*100 (長度單位:像素)。然後每一張圖片再每隔 10 像素,裁切成「一條」(10x100),單獨儲存十個檔案。
圖片縮小還好,只要處理二次,但是依位置裁切成十個檔案,如果手動來做,手可就酸了!哈哈哈~其實我也是做過這樣的傻事才深有所感。
手酸了才讓我想起以前在教電腦,為了做學生作品的網站,利用一個叫 ImageMagick 的工具,來批次轉換圖片大小:
它的好處是可以跨平臺使用,當初可是在 FreeBSD 的主機上執行的呢!
經過那麼多年的發展,它的功能似乎更強大了。不過這次是想拿它來將一張圖,裁切成「十條」,並另存檔案。
例如圖形的檔案名稱為 picture1.png ,原始大小為 100x100,要切成 10x100 的小檔案,可以利用magick 「convert」的「-crop」:
magick convert -crop 10x100+0+0 picture-1.png parts-1-0.png
-crop 後面的「10x100」是指定要裁成的大小, 緊接著的「 +0+0」則是指定由左(X)算起第 0 點,由上(Y)算起第 0 點當起點開始算。「parts-1-0.png」則是要輸出的檔案名稱。
所以前面的例子可以幫我們輸出「第一條」圖案。
那「第二條」呢?
magick convert -crop 10x100+10+0 picture-1.png parts-1-1.png
「第二條」的大小仍是 10x100 ,是由左 10,上 0 起算(+10+0)。
其它的就由此類推囉!
我是這樣一行行打指令的嗎?哈哈哈!這次當然沒這麼老實了。如果是在 Windows ,可以利用 DOS 的 FOR 來幫我們完成「改數字」的部份:
for /L %a in (0,10,90) do (magick convert -crop 10x100+%a+0 picture-1.png parts-1-%a.png )
for /L %a in (0,10,90) do (magick convert -crop 10x100+%a+0 picture-2.png parts-1-%a.png )
更新記錄
- 2020.09.15
* 修正圖片比例的臭蟲。
* 加了一個檔名序號(filename_numbers)的自動產程序,將序號改成每一小張圖切割的位置,方便搭配批次切割的檔名。
* 專案中加入一個 dos 的批次檔(magick_batch_crop.bat),可搭配 ImageMagick 使用,執行時只要在批次檔命令加上兩個圖檔的檔名,即可按預設值切出 X 座標每次增加 10 個點的檔案。需要自動縮放大小,則再加上第三個參數「resize」,需要依 Y 座標來切成橫條,則加上「Y」。 - 2020.09.14 於 GitHub 建立新專案
- 2020.09.07 發想完成初版
沒有留言:
張貼留言