Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

 

Hallo zusammen,

ich plane, ein Batch-Skript zu erstellen, das täglich auf unserem Fileserver ausgeführt werden soll.

Das Ziel des Skripts ist es, jede JPG-Datei zu komprimieren, die an dem Tag auf dem Fileserver abgelegt wurde. Bereits komprimierte Dateien sollen übersprungen werden.

 

Ich bin schon mit dem Programm IrfanView am testen, aber so richtig funktioniert es nicht. Die bereits komprimierten Dateien werden immer wieder komprimiert, aber leider nicht übersprungen. 

 

Habt ihr eine Idee wie so ein Skript aussehen könnte?

Danke und Gruß

 

Dazu müsste IrFan die EXIF Daten herausgeben und die passenden Tags müssen analysiert werden.
Oder das Skript versucht ohne IrFan an die Tags zu kommen und dann zu entscheiden.

Bearbeitet von hellerKopf

Wäre das hier ungefähr was du suchst?

https://administrator.de/knowledge/powershell-bilder-verkleinern-oder-an-bestimmte-groesse-anpassen-268427.html

Damit könntest du alle Bilder auf dem Filer auf ein bestimmtes Maximalformat zusammen stutzen. Bilder die klein genug sind werden übersprungen und mit LastWriteTime könntest du noch nach Datum filtern.

Ich würde aber vorher sehr genau abklären, ob das Verkleinern der Bilder auch wirklich i.O. ist. ggf. liegen da auch Bilder die absichtlich in verschwenderischer Größe abgelegt wurden, entweder vom Marketing (weil für Print, Kataloge...) oder - schlimmer - von der QS Abteilung zur Dokumentation von Reklamationen o.Ä.

Also Fragen, schriftlich absichern, Backup ziehen, verkleinern und nach max 3 Monaten Bilder aus dem Backup zurückholen (so meine Erfahrung damit).

Ich lese hier was von Komprimieren. Das in Verbindung mit JPEG Dateien. JPEG ist ja schon ein Komprimierungsformat. Was soll das also grundsätzlich bringen??

Ich habe das Problem so verstanden, dass das Skript bereits einmal komprimierte Dateien überspringen soll, damit die BIlder nicht kontinuierlich unschärfer werden.

Aber ohne mehr Details, oder Teile des Skripts vom TE kommen wir da sowieso nicht weiter.

  • Autor
vor 36 Minuten schrieb fi23:

Ich lese hier was von Komprimieren. Das in Verbindung mit JPEG Dateien. JPEG ist ja schon ein Komprimierungsformat. Was soll das also grundsätzlich bringen??

Dateigröße wird kleiner

vor 12 Minuten schrieb lorqnz:

Dateigröße wird kleiner

Du kannst eine bereits komprimierte Datei nicht weiter komprimieren. Ausnahme: Verlustbehaftete Kompressionsverfahren, wie bei JPGs verwendet. Das bedeutet aber im Umkehrschluss, die Qualität der Bildinhalte wird auf jeden Fall verschlechtert.

Es hängt also vom Ausgangsmaterial ab, ob Du damit wirklich ein nennenswertes Ergebnis erzielen kannst, dass noch brauchbar ist. In der Regel ist es so, das die Änderung der Bildmaße, bzw. der Auflösung mehr bringt, als eine weitere verlustbehaftete Kompression.

Um Dir also wirklich eine qualifizierte Antwort geben zu können, musst Du mit mehr Infos rausrücken. Was ist die Ausgangslage und was ist das Ziel? Dabei ist: "Ich habe Bilder die kleiner werden sollen" keine Info, die weiterhilft. Wie groß sind die Bilder im Moment von der Datenmenge her? Welche Auflösung haben sie? Wofür werden sie in Zukunft noch benötigt? Wieviel Speicherplatz soll eingespart werden, damit sich der Aufwand überhaupt lohnt? Usw.

Um einem Bild anzusehen, ob es bereits einmal den Vorgang durchlaufen hat, kannst Du entweder das Datum der letzten Änderung verwenden oder Du tagst bearbeitete Bilder entsprechend. Taggen kannst Du entweder über IPTC oder die Manipulation der Exif Daten. https://www.pixpa.com/de/blog/photo-metadata

  • Autor
