Traitement d'image (PowerShell)
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 }