[Part I. GIMP基礎功]

[Part II. 一種效果的誕生]
[Part III. Script-Fu的秘密]



顯示具有 第23章 異樣發光(Alien Glow) 標籤的文章。 顯示所有文章
顯示具有 第23章 異樣發光(Alien Glow) 標籤的文章。 顯示所有文章

23.1 執行Script-Fu,產生螢光字體

  • Alien Glow,在2.2版時,譯詞是「異樣發光」。
  • Logos,在2.2版時,譯詞是「標誌」。


預設值之下的螢光字體
  • 執行[影像] / 檔案 / 建立 / Logos / Alien Glow【註1】,可產生發光的字體。
  • 下圖是「Script-Fu:Alien Grow」對話盒,使用預設參數。
  • 執行後,產生「異樣發光」的標誌。

  • 「Alien Glow」發光字,如下圖所示。



發光字需要3個圖層:
  • 文字部分
  • 綠色螢光
  • 黑色背景



選單及項目名稱的英文:
【註1】[Image] / File / Create / Logos / Alien Glow

23.2 一步一步做,讓背景一片暗黑

以下,操作GIMP圖形介面,一步一步,來產生「Alien Glow」發光字。藉由這過程來體會程式碼的意思。

下圖是「Script-Fu:Alien Grow」對話盒,為了方便放在文章中,產生較小一點的解說圖,文字設為「Gimp」,字型大小設為72。



Step 1.
  • 執行[影像] / 檔案 / 新增,產生大小256x256透明底色的影像。
  • 用文字工具,(產生較小一點的文字發光效果),字型大小72,寫上Gimp,此時只有一個圖層,將此圖層更名為Gimp,讓名稱與所寫的文字相同)。此時,在透明層寫上黑色字體Gimp,如下圖所示。

  • 前面的步驟,對應的程式碼
85: (img (car (gimp-image-new 256 256 RGB)))
86: (border (/ size 4))
87: (grow (/ size 30))
88: (feather (/ size 4))
89: (text-layer (car (gimp-text-fontname img
90: -1 0 0 text border TRUE
91: size PIXELS font)))
92: (width (car (gimp-drawable-width text-layer)))
93: (height (car (gimp-drawable-height text-layer)))


Step 2.
  • 調整影像大小,將「Gimp」圖層調成適當大小。

  • 對應的程式碼
25: (script-fu-util-image-resize-from-layer img logo-layer)


Step 3.
  • 在圖層面版內,產生2個新的圖層,一個名為Background圖層,一個名為Alien Glow圖層。3個圖層由上到下的排列順序為:Gimp、Alien Glow、Background。

  • 對應的程式碼
14: (bg-layer (car (gimp-layer-new img
15: width height RGB-IMAGE
16: "Background" 100 NORMAL-MODE)))
17: (glow-layer (car (gimp-layer-new img
18: width height RGBA-IMAGE
19: "Alien Glow" 100 NORMAL-MODE)))
……………………
26: (script-fu-util-image-add-layers img glow-layer bg-layer)


Step 4.
  • 將Background圖層底色變黑色。在圖層面版內,選到「Gimp」圖層,勾選「鎖定」項目(Lock Alpha Channel)。

  • 使用顏料桶填色工具,用背景色將Background圖層,由透明變為黑色。

  • 前面的步驟,對應的程式碼
