はじめに
PNGファイルをJPEGに変換する方法にはいくつかの方法がありますが、Windowsのデフォルト機能だけで実現したい場合は、PowerShellを使用することができます。本記事では、PowerShellを使用して指定ディレクトリ配下のPNGファイルをJPEGに変換する方法について解説します。
スクリプト
# Set the source and destination folders $sourceFolder = "C:\tmp" $destinationFolder = "C:\tmp\jpg" # Get all PNG files in the source folder Get-ChildItem -Path $sourceFolder -Filter *.png -Recurse | ForEach-Object { # Set the output file name and path $outputFilePath = Join-Path $destinationFolder ($_.BaseName + ".jpg") # Convert the PNG file to JPEG with maximum quality Add-Type -AssemblyName System.Drawing $pngImage = [System.Drawing.Image]::FromFile($_.FullName) $encoder = [System.Drawing.Imaging.Encoder]::Quality $encoderParameters = New-Object System.Drawing.Imaging.EncoderParameters(1) $encoderParameter = New-Object System.Drawing.Imaging.EncoderParameter($encoder, [int]100) $encoderParameters.SetParameter(0, $encoderParameter) $pngImage.Save($outputFilePath, [System.Drawing.Imaging.ImageCodecInfo]::GetEncoder([System.Drawing.Imaging.ImageFormat]::Jpeg), $encoderParameters) }
内容解説
①まず、変換元となるPNGファイルがあるディレクトリのパスを指定します。以下の例では、C:\tmpを変換元のディレクトリとしています。
$sourceFolder = "C:\tmp"
②次に、変換後のJPEGファイルを保存するディレクトリのパスを指定します。以下の例では、C:\tmp\jpgを変換後のディレクトリとしています。
$destinationFolder = "C:\JPEG"
③その後、Get-ChildItemコマンドレットを使用して、変換元のディレクトリ配下にあるPNGファイルの一覧を取得します。-Recurseオプションを指定することで、サブディレクトリ内のPNGファイルも含めて取得します。ForEach-Objectコマンドレットを使用して、PNGファイルごとに変換処理を実行します。
エンコーダーパラメーターの設定は、ここでは、品質を最高に設定しています。
ポイント
今回のスクリプトのポイントとしては、以下の部分です。
1.画像のフォーマットを変換するには、.NET Frameworkに含まれる「System.Drawing」名前空間を使用することができます。
2.変換対象のフォルダ内に存在する画像ファイルを検索するには、「Get-ChildItem」コマンドレットを使用します。
3.検索した画像ファイルを一つずつ変換するために、「ForEach-Object」コマンドレットを使用します。
4.画像ファイルを変換するには、「System.Drawing.Image」オブジェクトを作成して、「.Save」メソッドを使用します。変換後のファイル形式として「System.Drawing.Imaging.ImageFormat.Jpeg」を指定し、品質として「100」を指定しています。
0 件のコメント:
コメントを投稿