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