PowerShellでPNGファイルをBMPファイルに変換するには

2024年11月30日

ImageMagickで作成した BMP ファイルがautotraceで読めないことが分かりで作成することにしました

Error reading BMP file header

画像の形式を変えることができるのでやってみてくださいjpg など

Image クラス (System.Drawing) | Microsoft Learn

バッチファイル

echo e %*
::@pwsh -NoProfile -Command  "& (Invoke-Expression -Command ('{' + (Get-Content %~f0 -Encoding Shift-JIS | Where-Object {$_.readcount -gt 9}| Out-String )+ '}'))" %*
::
@powershell -Command  "& (Invoke-Expression -Command ('{' + (Get-Content %~f0 | Where-Object {$_.readcount -gt 9}| Out-String )+ '}'))" %*
timeout /t 55&goto:eof



# 必要なアセンブリを追加
Add-Type -AssemblyName System.Drawing

# 変換元のファイルパス
$srcFilePath = "C:\path\to\your\image.png"

# 変換先のファイルパス
$destFilePath = "C:\path\to\your\image.bmp"

# PNGファイルを読み込む
$srcImage = [System.Drawing.Image]::FromFile($srcFilePath)

# BMPファイルとして保存
$srcImage.Save($destFilePath, [System.Drawing.Imaging.ImageFormat]::Bmp)

# メモリを解放
$srcImage.Dispose()

複数ファイル対応

echo e %*
::@pwsh -NoProfile -Command  "& (Invoke-Expression -Command ('{' + (Get-Content %~f0 -Encoding Shift-JIS | Where-Object {$_.readcount -gt 9}| Out-String )+ '}'))" %*
::
@powershell -Command  "& (Invoke-Expression -Command ('{' + (Get-Content %~f0 | Where-Object {$_.readcount -gt 9}| Out-String )+ '}'))" %*
timeout /t 55&goto:eof



# 必要なアセンブリを追加
Add-Type -AssemblyName System.Drawing

# 変換元フォルダパス
$srcFolderPath = "C:\path\to\your\source\folder"

# 変換先フォルダパス
$destFolderPath = "C:\path\to\your\destination\folder"

# 変換元フォルダ内のすべてのPNGファイルを取得
$pngFiles = Get-ChildItem -Path $srcFolderPath -Filter "*.png"

foreach ($file in $pngFiles) {
    # 変換元ファイルのフルパス
    $srcFilePath = $file.FullName
    
    # 変換先ファイルのフルパス(拡張子をbmpに変更)
    $destFilePath = [System.IO.Path]::ChangeExtension([System.IO.Path]::Combine($destFolderPath, $file.Name), ".bmp")
    
    # PNGファイルを読み込む
    $srcImage = [System.Drawing.Image]::FromFile($srcFilePath)
    
    # BMPファイルとして保存
    $srcImage.Save($destFilePath, [System.Drawing.Imaging.ImageFormat]::Bmp)
    
    # メモリを解放
    $srcImage.Dispose()
}

Write-Host "すべてのPNGファイルがBMPファイルに変換されました。"

autotrace

for /r y:\output_png %%f in (*.png) do (
rem 
rem "C:\app\ImageMagick\convert.exe"  "%%f" -strip -flatten y:\input_png\%%~nf.bmp
powershell -command "Add-Type -AssemblyName System.Drawing;$img =[System.Drawing.Image]::FromFile('%%f');$img.Save('y:\input_png\%%~nf.bmp', [System.Drawing.Imaging.ImageFormat]::Bmp) " 
rem "C:\app\potrace\potrace.exe" y:\input_png\%%~nf.bmp -o y:\input_png\%%~nf.svg --svg --flat  --width=500 --opttolerance 0.2 --alphamax 1.4 --blacklevel 0.5
"C:\app\AutoTrace\autotrace.exe" --report-progress  --input-format bmp --output-format svg --output-file "y:\input_png\%%~nf.svg" "y:\input_png\%%~nf.bmp" 

del y:\input_png\%%~nf.bmp
) 

bat,PowerShell ,画像

Posted by eightban