0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

WindowsPowerShellで画像分割

Posted at

Windowsで写真加工をすることに。いつもはフリーソフトにお願いするのですが会社への承認が必要なためPowerShellで対応しています。ここはそのための備忘録兼スクリプト倉庫です。

###JPEG画像を縦方向で分割するスクリプト
ピクセルを分割して出た余りの幅は、各分割画像に割り振るようにしてあります。

Divide-Jpg.ps1

#カレントフォルダからJpeg情報を取得
$jpg = dir -Filter *.jpg

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

#分割数
$div = 5

$jpg | %{

# 元画像読み込み
$oldbmp = New-Object System.Drawing.Bitmap($_.FullName)

# 元画像の名前とフォルダへのパス、分割画像を入れるファルダ作成
$name = $_.BaseName
$directory = $_.DirectoryName + "\$name"
mkdir $directory -Force > $null

# 元画像を縦に分割した幅と高さと余り幅。余り幅の挿入点。分割幅合計
$width = [math]::Floor($oldbmp.Width / $div)
$height = $oldbmp.Height
$remainder = $oldbmp.Width % $div
$insert = [math]::Floor($div / ($div - $remainder))
$sumwidth = 0


1..$div | %{

# 余りピクセルを入れる分岐
if(($_ % $insert) -ne 0){$add = 1}else{$add = 0}
$newwidth = ($width + $add)

# 分割幅でトリミング
$rect = New-Object System.Drawing.Rectangle($sumwidth, 0, $newwidth, $height)
$newbmp = $oldbmp.Clone($rect, $oldbmp.PixelFormat)

# トリミング画像保存
$path = Join-Path $directory -ChildPath (($_).ToString("00") + ".jpg")
$newbmp.Save( $path, [System.Drawing.Imaging.ImageFormat]::Jpeg)

#分割幅を合計する
$sumwidth += $newwidth

}

#オブジェクト破棄
$oldbmp.Dispose()
$newbmp.Dispose()

}

###分割した画像を合成するスクリプト
上とは逆に画像を合成するものです。

Comvined-Jpg.ps1

#カレントフォルダからJpeg情報を取得
$jpg = dir -Filter *.jpg

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


# 幅と高さの合計
$SumWidth,$SumHeight = 0,0
$jpg | %{

    $bmp = New-Object System.Drawing.Bitmap($_.FullName)
    $SumWidth += $bmp.Width
    $SumHeight += $bmp.Height
    $bmp.Dispose()

    } 

# 合成先のオブジェクトを生成
$canvas = New-Object System.Drawing.Bitmap($SumWidth, ($SumHeight / $jpg.Count))

# 合成先へ描画
$graphics = [System.Drawing.Graphics]::FromImage($canvas)

$newwidth = 0

$jpg | %{

    $image = New-Object System.Drawing.Bitmap($_.FullName)

    $graphics.DrawImage($image, (New-Object System.Drawing.Rectangle($newwidth, 0, $image.Width, $image.Height)))

    $newwidth += $image.Width

}

# 保存
$path = Join-Path $jpg[0].DirectoryName -ChildPath "combined.jpg"
$canvas.Save($path, [System.Drawing.Imaging.ImageFormat]::Jpeg)

# オブジェクトの破棄
$graphics.Dispose()
$canvas.Dispose()
$image.Dispose()

##参考にさせていただいた記事

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?