ファイル名を維持しながら3×3の画像に連結し元通りのファイル名で分解する

バッチファイル

@echo off
setlocal enabledelayedexpansion

:: === 設定 ===
set "source_folder=Y:\output_folder2"
set "temp_folder=Y:\temp_tiles"
set "tile_folder=Y:\output_tiles"
set "split_folder=Y:\output_split"
set "convert_path=C:\app\ImageMagick\convert.exe"
set "montage_path=C:\app\ImageMagick\montage.exe"

:: === 初期化 ===
set "count=0"
set "group=1"
mkdir "%temp_folder%" 2>nul
mkdir "%tile_folder%" 2>nul
mkdir "%split_folder%" 2>nul

:: === 画像を9枚ずつまとめて処理 ===
for %%f in ("%source_folder%\*.png") do (
    set /a count+=1
    set "filename!count!=%%~nf"
    copy "%%f" "%temp_folder%\!count!.png" >nul
    echo %%~nf>> "%temp_folder%\names_!group!.txt"

    if !count! equ 9 (
        set "tile_name=tile_!group!.png"

        "%montage_path%" ^
            "%temp_folder%\1.png" "%temp_folder%\2.png" "%temp_folder%\3.png" ^
            "%temp_folder%\4.png" "%temp_folder%\5.png" "%temp_folder%\6.png" ^
            "%temp_folder%\7.png" "%temp_folder%\8.png" "%temp_folder%\9.png" ^
            -tile 3x3 -geometry +0+0 ^
            "%tile_folder%\!tile_name!"
echo  "%tile_folder%\!tile_name!"
timeout /t 5
pause 

        "%convert_path%" "%tile_folder%\!tile_name!" -crop 3x3@ +repage -scene 0 "%temp_folder%\split_!group!_%%d.png"

        set /a index=0
        for /f %%n in (%temp_folder%\names_!group!.txt) do (
            set "src=%temp_folder%\split_!group!_!index!.png"
            if exist "!src!" (
                move /Y "!src!" "%split_folder%\%%n.png"
            ) else (
                echo ?? ファイルが見つかりません: !src!
            )
            set /a index+=1
        )

        del /q "%temp_folder%\*.png"
        del "%temp_folder%\names_!group!.txt"
        set /a group+=1
        set count=0
    )
)

:: === 最後に余った画像があれば処理 ===
if not "!count!"=="0" (
    set "tile_name=tile_!group!.png"
    set "tile_args="

    for /L %%i in (1,1,!count!) do (
        set "tile_args=!tile_args! "%temp_folder%\%%i.png""
        echo !filename%%i!>> "%temp_folder%\names_!group!.txt"
    )

    call %montage_path% !tile_args! -tile 3x3 -geometry +0+0 "%tile_folder%\!tile_name!"

timeout /t 5
pause 
    "%convert_path%" "%tile_folder%\!tile_name!" -crop 3x3@ +repage -scene 0 "%temp_folder%\split_!group!_%%d.png"

    set /a index=0
    for /f %%n in (%temp_folder%\names_!group!.txt) do (
        set "src=%temp_folder%\split_!group!_!index!.png"
        if exist "!src!" (
            move /Y "!src!" "%split_folder%\%%n.png"
        ) else (
            echo ?? ファイルが見つかりません: !src!
        )
        set /a index+=1
    )

    del /q "%temp_folder%\*.png"
    del "%temp_folder%\names_!group!.txt"
)

echo 完了!分割画像を %split_folder% に保存しました!
pause

bat,imagemagick

Posted by eightban