Bilder in Ordner automatisch konvertieren. Ab Win 7
Wer kann mir sagen wie ich einen Ordner "beobachten" kann? Wir brauchen im Netz einen Ordner zum automatischen konvertieren von Bildern. Diese sollen nach Umwandlung in einen anderen Ordner gespeichert werden. Das Ganze soll automatische ablaufen. Also bei Speichern eines neuen Images in den Eingangsordner soll dieses automatisch konvertiert und eben wieder woanders im Netz abgespeichert werden.
Danke im Vorraus
Danke im Vorraus
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 285033
Url: https://administrator.de/contentid/285033
Ausgedruckt am: 25.11.2024 um 12:11 Uhr
5 Kommentare
Neuester Kommentar
Hallo @Follyx,
da brauchst du schon einen Rechner, der immer dieses Verzeichnis beobachtet und alle neuen Dateien nach einer kurzen Wartezeit (Übertragunsdauer unbedingt beachten!) verschiebt und konvertiert.
Von was in was wollt ihr denn konvertieren?
Gruß,
@Snowman25
da brauchst du schon einen Rechner, der immer dieses Verzeichnis beobachtet und alle neuen Dateien nach einer kurzen Wartezeit (Übertragunsdauer unbedingt beachten!) verschiebt und konvertiert.
Von was in was wollt ihr denn konvertieren?
Gruß,
@Snowman25
Hallo zusammen,
es gibt zwar genug Tools dazu im Netz, aber wenn man es z.B. selber mit Bordmitteln machen möchte, reicht z.B. auch Powershell:
Beispielskript das einen Ordner auf neue Dateien des Typs
Das ganze lässt sich natürlich flexibel anpassen oder auch ein anderes Tool wie etwa ImageMagick einbinden das mehr Formate unterstützt als nur die nativ von .NET unterstützen Formate.
Zur Info: Wer eine Funktion braucht die Bilder in der Größe anpasst, die habe ich hier auch schon als PS Skript zur Verfügung gestellt: Powershell: Bilder verkleinern oder an bestimmte Größe anpassen. Ließe sich also ebenfalls damit problemlos kombinieren...
HINWEIS: Im Beispiel werden nur Bilder konvertiert die nach dem Start des Skriptes im Ordner landen, bereits darin liegende Bilder werden nicht beachtet, ließe sich aber bei Bedarf nachrüsten.
Viel Spaß damit
Grüße Uwe
Falls der Beitrag gefällt, seid so nett und unterstützt mich durch eine kleine Spende / If you like my contribution please support me and donate
es gibt zwar genug Tools dazu im Netz, aber wenn man es z.B. selber mit Bordmitteln machen möchte, reicht z.B. auch Powershell:
Beispielskript das einen Ordner auf neue Dateien des Typs
"bmp|jpg|jpeg|gif|tif|tiff|png"
via effizientem Filesystemwatcher überwacht und dann in einen Unterordner mit Namen converted als JPG ablegt.Das ganze lässt sich natürlich flexibel anpassen oder auch ein anderes Tool wie etwa ImageMagick einbinden das mehr Formate unterstützt als nur die nativ von .NET unterstützen Formate.
Zur Info: Wer eine Funktion braucht die Bilder in der Größe anpasst, die habe ich hier auch schon als PS Skript zur Verfügung gestellt: Powershell: Bilder verkleinern oder an bestimmte Größe anpassen. Ließe sich also ebenfalls damit problemlos kombinieren...
# Ordner der zu überwachen ist
$folder = 'd:\bilder'
function Convert-Image([string]$inPath,[string]$outPath,[System.Drawing.Imaging.ImageFormat]$format){
Add-Type -AssemblyName System.Drawing
try{
if (Test-Path $inPath){
$ext = [System.IO.Path]::GetExtension($inPath)
if ($ext -match "bmp|jpg|jpeg|gif|tif|tiff|png"){
$img = [System.Drawing.Bitmap]::FromFile($inPath)
if (!(Test-Path $outPath)){md ([IO.Path]::GetDirectoryName($outpath))}
$newPath = $outPath; $cnt = 1
while(Test-Path $newPath){
$newpath = [io.Path]::GetDirectoryName($outpath) + "\" + [io.Path]::GetFileNameWithoutExtension($outpath) + "(" + $cnt + ")" + [io.Path]::GetExtension($outpath)
$cnt++
}
$img.Save($newPath, $format)
$img.Dispose()
return $true
}else{
throw "Kein unterstütztes Format (bmp|jpg|jpeg|gif|tif|tiff|png)!"
}
}
}catch{
return $_.Exception.Message
}
}
# Unregister-Event wenn bereits registriert
Get-EventSubscriber -SourceIdentifier ImageWatcher -EA SilentlyContinue | Unregister-Event
# FS Watcher erstellen
$fsw = New-Object IO.FileSystemWatcher $folder,"*.*" -Property @{IncludeSubdirectories = $false;NotifyFilter = [IO.NotifyFilters]'FileName'}
Register-ObjectEvent $fsw Created -SourceIdentifier ImageWatcher -Action {
$name = $Event.SourceEventArgs.Name
$fullpath = $Event.SourceEventArgs.FullPath
$timestamp = get-date $Event.TimeGenerated -Format 'g'
Write-Host "$timestamp : Konvertiere: '$fullpath' ... " -fore green -NoNewline
$result = Convert-Image -inPath $fullpath -outPath "$([IO.Path]::GetDirectoryName($fullpath))\converted\$([IO.Path]::GetFileNameWithoutExtension($name)).jpg" -format "jpeg"
if ($result -eq $true){
write-host "OK" -fore Cyan
}else{
write-host "$result" -fore Red
}
# Original-Bild wieder löschen
Remove-Item $fullpath -Force
}
cls
write-host "Überwache '$folder' auf neue Dateien..." -ForegroundColor Green
while($true){
sleep(1)
}
Viel Spaß damit
Grüße Uwe
Falls der Beitrag gefällt, seid so nett und unterstützt mich durch eine kleine Spende / If you like my contribution please support me and donate