2020年9月14日 星期一

3DP : Lenticular Card 雙變卡產生器

2020年9月14日 星期一

 小時候玩過一種卡片,拿在手上,角度改變,圖案也跟著改變,兩個圖案變來變去的,滿好玩的。後來兩個圖案設計成像動畫一般,例如:一隻奔馳的馬。有的卡片則是會讓圖案變成立體的。查了一下,原來這叫作「雙變卡」,甚至有「三變卡」,英文則是「3D Lenticular Card」。關鍵一是在圖案前的那片薄薄的透明「光柵」,其二則是不同圖案被拆成一條條後交替重組成新的圖案。「一條條」的圖案在卡片轉至某個角度經過光柵折射後,又重組成原來的圖案,讓我們看到;其它的圖形也因為折射角的關係,而無法在我們的眼睛呈現。

知道原理以後,可不可以自己來做一個雙變卡呢?用「homemade Lenticular Card」的關鍵字去搜尋,真的有耶!有人寫了程式,可以把兩張圖片「一條條」重組,並輸出圖檔。我們只要把圖檔列印以後,再動手摺一摺,就是一個「雙變圖」了。

看了前面手動摺紙的方法,激發了我寫支模型產生器,利用 3D printer 來印一個「雙變卡」的想法。


產生器主要的程序很簡單:

  • 將兩張圖片裁成一條條大小相同的圖案。
  • 產生正三角柱。
  • 將兩張圖片相同位置的部份,貼在三角柱的共邊的兩側
  • 重覆前兩部份,直到所有小圖片都貼完。

這種有重覆動作的工作,當然是利用程式來做最方便。這次選用的開發工具是:

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 )


只要準備好兩張 100x100 的圖片,一張命名為 picture-1.png ,另一個命名為 picture-2.png ,然後執行上面的兩行指令即可一次搞定囉!(專案中加入了一個給 Windows 用的批次檔,請參考 2020.09.15 的更新記錄)

其實有了 ImageMagick  也可以順便縮小圖片尺寸、改變亮度與對比的,它的功能實在太多了,以後再另起新文介紹囉!


更新記錄

  • 2020.09.15
    * 修正圖片比例的臭蟲。
    * 加了一個檔名序號(filename_numbers)的自動產程序,將序號改成每一小張圖切割的位置,方便搭配批次切割的檔名。
    * 專案中加入一個 dos 的批次檔(magick_batch_crop.bat),可搭配 ImageMagick  使用,執行時只要在批次檔命令加上兩個圖檔的檔名,即可按預設值切出 X 座標每次增加 10 個點的檔案。需要自動縮放大小,則再加上第三個參數「resize」,需要依 Y 座標來切成橫條,則加上「Y」。
  • 2020.09.14 於 GitHub 建立新專案
  • 2020.09.07 發想完成初版

沒有留言:

張貼留言

 
雄::gsyan © 2009. Design by Pocket