Gesucht: Programm zum automatischen Verkleinern von Bildern anhand bestimmter Kriterien
Hallo zusammen!
Erstmal hoffe ich, dass ich die richtige Kategorie für das Thema erwischt habe
Folgendes Problem:
Ich würde gern ein Laufwerk von einem Tool durchsuchen lassen, welches dann die gefundenen Bilder automatisch nach gewissen Kriterien bearbeitet.
Als Beispiel:
Wenn Bild xyz grösser ist als 1,5MB und die Auflösung größer als 1920x1080, dann verkleinere das Bild proportional auf 1920x1080 (oder der nächstmöglichen Größe bei der das Bild proportional bleibt).
Händisch geht das auf Grund der Menge und der komplexen Ordnerstruktur nicht oder nur mit *sehr* viel Aufwand, deshalb suche ich da eine Möglichkeit das möglichst automatisch zu erledigen.
Weiß da jemand zufällig Rat?
Erstmal hoffe ich, dass ich die richtige Kategorie für das Thema erwischt habe
Folgendes Problem:
Ich würde gern ein Laufwerk von einem Tool durchsuchen lassen, welches dann die gefundenen Bilder automatisch nach gewissen Kriterien bearbeitet.
Als Beispiel:
Wenn Bild xyz grösser ist als 1,5MB und die Auflösung größer als 1920x1080, dann verkleinere das Bild proportional auf 1920x1080 (oder der nächstmöglichen Größe bei der das Bild proportional bleibt).
Händisch geht das auf Grund der Menge und der komplexen Ordnerstruktur nicht oder nur mit *sehr* viel Aufwand, deshalb suche ich da eine Möglichkeit das möglichst automatisch zu erledigen.
Weiß da jemand zufällig Rat?
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 255849
Url: https://administrator.de/contentid/255849
Ausgedruckt am: 13.11.2024 um 06:11 Uhr
6 Kommentare
Neuester Kommentar
Oder man nimmt nur die Powershell
(gibt jpeg-Bilder aus)
Grüße Uwe
(gibt jpeg-Bilder aus)
function Resize-Image(){
param(
[parameter(mandatory=$true)][string]$imgPath,
[string]$saveAs,
[parameter(mandatory=$true)][int]$size,
[ValidateRange(0,100)][int]$quality = 100
)
Add-Type -AssemblyName System.Drawing
if (!$saveAs){$saveAs = $imgPath}
$ext = [System.IO.Path]::GetExtension($imgPath)
if ($ext -match "bmp|jpg|jpeg|gif|tif|tiff|png"){
$img = [System.Drawing.Bitmap]::FromFile($imgPath)
$percentWidth = [float]$size / [float]$img.Width
$percentHeight = [float]$size / [float]$img.Height
$percent = 1
if ($percentHeight -lt $percentWidth){
$percent = $percentHeight
}else{
$percent = $percentWidth
}
[int32]$newWidth = [int32]$img.Width * $percent
[int32]$newHeight = [int32]$img.Height * $percent
[System.Drawing.Image]$newImage = New-Object System.Drawing.Bitmap $newWidth,$newHeight
[System.Drawing.Graphics]$graphics = [System.Drawing.Graphics]::FromImage($newImage)
$graphics.InterpolationMode = [System.Drawing.Drawing2D.InterpolationMode]::HighQualityBicubic
$graphics.Drawimage($img,0,0,$newWidth,$newHeight)
$img.Dispose()
# JPG Qalität festlegen
[System.Drawing.Imaging.ImageCodecInfo]$jpgEncoder = [System.Drawing.Imaging.ImageCodecInfo]::GetImageDecoders() | ?{$_.FormatID -eq [System.Drawing.Imaging.ImageFormat]::jpeg.GUID} | select -First 1
$myEncoder = [System.Drawing.Imaging.Encoder]::Quality
$encoderParams = new-object System.Drawing.Imaging.EncoderParameters(1)
$encoderParam = new-object System.Drawing.Imaging.EncoderParameter($myEncoder,85)
$encoderParams.Param = $encoderParam
# --------------------
# Bild speichern
$newImage.Save($saveAs,$jpgEncoder,$encoderParams)
$newImage.Dispose()
}
}
function Get-ImageSize(){
param(
[parameter(mandatory=$true)][string]$imgPath
)
Add-Type -AssemblyName System.Drawing
$img = [System.Drawing.Bitmap]::FromFile($imgPath)
$w = $img.Width; $h = $img.Height
$img.Dispose()
return @($w,$h)
}
# Ordner festlegen
$ordner = "E:\Bilder"
$maxSize = 1920
# Dateien nach Kriterien filtern und in der Größe anpassen und speichern
dir $ordner -Filter *.jpg -recurse | %{
$s = Get-ImageSize $_.Fullname
if (($s -gt $maxSize -or $s[1] -gt $maxsize) -and $_.Length -gt 1.5MB){
write-host "Verkleinere Bild '$($_.Fullname)'" -ForegroundColor Green
Resize-Image $_.Fullname -size $maxSize
}
}