hushpuppies
Goto Top

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 face-smile

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?

Content-ID: 255849

Url: https://administrator.de/contentid/255849

Ausgedruckt am: 21.11.2024 um 14:11 Uhr

114757
114757 25.11.2014 aktualisiert um 16:48:33 Uhr
Goto Top
Einfacher Task mit
den ImageMagick Tools face-wink
http://www.imagemagick.org/Usage/resize/

Gruß jodel32
Roadrunner0815
Roadrunner0815 25.11.2014 um 19:23:23 Uhr
Goto Top
Ich glaube es gibt für Irwanview ein entsprechendes Plugin.
Criemo
Criemo 25.11.2014 um 20:07:41 Uhr
Goto Top
Hi,
Picasa kann das auch face-wink

VG
Criemo
colinardo
colinardo 25.11.2014 aktualisiert um 23:22:58 Uhr
Goto Top
Oder man nimmt nur die Powershell face-smile
(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
    }
}
Grüße Uwe
hushpuppies
hushpuppies 27.11.2014 um 19:32:35 Uhr
Goto Top
Vielen Dank für die Tipps.

Ich versuche mal morgen umzusetzen - der Ansatz mit der PowerShell sieht sehr nett und flexibel aus, auch der Tipp mit ImageMagick klingt gut.

IrfanView hab ich schon probiert, das Problem dort ist, dass man nur ein Ausgabeverzeichnis wählen kann und es keine Option a la "schreib es wieder dorthin, wo es ursprünglich lag" gibt. Sprich man müsste sich durch alle Ordner hangeln und Ordner für Ordner konvertieren - bei gut 4.000 oder eher knapp 5.000 Ordner eher nicht so doll face-smile
hushpuppies
hushpuppies 07.05.2015 um 08:54:32 Uhr
Goto Top
Ich würde gern diese Frage nochmal vorkramen.
Ich habe mich mit den vorgeschlagenen Methoden beschäftigt, musste aber feststellen, dass mir da einfach die programmiertechnischen Grundlagen fehlen um das auf meinen Anwendungsfall anzupassen.

Daher nochmal die Frage, ob jemand ein "fertiges" Programm kennt, welches in der Lage ist sich rekursiv durch Ordner zu wühlen, Bilder einzulesen und anhand von einfachen Kriterien wie Größe oder Maße ggf. zu verkleinern und an der selben Stelle wieder abzuspeichern.

Es darf auch gerne etwas kosten auch wenn mir ein open source oder freeware Programm natürlich lieber wäre face-smile