Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1896to1900
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Bilder komprimieren

Bilder komprimieren
10.09.2022 19:52:55
Andy
Hallo alle zusammen,
ich habe heute eine Frage bezüglich dem Komprimieren von Bildern. Gibt es eine Möglichkeit mit VBA Bilddateien zu komprimieren, die in einem Ordner vorliegen (jpeg). Leider sind diese in ihrem Ursprung zu groß und müssten daher komprimiert werden.
Ist sowas mit Excel möglich?
LG und Dank
Andy

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Bilder komprimieren
10.09.2022 20:39:11
Oberschlumpf
Hi Andy,
Was genau meinst du mit "komprimieren"?
a) Soll die Auflösung verringert werden, was definitiv zu weniger Speicherbedarf führen würde und somit dein Problem gelöst wäre?
Aber wenn Auflösung verringert wird, kannst du nicht mehr so gut zoomen wie mit der Originalauflösung
b) Oder meinst du: Einfach nur per VBA alle Dateien z Bsp mit 7Zip verkleinern - OHNE die Auflösung zu verringern?
Ich hatte gerad mal 50 JPG-Dateien (170 MB) mit 7ZIP komprimiert - Ergebnis = nur 150 MB
Bin auf dein Feedback neugierig.
Ciao
Thorsten
AW: Bilder komprimieren
11.09.2022 08:52:04
Andy
Hallo Thorsten,
Ich meine die Auflösung zu verringern, ohne dass das Bild in excel auf einem Worksheet hinterlegt ist. Es liegen also nur mehrere Bilder auf dem Laufwerk vor. Dass dann nicht mehr so gut gezoomt werden kann ist mir bewusst.
Anzeige
AW: dafür gibt es spez. Software ...
11.09.2022 09:33:33
Andy
Hallo Werner,
Das Programm ist mir bekannt, wird derzeit auch bei uns so verwendet.
Ich brauch aber leider eine Lösung für excel, da ich das ganze vereinfachen möchte und nicht x verschiedene Programme heranziehen will.
Bei Word hab ich sowas schon mal als Funktion gesehen, allerdings weiß ich nicht, ob das auch in excel und in einem Ordner funktioniert
Anzeige
AW: Bilder komprimieren
11.09.2022 12:01:27
Nepumuk
Hallo Andy,
teste mal:

Option Explicit
Public Sub Test()
Dim objImageFile As Object, objImageProcess As Object
Dim strPath As String
strPath = "H:\Testbild.jpg" ' Anpassen !!!
Set objImageFile = CreateObject(Class:="WIA.ImageFile")
Call objImageFile.LoadFile(Filename:=strPath)
Set objImageProcess = CreateObject(Class:="WIA.ImageProcess")
With objImageProcess
Call .Filters.Add(FilterID:=.FilterInfos("Convert").FilterID)
.Filters.Item(1).Properties("FormatID") = "{B96B3CAE-0728-11D3-9D7B-0000F81EF32E}"
.Filters.Item(1).Properties("Quality") = 10 ' Anpassen !!!
Set objImageFile = .Apply(Source:=objImageFile)
End With
If Dir$(PathName:=strPath)  vbNullString Then Call Kill(PathName:=strPath)
Call objImageFile.SaveFile(Filename:=strPath)
Set objImageProcess = Nothing
Set objImageFile = Nothing
End Sub
Gruß
Nepumuk
Anzeige
AW: Bilder komprimieren
13.09.2022 07:57:36
Andy
Nepumuk,
Das ist genial - das funktioniert bestens… mega! Das müsste heißen, eine Schleife um ein Verzeichnis und dann kann er jedes file damit komprimieren ? Toll wäre, wenn er anstatt das file zu löschen einfach die neuen Files in einen anderen Ordner kopiert und dabei jedes jpg file eines Ordners berücksichtigt.
Zb: D:\Original\*.jpg nach D:\Kompromiert\Komprimiert(*).jpg
Kann mir dabei noch jemand helfen? Vielen lieben Dank
Lg Andy
AW: Bilder komprimieren
13.09.2022 10:40:10
Nepumuk
Hallo Andy,
so:

