1 - Copier le script dans le dossier d'image à traiter (ex: WaterMark.ps1).
2 - Créer le fichier "Watermark.png" à incruster.
3 - Dans le script, configurer l'option de position du watermark.
4 - Executer le script Powershell.
#######################################################################
# #
# Watermark - V1.0.0 #
# #
# Par Olivier DELORME #
# Site https://powershell.sekki.fr #
# #
#######################################################################
#Assembly
[void][reflection.assembly]::LoadWithPartialName("System.Windows.Forms")
[void][reflection.assembly]::LoadWithPartialName("System.Drawing")
#Choisir la position :
#"Remplir", "En haut a gauche", "En haut a droite",
#"En bas a gauche", "En bas a droite", "Au centre".
$wmOption = "Remplir"
#Chemin courant.
$global:curPath = ""
if ($psISE) { $global:curPath = Split-Path -parent $psISE.CurrentFile.Fullpath }
else { $global:curPath = Split-Path $MyInvocation.MyCommand.Path }
#Image model :
#1 - Créer une image avec un fond transparant.
#2 - Pour rendre l'image transluside, règler le paramêtre "Opacité" dans votre éditeur d'image.
#3 - Sauvegarder l'image sous le nom "watermark.png" (au format PNG).
$Watermark = $global:curpath + "\watermark.png"
#Verifier si le fichier "watermark.png" est présent dans le dossier.
if (!(Test-Path -path ($global:curpath + "\watermark.png"))) { Write-Host "Le fichier ""watermark.png"" est absent !!!"; return }
#Créer le dossier de destination pour les images marquées.
if (!(Test-Path -path ($global:curpath + "\Marked"))) { $rtn = New-Item -Path ($global:curpath + "\Marked") -ItemType directory -Force }
#Initialisation graphique.
$waterMk = New-Object System.Drawing.Bitmap($Watermark)
$srcRect = New-Object System.Drawing.Rectangle(0, 0, $waterMk.Width, $waterMk.Height)
#Traitement des fichiers dans le dossier du script.
$files = Get-ChildItem -Path $global:curpath | where {$_ -match "((.jpg)|(.png))$"}
#Verifier si il y a des fichiers à traiter.
if ($files.count -le 1)
{
Write-Host "Le script doit être dans le même dossier que les images à traiter."
return
}
#Début du traitement.
foreach($file in $files)
{
if ($file -notmatch "WaterMark")
{
$image = New-Object System.Drawing.Bitmap($file.fullname)
$graph = [System.Drawing.Graphics]::FromImage($image)
Switch ($wmOption)
{
"Remplir" {
$dstRect = New-Object System.Drawing.Rectangle(0, 0, $image.Width, $image.Height)
$graph.DrawImage($waterMk,$dstRect,$srcRect,2)
}
"En haut a gauche" { $graph.DrawImage($waterMk,0,0,$srcRect,2) }
"En haut a droite" {
$dstRect = New-Object System.Drawing.Rectangle(($image.Width-$waterMk.Width), 0, $waterMk.Width, $waterMk.Height)
$graph.DrawImage($waterMk,$dstRect,$srcRect,2)
}
"En bas a gauche" {
$dstRect = New-Object System.Drawing.Rectangle(0, ($image.Height-$waterMk.Height), $waterMk.Width, $waterMk.Height)
$graph.DrawImage($waterMk,$dstRect,$srcRect,2)
}
"En bas a droite" {
$dstRect = New-Object System.Drawing.Rectangle(($image.Width-$waterMk.Width), ($image.Height-$waterMk.Height), $waterMk.Width, $waterMk.Height)
$graph.DrawImage($waterMk,$dstRect,$srcRect,2)
}
"Au centre" {
$cx = [int](($image.Width-$waterMk.Width)/2)
$cy = [int](($image.Height-$waterMk.Height)/2)
$dstRect = New-Object System.Drawing.Rectangle($cx, $cy, $waterMk.Width, $waterMk.Height)
$graph.DrawImage($waterMk,$dstRect,$srcRect,2)
}
}
$image.Save($global:curpath + "\Marked\" + $file)
Write-Host "Le fichier ""$file"" a été sauvegardé dans le dossier ""Marked""."
$graph.Dispose()
$image.Dispose()
}
}
#Fin.
$waterMk.Dispose()
# #
# Watermark - V1.0.0 #
# #
# Par Olivier DELORME #
# Site https://powershell.sekki.fr #
# #
#######################################################################
#Assembly
[void][reflection.assembly]::LoadWithPartialName("System.Windows.Forms")
[void][reflection.assembly]::LoadWithPartialName("System.Drawing")
#Choisir la position :
#"Remplir", "En haut a gauche", "En haut a droite",
#"En bas a gauche", "En bas a droite", "Au centre".
$wmOption = "Remplir"
#Chemin courant.
$global:curPath = ""
if ($psISE) { $global:curPath = Split-Path -parent $psISE.CurrentFile.Fullpath }
else { $global:curPath = Split-Path $MyInvocation.MyCommand.Path }
#Image model :
#1 - Créer une image avec un fond transparant.
#2 - Pour rendre l'image transluside, règler le paramêtre "Opacité" dans votre éditeur d'image.
#3 - Sauvegarder l'image sous le nom "watermark.png" (au format PNG).
$Watermark = $global:curpath + "\watermark.png"
#Verifier si le fichier "watermark.png" est présent dans le dossier.
if (!(Test-Path -path ($global:curpath + "\watermark.png"))) { Write-Host "Le fichier ""watermark.png"" est absent !!!"; return }
#Créer le dossier de destination pour les images marquées.
if (!(Test-Path -path ($global:curpath + "\Marked"))) { $rtn = New-Item -Path ($global:curpath + "\Marked") -ItemType directory -Force }
#Initialisation graphique.
$waterMk = New-Object System.Drawing.Bitmap($Watermark)
$srcRect = New-Object System.Drawing.Rectangle(0, 0, $waterMk.Width, $waterMk.Height)
#Traitement des fichiers dans le dossier du script.
$files = Get-ChildItem -Path $global:curpath | where {$_ -match "((.jpg)|(.png))$"}
#Verifier si il y a des fichiers à traiter.
if ($files.count -le 1)
{
Write-Host "Le script doit être dans le même dossier que les images à traiter."
return
}
#Début du traitement.
foreach($file in $files)
{
if ($file -notmatch "WaterMark")
{
$image = New-Object System.Drawing.Bitmap($file.fullname)
$graph = [System.Drawing.Graphics]::FromImage($image)
Switch ($wmOption)
{
"Remplir" {
$dstRect = New-Object System.Drawing.Rectangle(0, 0, $image.Width, $image.Height)
$graph.DrawImage($waterMk,$dstRect,$srcRect,2)
}
"En haut a gauche" { $graph.DrawImage($waterMk,0,0,$srcRect,2) }
"En haut a droite" {
$dstRect = New-Object System.Drawing.Rectangle(($image.Width-$waterMk.Width), 0, $waterMk.Width, $waterMk.Height)
$graph.DrawImage($waterMk,$dstRect,$srcRect,2)
}
"En bas a gauche" {
$dstRect = New-Object System.Drawing.Rectangle(0, ($image.Height-$waterMk.Height), $waterMk.Width, $waterMk.Height)
$graph.DrawImage($waterMk,$dstRect,$srcRect,2)
}
"En bas a droite" {
$dstRect = New-Object System.Drawing.Rectangle(($image.Width-$waterMk.Width), ($image.Height-$waterMk.Height), $waterMk.Width, $waterMk.Height)
$graph.DrawImage($waterMk,$dstRect,$srcRect,2)
}
"Au centre" {
$cx = [int](($image.Width-$waterMk.Width)/2)
$cy = [int](($image.Height-$waterMk.Height)/2)
$dstRect = New-Object System.Drawing.Rectangle($cx, $cy, $waterMk.Width, $waterMk.Height)
$graph.DrawImage($waterMk,$dstRect,$srcRect,2)
}
}
$image.Save($global:curpath + "\Marked\" + $file)
Write-Host "Le fichier ""$file"" a été sauvegardé dans le dossier ""Marked""."
$graph.Dispose()
$image.Dispose()
}
}
#Fin.
$waterMk.Dispose()
Exemple :