imageUtility

画像処理プログラム「imageUtility」のスクリプトや備忘録を公開しています。

サンプル - ロゴ画像を合成する

概要

imageUtility」を利用した「Lua」による画像合成処理のサンプルです。
指定フォルダ以下のjpg, png画像全てにロゴ画像を合成します。

ロゴ画像やフォルダがなかった場合等のエラー処理はしていません。

更新情報

2013-03-17
ロゴの配置場所を選択する設定を追加
2013-02-13
拡張子が大文字だった場合を考慮していなかったのを修正
トリムが実行されないバグを修正

コード

-- # サンプルスクリプト
-- 指定フォルダ以下のjpg, png画像全てにロゴ画像を合成します
 
-- ## 設定
-- 合成するロゴ画像
local inputImage = "D:\\data\\logo\\logo.png"
-- ロゴ画像の配置場所(1: 左上 | 2: 右上 | 3: 右下 | 4: 左下)
local direction = 1
-- ロゴ画像の配置場所からの位置(posX: 正なら右, posY: 正なら下)
local posX, posY = 10, 20
-- 合成したい画像のあるフォルダ
local inputDir = "D:\\data\\input"
-- 合成した画像を出力するフォルダ
local outputDir = "D:\\data\\output"
-- 透明部分をトリム(0: しない | 1: する)
local isTrim = 1
-- jpgの圧縮率
local compressJpgLevel = 75
-- pngの圧縮率
local compressPngLevel = 1
 
-- ## 処理
-- ロゴ画像を読み込む
loadImage(0, inputImage)
local logoWidth, logoHeight = getSizeImage(0) -- ロゴ画像の横、縦サイズ
-- ロゴ画像の合成位置算出用の値
local signX = {0, 1, 1, 0} -- 左上、右上、右下、左下
local signY = {0, 0, 1, 1} -- 左上、右上、右下、左下
local directionX = signX[direction]
local directionY = signY[direction]
 
-- ループ内の変数宣言
local BLEND_ALPHA = 1 -- ブレンド方法(アルファブレンド)
local lower = string.lower -- 文字列を小文字にする関数
local sub = string.sub -- 文字列を切り出す関数
local extension, lowerExtension
local blendPosX, blendPosY
local extensionNum, compressLevel
local len = string.len(inputDir) + 1 -- 入力フォルダのパス長(パスの切り出しに使用)
local subDir, outputFilePath
 
-- 指定フォルダ以下のファイルを全て取得
local list = getFileList(inputDir, "*", 1)
-- 取得した画像全てに処理を実行
for i, path in pairs(list) do
    -- *.jpgか*.pngのファイルのみ処理を行う
    extension = getExtensionName(path) -- 取得画像の拡張子
    lowerExtension = lower(extension)
    if lowerExtension == ".jpg" or lowerExtension == ".png" then
        -- 取得画像の読み込み
        loadImage(1, path)
        -- ロゴ画像の合成位置を取得
        blendPosX = posX + directionX * (getWidthImage(1) - logoWidth)
        blendPosY = posY + directionY * (getHeightImage(1) - logoHeight)
        -- 画像の合成
        blendImage(1, 0, BLEND_ALPHA, blendPosX, blendPosY)
        -- 画像のトリム
        if isTrim == 1 then
            trimmingImage(1, "UDLR")
        end
 
        -- 出力する画像形式と圧縮率の取得
        if lowerExtension == ".jpg" then -- *.jpg
            extensionNum = 2
            compressLevel = compressJpgLevel
        else -- *.png
            extensionNum = 1
            compressLevel = compressPngLevel
        end
 
        -- 子フォルダのパスを取得
        subDir = getParentFolderName(sub(path, len))
        subDir = (subDir == "") and "\\" or subDir
        -- 出力ファイルのパスを作成
        outputFilePath = outputDir .. subDir .. getBaseName(path) .. extension
        -- 出力
        saveImage(1, outputFilePath, extensionNum, 0, compressLevel)
        -- 結果の表示
        print("output: " .. outputFilePath .. "\n")
    end
end

ページトップへ