media/ConvertTo-Jpg.ps1
# Try uncommenting the following line if you receive errors about a missing assembly # [void][System.Reflection.Assembly]::LoadWithPartialName("System.Drawing") function ConvertTo-Jpg { <# .SYNOPSIS Converts input to an JGP image with given compression level .DESCRIPTION Converts input file to an JPG image. Compression level can be specified .PARAMETER Files Input files .PARAMETER Quality JPEG quality level 0 - 100 (inclusive bounds) .EXAMPLE Get-ChildItem . -Filter *.gif | ConvertTo-Jpg -Quality 95 Creates JPG images for all gifs from current location with quality set to 95 .EXAMPLE Get-Item .\1.gif | ConvertTo-Jpg -Quality 60 Creates JPG image from '1.gif' file with quality set to 60 #> [CmdletBinding()] param( [Parameter(Mandatory = $false, Position = 0, ValueFromPipeline = $true)] $Files, [int] [Parameter(Mandatory = $false, Position = 1)] $Quality = 100 ) begin { Write-Verbose "Conversion start" $qualityEncoder = [System.Drawing.Imaging.Encoder]::Quality $encoderParams = New-Object System.Drawing.Imaging.EncoderParameters(1) # Set JPEG quality level here: 0 - 100 (inclusive bounds) $encoderParams.Param[0] = New-Object System.Drawing.Imaging.EncoderParameter($qualityEncoder, $Quality) $jpegCodecInfo = [System.Drawing.Imaging.ImageCodecInfo]::GetImageEncoders() | where { $_.MimeType -eq 'image/jpeg' } } process { $Files | % { $fullName = $_.Fullname $image = [System.Drawing.Image]::FromFile($fullName) $filePath = "{0}\{1}.jpg" -f $($_.DirectoryName), $($_.BaseName) $image.Save($filePath, $jpegCodecInfo, $encoderParams) $image.Dispose() } } end { Write-Verbose "Conversion done" } } |