アイキャッチ画像を作成が目的。以前にC#でも作成しましたが修正がしやすいスクリプトで作り直してみました。
スクリプト名:DrawText.ps1
C#で画像にテキストを描画するプログラム
DrawStringメソッドを使ってビットマップにテキストを描画してみます。ソースファイル名:icatchgen.csusing System;using System.Drawing;/**<summary>画像にテキストを描画するプログ...
スクリプト名:DrawText.ps1
<#
.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にリダイレクトするとプレビューが表示されます。
ViewImage.ps1にリダイレクトするとプレビューが表示されます。
PowerShellで画像を表示する。
PowerShellで画像を扱うプログラミングをしていると、加工した画像を確認表示をしたい場合があるのでスクリプトを作成してみました。スクリプト名:ViewImage.ps1<#.SYNOPSIS画像を表示.DESCRIPTIONビットマッ...
コメント