27: (gimp-layer-set-lock-alpha logo-layer TRUE)
28: (gimp-context-set-background '(0 0 0))
29: (gimp-edit-fill bg-layer BACKGROUND-FILL)

23.3 一步一步做,讓字體發出螢光

接續前一節,繼續以圖形使用者介面來完成發光字體的製作,只是步驟從新編號,從1號開始編號。


Step 1.
  • 執行[影像] / 編輯 / 清除【註1】,確定「Alien Glow」圖層目前是全透明的。
  • 在圖層面版內,點選「Gimp」圖層,啟動右鍵選單,執行「透明區域轉成選擇區域」(Alpha to Selection),將文字部份選取。此時,「Gimp」字樣出現一個被選取的虛線外框,如下圖所示。



Step 2.
  • 將前景顏色設為綠色。
  • 對「Alien Glow」圖層,執行[影像] / 選擇 / 擴張【註2】,選取區域往外增大2個像素。再執行[影像] / 選擇 / 羽化【註3】,將選取區域羽化18個像素。下圖顯示了擴張並羽化的文字選區。



Step 3.
  • 由於羽化選取區域的因素,使得字的邊緣變模糊。填色後,才會有螢光效果。將選取的區域,使用顏料桶填色工具,填上綠色。
  • 取消選取區域。此時,製造出綠色螢光的字體,如下圖所示。

    • 對應的程式碼
    30: (gimp-edit-clear glow-layer)
    31: (gimp-selection-layer-alpha logo-layer)
    32: (gimp-selection-grow img grow)
    33: (gimp-selection-feather img feather)
    34: (gimp-context-set-foreground glow-color)
    35: (gimp-edit-fill glow-layer FOREGROUND-FILL)
    36: (gimp-selection-none img)


    Step 4.
  • 大功告成,得到最終的成品圖。最後步驟為「替文字部份漸層混色」。前景色設黑色,背景色設灰色(79 79 79),使用漸層混色工具,混合模式為正常,由於勾選「鎖定」項目(Lock Alpha Channel),「Gimp」圖層的透明部份不會被上色,文字部份因為漸層填色,產生了立體的效果。
  • 下圖是,最終的成品圖,發螢光的立體字。

    • 對應的程式碼
    38: (gimp-context-set-background '(0 0 0))
    39: (gimp-context-set-foreground '(79 79 79))
    40:
    41: (gimp-edit-blend logo-layer FG-BG-RGB-MODE NORMAL-MODE
    42: GRADIENT-SHAPEBURST-ANGULAR 100 0 REPEAT-NONE FALSE
    43: FALSE 0 0 TRUE
    44: 0 0 1 1)


    選單及項目名稱的英文:
    【註1】[Image] / Edit / Clear
    【註2】[Image] / Select / Grow
    【註3】[Image] / Select / Feather

    注意!
    在2.6.7版,Feather的譯詞是「羽毛化」,之前的版本是「羽化」,我個人偏好「羽化」一詞。

    23.4 分析:明暗立體生成的原由

    分析最後一步驟(41~44行),漸層混色所產生的字體
    下圖,在影像視窗內,放大觀看「最終的成品圖」的立體效果。



    41~44 行: (gimp-edit-blend logo-layer FG-BG-RGB-MODE NORMAL-MODE GRADIENT-SHAPEBURST-ANGULAR 100 0 REPEAT-NONE FALSE FALSE 0 0 TRUE 0 0 1 1)

    下圖為漸層填色工具的選項面版。gimp-edit-blend函數所輸入的參數,相當於下圖的設定。

    23.5 分析:漸層混色工具與函數

    下圖是「Script-Fu:Alien Grow」參數輸入的對話盒,比對78~51行,可明白script-fu-register函數中參數的意思。


    下圖是gimp-edit-blend的函數說明。由Procedure Browser對話盒的資料,可推論出41~44行是什麼意思。

    23.6 程式alien-glow-logo.scm分六部份

    若要徹底瞭解alien-glow-logo.scm,可仿傚第22章的方式,單步執行,來分析每一行程式碼的作用。

    若用PSPad開啟程式檔(或任何文字編輯器),看到的Script-Fu程式碼,變數會對得很整齊。HTML會把大量的空白省略,因此程式碼的排版變成了下面這樣子。我替Script-Fu程式碼加上行號乎,方便讀者閱讀。

    程式碼分六部份:
    • 1~3行:註解,功能說明與版權聲明。
    • 4~50行:定義發光效果的函式,(define (apply-alien-glow-logo-effect … ))
    • 51~62行:定義局部發光的函式,(define (script-fu-alien-glow-logo-alpha … ))
    • 63~79行:註冊局部發光的函式,(script-fu-register "script-fu-alien-glow-logo-alpha" … )
    • 80~102行:定義發光字體的函式,(define (script-fu-alien-glow-logo text … )),使用apply-alien-glow-logo-effect函數,產生「Alien Glow」發光字。
    • 103~118行:註冊發光字體的函式,(script-fu-register "script-fu-alien-glow-logo" … )

    程式碼之中,有兩部份與「Alpha to Logo」相關的程式碼,宣告並註冊一個作用在影像的Script-Fu函數,在本章之中用不到:
    • 51~62行:定義局部發光的函式,(define (script-fu-alien-glow-logo-alpha … ))
    • 63~79行:註冊局部發光的函式,(script-fu-register "script-fu-alien-glow-logo-alpha" … )
    第1到第3行:註解說明1: ; ALIEN-GLOW
    2: ; Create a text effect that simulates an eerie alien glow around text
    3:

    第4到第50行:定義發光效果的函式4: (define (apply-alien-glow-logo-effect img
    5: logo-layer
    6: size
    7: glow-color)
    8: (let* (
    9: (border (/ size 4))
    10: (grow (/ size 30))
    11: (feather (/ size 4))
    12: (width (car (gimp-drawable-width logo-layer)))
    13: (height (car (gimp-drawable-height logo-layer)))
    14: (bg-layer (car (gimp-layer-new img
    15: width height RGB-IMAGE
    16: "Background" 100 NORMAL-MODE)))
    17: (glow-layer (car (gimp-layer-new img
    18: width height RGBA-IMAGE
    19: "Alien Glow" 100 NORMAL-MODE)))
    20: )
    21:
    22: (gimp-context-push)
    23:
    24: (gimp-selection-none img)
    25: (script-fu-util-image-resize-from-layer img logo-layer)
    26: (script-fu-util-image-add-layers img glow-layer bg-layer)
    27: (gimp-layer-set-lock-alpha logo-layer TRUE)
    28: (gimp-context-set-background '(0 0 0))
    29: (gimp-edit-fill bg-layer BACKGROUND-FILL)
    30: (gimp-edit-clear glow-layer)
    31: (gimp-selection-layer-alpha logo-layer)
    32: (gimp-selection-grow img grow)
    33: (gimp-selection-feather img feather)
    34: (gimp-context-set-foreground glow-color)
    35: (gimp-edit-fill glow-layer FOREGROUND-FILL)
    36: (gimp-selection-none img)
    37:
    38: (gimp-context-set-background '(0 0 0))
    39: (gimp-context-set-foreground '(79 79 79))
    40:
    41: (gimp-edit-blend logo-layer FG-BG-RGB-MODE NORMAL-MODE
    42: GRADIENT-SHAPEBURST-ANGULAR 100 0 REPEAT-NONE FALSE
    43: FALSE 0 0 TRUE
    44: 0 0 1 1)
    45:
    46: (gimp-context-pop)
    47: )
    48: )
    49:
    50:

    第51到第62行:定義局部發光的函式51: (define (script-fu-alien-glow-logo-alpha img
    52: logo-layer
    53: size
    54: glow-color)
    55: (begin
    56: (gimp-image-undo-group-start img)
    57: (apply-alien-glow-logo-effect img logo-layer size glow-color)
    58: (gimp-image-undo-group-end img)
    59: (gimp-displays-flush)
    60: )
    61: )
    62:

    第63到第79行:註冊局部發光的函式63: (script-fu-register "script-fu-alien-glow-logo-alpha"
    64: _"Alien _Glow..."
    65: _"Add an eerie glow around the selected region (or alpha)"
    66: "Spencer Kimball"
    67: "Spencer Kimball"
    68: "1997"
    69: "RGBA"
    70: SF-IMAGE "Image" 0
    71: SF-DRAWABLE "Drawable" 0
    72: SF-ADJUSTMENT _"Glow size (pixels * 4)" '(150 2 1000 1 10 0 1)
    73: SF-COLOR _"Glow color" '(63 252 0)
    74: )
    75:
    76: (script-fu-menu-register "script-fu-alien-glow-logo-alpha"
    77: "<Image>/Filters/Alpha to Logo")
    78:
    79:
    第80到第102行:定義發光字體的函式
    80: (define (script-fu-alien-glow-logo text
    81: size
    82: font
    83: glow-color)
    84: (let* (
    85: (img (car (gimp-image-new 256 256 RGB)))
    86: (border (/ size 4))
    87: (grow (/ size 30))
    88: (feather (/ size 4))
    89: (text-layer (car (gimp-text-fontname img
    90: -1 0 0 text border TRUE
    91: size PIXELS font)))
    92: (width (car (gimp-drawable-width text-layer)))
    93: (height (car (gimp-drawable-height text-layer)))
    94: )
    95:
    96: (gimp-image-undo-disable img)
    97: (apply-alien-glow-logo-effect img text-layer size glow-color)
    98: (gimp-image-undo-enable img)
    99: (gimp-display-new img)
    100: )
    101: )
    102:

    第103到第118行:註冊發光字體的函式
    103: (script-fu-register "script-fu-alien-glow-logo"
    104: _"Alien _Glow..."
    105: _"Create a logo with an alien glow around the text"
    106: "Spencer Kimball"
    107: "Spencer Kimball"
    108: "1997"
    109: ""
    110: SF-STRING _"Text" "ALIEN"
    111: SF-ADJUSTMENT _"Font size (pixels)" '(150 2 1000 1 10 0 1)
    112: SF-FONT _"Font" "Sans Bold"
    113: SF-COLOR _"Glow color" '(63 252 0)
    114: )
    115:
    116: (script-fu-menu-register "script-fu-alien-glow-logo"
    117: "<Image>/File/Create/Logos")
    118:

    23.7 螢光字,修改成可「單行」執行的 Script-Fu

    三種單步執行程式的方式
    • 第一種方式:只修改註冊於PDB內的函數名稱
    • 第二種方式:修改成在 Console 內可一行一行執行的 Scheme 程式碼
    • 第三種方式:修改成在 Console 內可一行一行執行的 Python 程式碼

    • 本節介紹「第二種方式」。
    • alien-glow-logo.scm 完整的程式碼可參考 23.5 節。
    • 也可到 GIMP 系統的 scripts 目錄下找到該檔案。
    • 最主要修改的部份是,將「對話框接收輸入變數值」修改成「直接指定輸入變數值」。
    • 先要瞭解,alien-glow-logo.scm 程式碼的執行流程。


    直接指定輸入變數值
    • 修改成最多的地方就是下列這兩大段。
    • 修改後的程式碼,不再需要預先定義函數 script-fu-newsprint-text ,但是要預先設定變數名稱、變數值 。

    (define (script-fu-alien-glow-logo text
    size
    font
    glow-color)
    (let* (
    (img ......)
    (border .....)
    (grow .....)
    (feather .....)
    (text-layer .....)
    (width .....)
    (height .....)
    )


    (define (apply-alien-glow-logo-effect img
    logo-layer
    size
    glow-color)
    (let* (
    (border ......)
    (grow ......)
    (feather ......)
    (width ......)
    (height ......)
    (bg-layer ......)
    )


    • 從下列的程式碼得知變數值的型態與大小 。
    SF-STRING _"Text" "ALIEN"
    SF-ADJUSTMENT _"Font size (pixels)" '(150 2 1000 1 10 0 1)
    SF-FONT _"Font" "Sans Bold"
    SF-COLOR _"Glow color" '(63 252 0)



    修改後的程式碼,與測試的結果圖
    • 下面是修改後的程式碼。
    • 啟動 GIMP Script-fu Console
    • 將下面的 Scheme 程式碼,全部選取、複製、再貼入 Script-fu Console 文字框,按下 Enter 。
    • 過一會,就會看到結果圖。


    (define text "ALIEN")
    (define size 150)
    (define font "Sans Bold")
    (define glow-color '(63 252 0))
    
    (define img (car (gimp-image-new 256 256 RGB)))
    
    ;(gimp-display-new img)
    ;也可在此處就顯示出 img 物件
    ;也就是新增影像視窗並顯示出目前的圖案
    
    (define border (/ size 4))
    (define grow (/ size 30))
    (define feather (/ size 4))
    (define text-layer (car (gimp-text-fontname img -1 0 0 text border TRUE size PIXELS font)))
    (define width (car (gimp-drawable-width text-layer)))
    (define height (car (gimp-drawable-height text-layer)))
    
    (define logo-layer text-layer)
    
    ;(define border (/ size 4)) ;這 5 行重複前面的變數定義
    ;(define grow (/ size 30)) ; 因此將這 5 行起來起來註解起來
    ;(define feather (/ size 4))
    ;(define width (car (gimp-drawable-width logo-layer)))
    ;(define height (car (gimp-drawable-height logo-layer)))
    (define bg-layer (car (gimp-layer-new img width height RGB-IMAGE "Background" 100 NORMAL-MODE)))
    (define glow-layer (car (gimp-layer-new img width height RGBA-IMAGE "Alien Glow" 100 NORMAL-MODE)))
    
    (gimp-image-undo-disable img) ; 關閉復原的功能
    
    ;
    ;
    ;接下來一大串程式碼相當於
    ;(apply-alien-glow-logo-effect ...)
    ;
    (gimp-context-push)
    
    (gimp-selection-none img)
    (script-fu-util-image-resize-from-layer img logo-layer)
    (script-fu-util-image-add-layers img glow-layer bg-layer)
    (gimp-layer-set-lock-alpha logo-layer TRUE)
    (gimp-context-set-background '(0 0 0))
    (gimp-edit-fill bg-layer BACKGROUND-FILL)
    (gimp-edit-clear glow-layer)
    (gimp-selection-layer-alpha logo-layer)
    (gimp-selection-grow img grow)
    (gimp-selection-feather img feather)
    (gimp-context-set-foreground glow-color)
    (gimp-edit-fill glow-layer FOREGROUND-FILL)
    (gimp-selection-none img)
    
    (gimp-context-set-background '(0 0 0))
    (gimp-context-set-foreground '(79 79 79))
    
    (gimp-edit-blend logo-layer FG-BG-RGB-MODE NORMAL-MODE
          GRADIENT-SHAPEBURST-ANGULAR 100 0 REPEAT-NONE FALSE
          FALSE 0 0 TRUE
          0 0 1 1)
    
    (gimp-context-pop)
    ;
    ;以上相當於(apply-alien-glow-logo-effect ...)
    ;
    ;
    
    (gimp-image-undo-enable img) ; 重新啟動復原的功能
    
    (gimp-display-new img);這一行也可以移到 img 物件生成時就執行

    23.8 螢光字,修改成可「單行」執行的 Python-Fu

    修改後的程式碼,與測試的結果圖
    • 啟動 GIMP Python Console
    • 將上面的程式碼,全部選取、複製、再貼到 Python Console 提示符號 >>> 之後,按下 Enter 。
    • 過一會,就會看到結果圖。


    text = "ALIEN"
    size = 150
    font = "Sans Bold"
    glow_color = (63, 252, 0)
    
    text_ext = pdb.gimp_text_get_extents_fontname(text, size, PIXELS, font)
    width = text_ext[0] + 80
    height = text_ext[1] + 80
    
    #img = pdb.gimp_image_new(256, 256, RGB)
    img = pdb.gimp_image_new(width, height, RGB)
    #pdb.gimp_display_new(img)
    #也可在此處就顯示出 img 物件
    #也就是新增影像視窗並顯示出目前的圖案
    
    border = size / 4
    grow = size / 30
    feather = size / 4
    
    #
    # pdb.gimp_text_fontname(img, -1, ...) -1 會出錯
    # text_layer = pdb.gimp_text_fontname(img, -1, 0, 0, text, border, TRUE, size, PIXELS, font)
    #
    text_layer = pdb.gimp_layer_new(img, width, height, RGBA_IMAGE, "text layer", 100, NORMAL_MODE)
    pdb.gimp_image_add_layer(img, text_layer, -1)
    tmp_layer = pdb.gimp_text_fontname(img, text_layer, 0, 0, text, border, TRUE, size, PIXELS, font)
    
    
    #width = pdb.gimp_drawable_width(tmp_layer)
    #height = pdb.gimp_drawable_height(tmp_layer)
    
    
    
    pdb.gimp_floating_sel_anchor(tmp_layer)
    
    logo_layer = text_layer
    
    bg_layer = pdb.gimp_layer_new(img, width, height, RGB_IMAGE, "Background", 100, NORMAL_MODE)
    glow_layer = pdb.gimp_layer_new(img, width, height, RGBA_IMAGE, "Alien Glow", 100, NORMAL_MODE)
    
    pdb.gimp_image_undo_disable(img) #關閉復原的功能
    
    #
    #接下來一大串程式碼相當於,
    #apply_alien_glow_logo_effect
    #
    pdb.gimp_context_push()
    
    pdb.gimp_selection_none(img)
    
    #pdb.script_fu_util_image_resize_from_layer(img,logo_layer)
    #pdb.script_fu_util_image_add_layers(img, glow_layer, bg_layer)
    
    pdb.gimp_image_resize_to_layers(img)
    
    pdb.gimp_image_add_layer(img, glow_layer, 1)
    pdb.gimp_image_add_layer(img, bg_layer, 2)
    
    pdb.gimp_layer_set_lock_alpha(logo_layer, TRUE)
    
    #pdb.gimp_context_set_background(0, 0, 0)
    color = (0, 0, 0)
    pdb.gimp_context_set_background(color)
    pdb.gimp_edit_fill(bg_layer, BACKGROUND_FILL)
    pdb.gimp_edit_clear(glow_layer)
    pdb.gimp_selection_layer_alpha(logo_layer)
    pdb.gimp_selection_grow(img, grow)
    pdb.gimp_selection_feather(img, feather)
    pdb.gimp_context_set_foreground(glow_color)
    pdb.gimp_edit_fill(glow_layer, FOREGROUND_FILL)
    pdb.gimp_selection_none(img)
    
    #pdb.gimp_context_set_background(0, 0, 0)
    color = (0, 0, 0)
    pdb.gimp_context_set_background(color)
    #pdb.gimp_context_set_foreground(79, 79, 79)
    color = (79, 79, 79)
    pdb.gimp_context_set_foreground(color)
    
    pdb.gimp_edit_blend(logo_layer, FG_BG_RGB_MODE, NORMAL_MODE, GRADIENT_SHAPEBURST_ANGULAR, 100, 0, REPEAT_NONE, FALSE, FALSE, 0, 0, TRUE, 0, 0, 1, 1)
    
    pdb.gimp_context_pop()
    #
    #以上相當於(apply_alien_glow_logo_effect, ...)
    #
    #
    pdb.gimp_image_undo_enable(img) # 重新啟動復原的功能
    pdb.gimp_display_new(img)#這一行也可以移到 img 物件生成時就執行

    23.9 螢光字,摸索轉碼的過程,與須注意的語法特點

    • 接續前節,使用前節更改後的 Scheme 程式碼,將它改成 Python 程式碼 。
    • 本節介紹單步執行的「第三種方式」,修改成在 Console 內可一行一行執行的 Python 程式碼 。


    善用文字編輯器「取代」的功能
    • 有些地方,可以直接手動更改。
    • 有些地方,手動更改,太累人了。
    • 有些地方,無規則可尋,就一定要手動更改,改到最後,讓程式碼完全符合 Python 的語法,並且符合 Python-Fu 的規範 。
    • 文字編輯器,都有「搜尋」與「取代」的功能,可幫助修改程式碼。
    • 例如:(define ...) 結尾的 ) 是要刪除的
      • 利用換行符號的逃脫字符 \n 就可以輕鬆刪除結尾的 )
      • 也就是,在文字編輯器「取代」功能的對話框內,將 )\n 取代為 \n


    語法的差別:
    • 和大多數程式語言一樣,Python 使用等號 = 來指派變數值。
    • Python 的變數不需事先宣告或定義,直接就可以指定變數值。
    • Scheme 使用(define ...) 指定變數值。
    • 因此,(define 取代為 空字串,也就是,刪除 (define 。


    語法的差別:
    • 加減乘除,Python 採用中序運算式(infix)。
    • Scheme 前序運算式(prefix),也就是,把 + - * / 視為一種函數。


    語法的差別:函數的呼叫
    • Scheme 函數的參數值用「空白」隔開。
    • Python 函數的參數值用一個括號()括住,中間用逗點「, 」隔開,因此,
    • 將「空白」取代為 "逗點加空白"「, 」

    • Scheme 的 car 函數會取出串列的第一個元素 。
    • car 函數的使用都常伴隨變數值指派的動作,因此,
    • 將 (car 取代為 等號 =
    • 將 (gimp 取代為 pdb.gimp
    • 將 減號 - 取代為 _ 底線
      • gimp-edit-fill 改成 pdb.gimp_edit_fill
      • bg-layer 改成 bg_layer
      • BACKGROUND-FILL 改成 BACKGROUND_FILL


    • 將 分號 ; 取代為 # 井號


    語法的差別: RGB 顏色的指定
    • Scheme是使用 list 的資料結構,使用撇號 ' 定義 list 。
    • (63, 252, 0) Python是使用 tuple 的資料結構。
    • '(63 252 0) 要更改為 (63, 252, 0)


    其它需要注意的細節
    • 大寫表示常數,記得「減號 - 」要換為「底線 _ 」,RGB-IMAGE 要換為 RGB_IMAGE 。
    • 括號多一個,括號少一個,括號沒對齊,是最大的陷阱,也是容易犯的錯誤。