Windows システムはフォルダー内の画像を低解像度にバッチ変換します

PowerShell を使用して写真をバッチでトリミングすると、フォルダー内の写真が指定されたサイズにバッチでトリミングされ、別のフォルダーに保存されます。

.ps1 ファイルを作成して実行する

新しいテキストドキュメントを作成し、次の内容を入力します。

# 指定原始图片所在的文件夹和输出路径
$sourceFolder = "C:\path\to\source\folder"
$outputFolder = "C:\path\to\output\folder"

# 加载System.Drawing命名空间
Add-Type -AssemblyName System.Drawing

# 获取指定文件夹中所有图片的文件名
$files = Get-ChildItem -Path $sourceFolder -Filter *.jpg

# 循环处理每个文件
foreach ($file in $files) {
    # 打开原始图片
    $image = [System.Drawing.Image]::FromFile($file.FullName)

    # 定义新的大小
    $newWidth = 100
    $newHeight = ($image.Height / $image.Width) * $newWidth
    $newSize = New-Object System.Drawing.Size($newWidth, $newHeight)

    # 创建一个新的Bitmap并绘制调整大小后的图片
    $resizedImage = New-Object System.Drawing.Bitmap($newSize.Width, $newSize.Height)
    $graphics = [System.Drawing.Graphics]::FromImage($resizedImage)
    $graphics.DrawImage($image, 0, 0, $newSize.Width, $newSize.Height)

    # 保存调整大小后的图片到指定输出路径
    $outputPath = Join-Path $outputFolder $file.Name
    $resizedImage.Save($outputPath)

    # 释放资源
    $image.Dispose()
    $resizedImage.Dispose()
    $graphics.Dispose()
}

状況に応じてパスを変更します。「111.ps1」のように、接尾辞「.ps1」が付いたファイルとして保存します。powershellを開き、「111.ps1」のパスの下に「.\111.ps1」と入力してファイルを実行します。

正常に実行されました

効果: 1080*2400 の画像を 100*222 に圧縮

コードの説明 (重要ではないため、スキップすることをお勧めします)

GPT による関連コードの説明:

さて、コードの説明は次のとおりです。

```
# System.Drawing 名前空間をロードします。
Add-Type -AssemblyName System.Drawing
```

ここのコードでは、PowerShell の「Add-Type」コマンドを使用して「System.Drawing」名前空間を読み込みます。`System.Drawing` 名前空間は、.NET Framework で 2 次元グラフィックスを描画するためのコア コンポーネントの 1 つです。PowerShell スクリプトで画像を処理する場合は、最初にこの名前空間を読み込む必要があります。

```
# 新しいサイズを定義します
$newWidth = 500
$newHeight = ($image.Height / $image.Width) * $newWidth
$newSize = New-Object System.Drawing.Size($newWidth, $newHeight)
```

このコードは、新しい画像サイズを定義します。例として 500 ピクセルの幅をとり、元の画像の縦横比に従って新しい高さを計算し、`System.Drawing.Size` タイプを使用して新しい `Size` オブジェクトを作成します。

```
# 新しいビットマップを作成し、サイズ変更されたイメージを描画
$resizeImage = New-Object System.Drawing.Bitmap($newSize.Width, $newSize.Height)
$graphics = [System.Drawing.Graphics]:: FromImage($ resizeImage)
$graphics.DrawImage($image, 0, 0, $newSize.Width, $newSize.Height)
```

このコードは、`System.Drawing.Bitmap` タイプを使用して新しい Bitmap オブジェクトを作成し、次に `System.Drawing.Graphics` タイプを使用して Bitmap に関連付けられた Graphics オブジェクトを作成します。次に、`DrawImage()` メソッドを使用して、サイズ変更された画像をこのビットマップ上に描画します。

```
# サイズ変更された画像を指定された出力パスに保存します
$outputPath = Join-Path $outputFolder $file.Name
$resizeImage.Save($outputPath)
```

このコードは、サイズ変更された画像を指定された出力パスに保存します。PowerShell の組み込みの「Join-Path」コマンドを使用して出力フォルダーと元の画像のファイル名を連結し、次に Bitmap オブジェクトの「Save()」メソッドを使用してビットマップを画像ファイルとして保存します。

```
# リソースを解放
$image.Dispose()
$resizeImage.Dispose()
$graphics.Dispose()
```

最後に、このコードは各 Bitmap オブジェクトの `Dispose()` メソッドを呼び出して、そのオブジェクトに関連付けられたすべてのリソースを解放し、メモリ リークがないようにします。次の順序でリソースを解放する必要があることに注意してください。最初に Graphics オブジェクトを解放し、次に Bitmap オブジェクトを解放し、最後に Image オブジェクト (つまり、元の画像) を解放します。

エラーを報告する

画像ビット深度の変動

PixelFormat パラメーターを明示的に指定することで、出力画像形式を変更しないでください。

新しい Bitmap オブジェクトを作成するときは、PixelFormat パラメーターを Format24bppRgb として明示的に指定して、出力イメージのビット深度を変更しないようにします。同時に、出力画像形式が正しいことを確認するために、画像を保存するときに形式を JPEG として指定する必要もあります。

存在する

$resizeImage =New-Object System.Drawing.Bitmap($newSize.Width, $newSize.Height, [System.Drawing.Imaging.PixelFormat]::Format24bppRgb)

変更点が 1 つあります。 

効果:

 

その他のエラー

PowerShell のコマンド実行、一般的なエラー、および処理については、以下を参照してください。

Windows システム PowerShell 実行コマンドの一般的なエラーと処理 - Weixin_56337147 のブログ - CSDN ブログ

要約する 

.ps1 ファイルを作成して実行してバッチ変更を実現する

おすすめ

転載: blog.csdn.net/weixin_56337147/article/details/130754407