vor 16 Stunden schrieb ZwennL:

Du kannst eine bereits komprimierte Datei nicht weiter komprimieren. Ausnahme: Verlustbehaftete Kompressionsverfahren, wie bei JPGs verwendet. Das bedeutet aber im Umkehrschluss, die Qualität der Bildinhalte wird auf jeden Fall verschlechtert.

Es hängt also vom Ausgangsmaterial ab, ob Du damit wirklich ein nennenswertes Ergebnis erzielen kannst, dass noch brauchbar ist. In der Regel ist es so, das die Änderung der Bildmaße, bzw. der Auflösung mehr bringt, als eine weitere verlustbehaftete Kompression.

Um Dir also wirklich eine qualifizierte Antwort geben zu können, musst Du mit mehr Infos rausrücken. Was ist die Ausgangslage und was ist das Ziel? Dabei ist: "Ich habe Bilder die kleiner werden sollen" keine Info, die weiterhilft. Wie groß sind die Bilder im Moment von der Datenmenge her? Welche Auflösung haben sie? Wofür werden sie in Zukunft noch benötigt? Wieviel Speicherplatz soll eingespart werden, damit sich der Aufwand überhaupt lohnt? Usw.

Um einem Bild anzusehen, ob es bereits einmal den Vorgang durchlaufen hat, kannst Du entweder das Datum der letzten Änderung verwenden oder Du tagst bearbeitete Bilder entsprechend. Taggen kannst Du entweder über IPTC oder die Manipulation der Exif Daten. https://www.pixpa.com/de/blog/photo-metadata

Danke erstmal für deine Antwort.

Mit IrfanView lassen sich Dateien erheblich verkleinern. Selbst bei JPG-Bildern wird die Größe um bis zu 80% reduziert, ohne erkennbaren Qualitätsverlust. Die Bilder sind zwischen 5-15 MB groß. Auf dem Fileserver sind alle JPG Dateien zusammen bestimmt 5TB groß. Wenn man einmalig alle komprimiert und dann täglich das Skript für die neuen Bilder ausführt, spart man erheblich an Speicherplatz. Die Bilder sollen am selben Ort bleiben, nur die Dateigröße soll verringert werden. Als Test habe ich einen Ordner vom Fileserver kopiert und mit IrfanView die Bilder komprimiert. Dadurch konnte ich die Ordnergröße von 90 GB auf 50 GB reduzieren. Das von mir erstellte Skript sieht folgendermaßen aus:


for /r "ZIELPFAD" %%i in (*.jpg) do (
    "C:\Program Files\IrfanView\i_view64.exe" "%%i" /resample /convert="%%i"
)

 

 

Ich müsste nur noch wissen, wie man dieses Skript umwandelt. Es sollen wie gesagt nur die neusten Bilder komprimiert werden und nicht alle bereits komprimierten nochmal.

Das ist ein nettes Thema hier.
Aber es gibt viele Ansätze um das Problem zu meistern.
Mal abgesehen von den Wünschen des TE, und wer antwortet hier schon exakt auf die Frage?

1. Irfan dazu kriegen, schon mal komprimierte Bilder neu zu komprimieren.
2. Skript so ausgestalten, dass es Dateien, die schon bearbeitet wurden, ignoriert.

3. Organisatorische Maßnahmen

zu 1: Irfan Doku lesen, kann die Software das? Wenn ja, mit welchem Schalter?
zu 2: Im Skript anhand eines eindeutigen Merkmals bestimmen, ob die Datei behandelt werden soll oder nicht
zu 3: Am einfachsten, schon mal komprimierte Bilder in ein anderes Verzeichnis verschieben

Empfehlenswert ist eine Kombi aus 2 und 3.

 

# Set the path to the IrfanView executable
$irfanViewPath = "C:\Path\To\IrfanView\i_view64.exe"

# Set the input and output folders
$inputFolder = "InputFolder"
$outputFolder = "OutputFolder"

# Ensure the output folder exists, create it if not
if (-not (Test-Path -Path $outputFolder -PathType Container)) {
    New-Item -Path $outputFolder -ItemType Directory
}

# Get a list of all JPEG files in the input folder
$jpegFiles = Get-ChildItem -Path $inputFolder -Filter *.jpg

# Loop through each JPEG file
foreach ($file in $jpegFiles) {
    $outputFilePath = Join-Path -Path $outputFolder -ChildPath $file.Name
    
    # Check if the file already exists in the output folder
    if (-not (Test-Path -Path $outputFilePath -PathType Leaf)) {
        # File doesn't exist in the output folder, so it hasn't been converted
        Write-Host "Converting $($file.Name)"
        & $irfanViewPath /convert="$($file.FullName)" /resample /tifc=1 /q=80 /convertto=jpg /jpgq=85 /o /c
    }
    else {
        # File already exists in the output folder, skip conversion
        Write-Host "$($file.Name) already converted, skipping."
    }
}

created with Default (GPT-3.5), not tested

 

Bearbeitet von hellerKopf

  • Autor
vor 49 Minuten schrieb allesweg:

Einmal schreibst du 80% Reduktion, dann sind es nur 50%.

Ja bei einzelnen Bildern kann es bis zu 80% Reduktion geben, aber der Durchschnitt ist 50%?🤨

Was hat das denn mit damit zu tun? Es geht doch hauptsächlich darum, dass ich die Bildgröße verringern will, ob's jetzt 80% sind oder 50..

vor 51 Minuten schrieb allesweg:

Wozu werden diese Bilder fachlich benötigt? Es gibt da nämlich eine Option, noch mehr Speicherplatz zu sparen!

Zur Schadensanalyse von Getrieben.

  • Autor
vor 20 Minuten schrieb hellerKopf:

Das ist ein nettes Thema hier.
Aber es gibt viele Ansätze um das Problem zu meistern.
Mal abgesehen von den Wünschen des TE, und wer antwortet hier schon exakt auf die Frage?

1. Irfan dazu kriegen, schon mal komprimierte Bilder neu zu komprimieren.
2. Skript so ausgestalten, dass es Dateien, die schon bearbeitet wurden, ignoriert.

3. Organisatorische Maßnahmen

zu 1: Irfan Doku lesen, kann die Software das? Wenn ja, mit welchem Schalter?
zu 2: Im Skript anhand eines eindeutigen Merkmals bestimmen, ob die Datei behandelt werden soll oder nicht
zu 3: Am einfachsten, schon mal komprimierte Bilder in ein anderes Verzeichnis verschieben

Ja Irfan kann das. Ich muss wirklich nur wissen, wie das Skript aussehen müsste, damit es die komprimierten Bilder überspringt. Dann wäre mir schon geholfen. 

  • Autor
vor 5 Stunden schrieb hellerKopf:

Lieber lorqnz
ich habe genau 1:30 gebraucht, um das oben stehende Skript zu ermitteln.
Du kannst es jetzt testen und beurteilen. Wäre nett, wenn wir erfahren, ob es was taugt.

Hallo nochmal,

habe alles soweit eingetragen, aber beim ausführen bekomme ich die Meldung: Error! Can't load "

 

Idee? 

 

 

# Set the path to the IrfanView executable
$irfanViewPath = "C:\Program Files\IrfanView\i_view64.exe"

# Set the input and output folders
$inputFolder = "C:\Users\user\Desktop\Test"
$outputFolder = "C:\Users\user\Desktop\Test2"

# Ensure the output folder exists, create it if not
if (-not (Test-Path -Path $outputFolder -PathType Container)) {
    New-Item -Path $outputFolder -ItemType Directory
}

# Get a list of all JPEG files in the input folder
$jpegFiles = Get-ChildItem -Path $inputFolder -Filter *.jpg

# Loop through each JPEG file
foreach ($file in $jpegFiles) {
    $outputFilePath = Join-Path -Path $outputFolder -ChildPath $file.Name
    
    # Check if the file already exists in the output folder
    if (-not (Test-Path -Path $outputFilePath -PathType Leaf)) {
        # File doesn't exist in the output folder, so it hasn't been converted
        Write-Host "Converting $($file.Name)"
        & $irfanViewPath /convert="$($file.FullName)" /resample /tifc=1 /q=80 /convertto=jpg /jpgq=85 /o /c
    }
    else {
        # File already exists in the output folder, skip conversion
        Write-Host "$($file.Name) already converted, skipping."
    }
}

 

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.