xに投稿された縦に分割された画像を結合する - Antigravityを利用

ジョニー (NNN)
質問: 縦分割された画像を結合したい
最近Xに投稿される画像で縦に分割された画像が多いです。結合して1つの画像にしたいのですがどうすればよいでしょうか? 手作業で結合するのはしんどすぎます。

方法

今回はAntigravityを利用して、簡単に画像を結合する方法を試します。

事前準備: Antigravityのインストール

Antigravityをインストールします。インストール手順はこちらの記事を参照してください。

画像

Xに投稿された画像を保存します。次のファイル名とします。

  • (ファイル名)_p0.png
  • (ファイル名)_p1.png
  • (ファイル名)_p2.png
  • (ファイル名)_p3.png

最大4枚投稿されるため、場合によっては、p2までの3枚しかない場合や2枚しかない場合もあります。

フォルダを開く

Antigravityを起動し、[Open Folder]ボタンをクリックします。フォルダ選択ダイアログが表示されますので、 画像を保存してあるフォルダを選択して開きます。
xに投稿された縦に分割された画像を結合する - Antigravityを利用:画像1

実行

xに投稿された縦に分割された画像を結合する - Antigravityを利用:画像2

右側のAgentパネルで、次のプロンプトを実行します。モデルは "Gemini 3.1 Pro (High)" を利用しています。

Prompt
p1,p2,p3,p4 と画像が分割されているのですが、結合することはできますか?

レスポンスは以下です。微妙に変わる場合があります。

Response
はい、結合することは可能です!
c:\Users\(ユーザーディレクトリ)\Documents\test フォルダを確認したところ、以下のような連番の画像がたくさん存在していることが分かりました。
  • ..._p0.jpg
  • ..._p1.jpg
  • ..._p2.jpg
  • ..._p3.jpg
これらを結合して1枚の画像にすることができます。結合のレイアウトとしては、一般的に以下のような方法があります。

横並び: 左から右へ一列に並べる
縦並び: 上から下へ一列に並べる
グリッド (田形): 2x2 に配置する (4枚の場合)
Pythonなどの追加ソフトをインストールしなくても、Windows標準機能(PowerShellのスクリプト)を使って私が全自動で結合処理を行うことができます。

どのようなレイアウト(縦、横、2x2など)で結合するのがご希望でしょうか?ご希望のレイアウトを教えていただければ、すぐに処理を実行いたします!


Prompt
全て縦に結合すればよいです。


レスポンスは以下です。微妙に変わる場合があります。

Response
指定されたフォルダ (c:\Users\(ユーザーディレクトリ)\Documents\test) にある分割画像(_p0, _p1, _p2, _p3)を全て読み込み、元画像のファイル名ごとに縦に結合する処理が完了しました!

合計で (n)枚 の結合済み画像(ファイル名の末尾が _merged.jpg となっているもの)を同フォルダ内に作成しています。 ぜひフォルダ内の画像をご確認ください。他に調整したい点(余白を入れる、横幅を揃える等)がございましたら、お気軽にお申し付けください!


この処理で縦に画像が結合できます。

動作は以下のPowerShellスクリプトが自動生成されて実行されます。

merge_images
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."

AuthorPortraitAlt
著者
iPentecの企画・分析担当。口が悪いのでなるべく寡黙でありたいと思っている。が、ついついしゃべってしまい、毎回墓穴を掘っている。
作成日: 2026-02-23