最近Xに投稿される画像で縦に分割された画像が多いです。結合して1つの画像にしたいのですがどうすればよいでしょうか?
手作業で結合するのはしんどすぎます。
今回はAntigravityを利用して、簡単に画像を結合する方法を試します。
Antigravityをインストールします。インストール手順はこちらの記事を参照してください。
Xに投稿された画像を保存します。次のファイル名とします。
最大4枚投稿されるため、場合によっては、p2までの3枚しかない場合や2枚しかない場合もあります。
Antigravityを起動し、[Open Folder]ボタンをクリックします。フォルダ選択ダイアログが表示されますので、
画像を保存してあるフォルダを選択して開きます。
右側のAgentパネルで、次のプロンプトを実行します。モデルは "Gemini 3.1 Pro (High)" を利用しています。
レスポンスは以下です。微妙に変わる場合があります。
レスポンスは以下です。微妙に変わる場合があります。
この処理で縦に画像が結合できます。
動作は以下のPowerShellスクリプトが自動生成されて実行されます。
Add-Type -AssemblyName System.Drawing
$dir = "c:\Users\(プロジェクトの作業ディレクトリ)"
$files = Get-ChildItem -Path $dir -Filter "*_p*.jpg"
$groups = $files | Group-Object { $_.Name -replace '_p\d+\.jpg$', '' }
$successCount = 0
foreach ($group in $groups) {
if ($group.Count -le 1) { continue }
$baseName = $group.Name
$outFile = Join-Path -Path $dir -ChildPath "$baseName`_merged.jpg"
Write-Host "Processing: $baseName..."
$sortedFiles = $group.Group | Sort-Object {
$match = [regex]::Match($_.Name, '_p(\d+)\.jpg$')
if ($match.Success) {
[int]$match.Groups[1].Value
} else {
0
}
}
$images = @()
$totalHeight = 0
$maxWidth = 0
try {
foreach ($file in $sortedFiles) {
$img = [System.Drawing.Image]::FromFile($file.FullName)
$images += $img
$totalHeight += $img.Height
if ($img.Width -gt $maxWidth) { $maxWidth = $img.Width }
}
$merged = New-Object System.Drawing.Bitmap $maxWidth, $totalHeight
$graphics = [System.Drawing.Graphics]::FromImage($merged)
$graphics.Clear([System.Drawing.Color]::White)
$y = 0
foreach ($img in $images) {
$graphics.DrawImage($img, 0, $y, $img.Width, $img.Height)
$y += $img.Height
$img.Dispose()
}
$graphics.Dispose()
$merged.Save($outFile, [System.Drawing.Imaging.ImageFormat]::Jpeg)
$merged.Dispose()
Write-Host "Saved: $outFile"
$successCount++
}
catch {
Write-Host "Error ($baseName): $_"
}
}
Write-Host "Done! Created $successCount merged images."