PowerShellで画像にテキストを描画するスクリプト

コンピュータ
<#
.SYNOPSIS
 画像にテキストを描画するスクリプト

.EXAMPLE
 .\DrawText.ps1

.PARAMETER Value
 描画する文字列

.PARAMETER OutFile
 出力する画像ファイルのパス

.PARAMETER Help
ヘルプメッセージを表示。

#>
using namespace System.Drawing
using namespace System.IO


Param(
    [string]$Value,
    [string]$OutFile,
    [switch]$Help
)

# アセンブリのロード
Add-Type -AssemblyName System.Drawing



# 画像ファイルのデフォルト
if ($OutFile -eq "")
{
    $OutFile = (Join-Path (Join-Path $Home "Pictures") ((Get-Date -Format "yyyyMMddHHmmss") + ".png"))
}

$args = @($input)

if ($Help -Or ($args.Count -eq 0 -And $Value -eq ""))
{
    Get-Help $PSCommandPath
    Exit 1
}


$s = $Value -split '(.{20})' | ? {$_}
#$s.Count
#Exit

# 画像サイズ
$width = 800
$height = 600

# フォント
$fontSize = 28
$fontFamily = "Arial";
$sf = [StringFormat]::new();

# マージン
$margin = 24
$margin2 = 24

# ビットマップオブジェクトを初期化
$bmp = [Bitmap]::new($width, $height)
# グラフィックオブジェクト取得
$g = [Graphics]::FromImage($bmp)
$g.TextRenderingHint = "AntiAlias"


# フォント
$font = [Font]::new($fontFamily, $fontSize)

# ペン
$blackPen = [Pen]::new([Color]::Black, 8)
$grayPen = [Pen]::new([Color]::Black, 2)

$stringSize = $g.MeasureString($s[0], $font, $width, $sf);
$w = [int]$stringSize.Width
$h = [int]$stringSize.Height
$y = ($height - (($h + $margin) * $s.Count) ) / 2
$x = ($width - $w) / 2

$g.Clear([Color]::White)

# 枠
$BlackPen.LineJoin = [System.Drawing.Drawing2D.LineJoin]::Round; 

$rect2 = [Rectangle]::new($margin+$margin2+10, $margin+$margin2+10, $width-(($margin+$margin2)*2)-20, $height-(($margin+$margin2)*2)-20)
$g.DrawRectangle($grayPen, $rect2);
$rect = [Rectangle]::new($margin+$margin2, $margin+$margin2, $width-(($margin+$margin2)*2), $height-(($margin+$margin2)*2))
$g.DrawRectangle($blackPen, $rect);

$i = 0
$s | % {
    $yy = $y + ($h + $margin) * $i
    $g.DrawString($_, $font, [Brushes]::LightGray, $x+4, $yy+4, $sf)
    $g.DrawString($_, $font, [Brushes]::Black, $x, $yy, $sf)
    $i = $i + 1
}


# グラフィックオブジェクトを開放
$g.Dispose()
$font.Dispose()
# ビットマップを保存
$OutFile = [Path]::GetFullPath($OutFile)
$bmp.Save($OutFile, [System.Drawing.Imaging.ImageFormat]::Png)
$bmp.Dispose()

$OutFile

使用例

.\DrawText.ps1 "PowerShellで画像にテキストを描画するスクリプト" | .\ViewImage.ps1
画像の出力先を省略した場合、ピクチャフォルダにファイル名が日時のpng形式でファイルが出力されます。
ViewImage.ps1にリダイレクトするとプレビューが表示されます。
PowerShellで画像を表示する。
PowerShellで画像を扱うプログラミングをしていると、加工した画像を確認表示をしたい場合があるのでスクリプトを作成してみました。スクリプト名:ViewImage.ps1<#.SYNOPSIS画像を表示.DESCRIPTIONビットマッ...

コメント