PowerShellで画像にウォーターマークを入れる

写真などの無断流用を防ぐためにロゴや著作権表記のウォーターマークを入れたいときに、簡単に出来るアプリやオンラインサービスも色々ある。けど、GUIを操作して毎回同じ処理をするのも面倒とか、大量にウォーターマークを入れたい画像がある場合には、コマンドラインで処理できた方が都合がいいので、PowerShellでサンプルを作ってみた。処理内容は単に元画像(src.png)にウォーターマーク画像(logo.png)を合成して新しい画像(dst.png)を作成するだけ。ウォーターマークを入れる場所はDrawImageの部分の座標を変えれば自由にどの場所でも入れられる。
$SrcBmp = New-Object System.Drawing.Bitmap("src.png")
$LogoBmp = New-Object System.Drawing.Bitmap("logo.png")

$DstBmp = New-Object System.Drawing.Bitmap($SrcBmp.Width, $SrcBmp.Height)
$DstImg = [System.Drawing.Graphics]::FromImage($DstBmp)

$DstImg.DrawImage($SrcBmp, 0, 0, $SrcBmp.Width, $SrcBmp.Height)
# ウォーターマークを左上に入れる
$DstImg.DrawImage($LogoBmp, 0, 0, $LogoBmp.Width, $LogoBmp.Height)
# ウォーターマークを左下に入れる
# $DstImg.DrawImage($LogoBmp, 0, $SrcBmp.Height - $LogoBmp.Height, $LogoBmp.Width, $LogoBmp.Height)
# ウォーターマークを右上に入れる
# $DstImg.DrawImage($LogoBmp, $SrcBmp.Width - $LogoBmp.Width, 0, $LogoBmp.Width, $LogoBmp.Height)
# ウォーターマークを右下に入れる
# $DstImg.DrawImage($LogoBmp, $SrcBmp.Width - $LogoBmp.Width, $SrcBmp.Height - $LogoBmp.Height, $LogoBmp.Width, $LogoBmp.Height)
# ウォーターマークを中央に入れる
# $DstImg.DrawImage($LogoBmp, [Int](($SrcBmp.Width - $LogoBmp.Width) / 2), [Int](($SrcBmp.Height - $LogoBmp.Height) / 2), $LogoBmp.Width, $LogoBmp.Height)

# PNGで保存
$DstBmp.Save("dst.png", [System.Drawing.Imaging.ImageFormat]::Png)
# BMPで保存
# $DstBmp.Save("dst.bmp", [System.Drawing.Imaging.ImageFormat]::Bmp)
# JPEGで保存
# $DstBmp.Save("dst.jpg", [System.Drawing.Imaging.ImageFormat]::Jpeg)
# TIFFで保存
# $DstBmp.Save("dst.tif", [System.Drawing.Imaging.ImageFormat]::Tiff)

$SrcBmp.Dispose()
$LogoBmp.Dispose()
$DstBmp.Dispose()
src
元画像(src.png)と
logo
ウォーターマーク画像(logo.png)を
dst
合成して新しい画像(dst.png)に保存する
    この記事で書かれている製品やソフトについて
  • Windows10 Pro 64ビット
  • PowerShell 5.1.14393.206