Option Explicit
Public Sub Test()
Const INPUT_FOLDER As String = "D:\Original\" ' Anpassen, Backslash am ende nicht loeschen !!!
Const OUTPUT_FOLDER As String = "D:\Kompromiert\" ' Anpassen, Backslash am ende nicht loeschen !!!
Dim objImageFile As Object, objImageProcess As Object
Dim strFilename As String
Set objImageFile = CreateObject(Class:="WIA.ImageFile")
Set objImageProcess = CreateObject(Class:="WIA.ImageProcess")
With objImageProcess
Call .Filters.Add(FilterID:=.FilterInfos("Convert").FilterID)
.Filters.Item(1).Properties("FormatID") = "{B96B3CAE-0728-11D3-9D7B-0000F81EF32E}"
.Filters.Item(1).Properties("Quality") = 10 ' Anpassen !!!
End With
strFilename = Dir$(INPUT_FOLDER & "*.jpg")
Do Until strFilename = vbNullString
Call objImageFile.LoadFile(Filename:=INPUT_FOLDER & strFilename)
Set objImageFile = objImageProcess.Apply(Source:=objImageFile)
Call objImageFile.SaveFile(Filename:=OUTPUT_FOLDER & "Komprimiert_" & strFilename)
strFilename = Dir$
Loop
Set objImageProcess = Nothing
Set objImageFile = Nothing
End Sub
Bei "Quality" kannst du ganze Werte von 1 bis 100 eintragen.
Gruß
Nepumukl
Anzeige
AW: Bilder komprimieren
14.09.2022 08:23:45
Andx
Hey Nepumuk,
ganz vielen Dank. So funktioniert es bestens. Eine Kleinigkeit ist mir aber noch aufgefallen:
Die Prozedur bricht hier bei der Komprimierung ab, wenn der Ordner bereits exisitert. Kann man das noch irgendwie bereinigen, dass er die Dateien einfach überschreibt?
Call objImageFile.SaveFile(Filename:=OUTPUT_FOLDER & "Komprimiert_" & strFilename)
AW: Bilder komprimieren
14.09.2022 10:24:24
Nepumuk
Hallo Andy,
dann so:

Option Explicit
Public Sub Test()
Const INPUT_FOLDER As String = "D:\Original\" ' Anpassen, Backslash am ende nicht loeschen !!!
Const OUTPUT_FOLDER As String = "D:\Kompromiert\" ' Anpassen, Backslash am ende nicht loeschen !!!
Dim objImageFile As Object, objImageProcess As Object
Dim objFileSystemObject As Object
Dim strFilename As String, strOutputPath As String
Set objImageFile = CreateObject(Class:="WIA.ImageFile")
Set objImageProcess = CreateObject(Class:="WIA.ImageProcess")
Set objFileSystemObject = CreateObject(Class:="Scripting.FileSystemObject")
With objImageProcess
Call .Filters.Add(FilterID:=.FilterInfos("Convert").FilterID)
.Filters.Item(1).Properties("FormatID") = "{B96B3CAE-0728-11D3-9D7B-0000F81EF32E}"
.Filters.Item(1).Properties("Quality") = 10 ' Anpassen !!!
End With
strFilename = Dir$(INPUT_FOLDER & "*.jpg")
Do Until strFilename = vbNullString
Call objImageFile.LoadFile(Filename:=INPUT_FOLDER & strFilename)
Set objImageFile = objImageProcess.Apply(Source:=objImageFile)
strOutputPath = OUTPUT_FOLDER & "Komprimiert_" & strFilename
If objFileSystemObject.FileExists(strOutputPath) Then Call Kill(strOutputPath)
Call objImageFile.SaveFile(Filename:=strOutputPath)
strFilename = Dir$
Loop
Set objFileSystemObject = Nothing
Set objImageProcess = Nothing
Set objImageFile = Nothing
End Sub
Gruß
Nepumuk
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige