lorqnz Geschrieben 21. September 2023 Geschrieben 21. September 2023 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ß Zitieren
FISI-I Geschrieben 21. September 2023 Geschrieben 21. September 2023 Woher weiß denn das Skript, dass die Dateien schon komprimiert wurden? Zitieren
hellerKopf Geschrieben 21. September 2023 Geschrieben 21. September 2023 (bearbeitet) 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 21. September 2023 von hellerKopf Zitieren
Maniska Geschrieben 21. September 2023 Geschrieben 21. September 2023 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). Zitieren
Gast Geschrieben 21. September 2023 Geschrieben 21. September 2023 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?? Zitieren
hellerKopf Geschrieben 21. September 2023 Geschrieben 21. September 2023 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. Zitieren
lorqnz Geschrieben 21. September 2023 Autor Geschrieben 21. September 2023 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 Zitieren
ZwennL Geschrieben 21. September 2023 Geschrieben 21. September 2023 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 SoL_Psycho reagierte darauf 1 Zitieren
lorqnz Geschrieben 22. September 2023 Autor Geschrieben 22. September 2023 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. Zitieren
allesweg Geschrieben 22. September 2023 Geschrieben 22. September 2023 Einmal schreibst du 80% Reduktion, dann sind es nur 50%. Wozu werden diese Bilder fachlich benötigt? Es gibt da nämlich eine Option, noch mehr Speicherplatz zu sparen! Zitieren
hellerKopf Geschrieben 22. September 2023 Geschrieben 22. September 2023 (bearbeitet) 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 22. September 2023 von hellerKopf Zitieren
lorqnz Geschrieben 22. September 2023 Autor Geschrieben 22. September 2023 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. Zitieren
lorqnz Geschrieben 22. September 2023 Autor Geschrieben 22. September 2023 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. Zitieren
hellerKopf Geschrieben 22. September 2023 Geschrieben 22. September 2023 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. Zitieren
lorqnz Geschrieben 22. September 2023 Autor Geschrieben 22. September 2023 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." } } Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.