Traitement d'image (PowerShell)
Aller à la navigation
Aller à la recherche
Quelques scripts de traitement d'image en PowerShell.
Redimensionnement d'image JPEG en 1024
Script à améliorer :
- gérer le traitement récursif sur les sous-dossiers ;
- ne pas redimensionner les images déjà en 1024 ou taille inférieur ;
- en fonction d'une fourchette de date (notion d'obsolescence) ;
- ignorer certains dossiers ;
- ...
lewisroberts.com
Christopher, someshinyobject
- https://gist.github.com/someshinyobject
- https://gist.github.com/someshinyobject/617bf00556bc43af87cd
Microsoft :
Function ResizeImage() {
param(
[String]$ImagePath,
[Int]$Quality = 90,
[Int]$targetSize,
[String]$OutputLocation)
Add-Type -AssemblyName "System.Drawing"
$img = [System.Drawing.Image]::FromFile($ImagePath)
$CanvasWidth = $targetSize
$CanvasHeight = $targetSize
#Encoder parameter for image quality
$ImageEncoder = [System.Drawing.Imaging.Encoder]::Quality
$encoderParams = New-Object System.Drawing.Imaging.EncoderParameters(1)
$encoderParams.Param[0] = New-Object System.Drawing.Imaging.EncoderParameter($ImageEncoder, $Quality)
# get codec
$Codec = [System.Drawing.Imaging.ImageCodecInfo]::GetImageEncoders() | Where {$_.MimeType -eq 'image/jpeg'}
#compute the final ratio to use
$ratioX = $CanvasWidth / $img.Width;
$ratioY = $CanvasHeight / $img.Height;
$ratio = $ratioY
if ($ratioX -le $ratioY) {
$ratio = $ratioX
}
$newWidth = [int] ($img.Width * $ratio)
$newHeight = [int] ($img.Height * $ratio)
$bmpResized = New-Object System.Drawing.Bitmap($newWidth, $newHeight)
# forcer la résolution à 300 ppp
$bmpResized.SetResolution(300,300)
$graph = [System.Drawing.Graphics]::FromImage($bmpResized)
$graph.InterpolationMode = [System.Drawing.Drawing2D.InterpolationMode]::HighQualityBicubic
$graph.Clear([System.Drawing.Color]::White)
$graph.DrawImage($img, 0, 0, $newWidth, $newHeight)
#save to file
$bmpResized.Save($OutputLocation, $Codec, $($encoderParams))
$bmpResized.Dispose()
$img.Dispose()
}
Clear-Host
$MonFichier = ""
$FichiersListe = ""
$Chemin = "C:\tmp\"
Set-Location $Chemin
$FichiersListe = Get-ChildItem -path $chemin -file *.jpg
ForEach($MonFichier in $FichiersListe) {
$FichierDateCreation = $MonFichier.CreationTime
$FichierDateModif = $MonFichier.LastWriteTime
$FichierDateAcces = $MonFichier.LastAccessTime
$NouveauNom = $MonFichier.basename+"-mieux-1024"+".jpg"
$NouveauFichier = New-Item -Name $NouveauNom -ItemType "file"
ResizeImage $MonFichier.FullName 85 1024 ($Chemin+"\"+$NouveauFichier.name)
Set-Location $Chemin
$NouveauFichier.CreationTime = $FichierDateModif
$NouveauFichier.LastWriteTime = $FichierDateModif
$NouveauFichier.LastAccessTime = $FichierDateModif
remove-item $Monfichier
rename-item $NouveauFichier $MonFichier
}