Bilder einfügen und komprimieren / Word 2002 SP3 (MS Office XP)

16/02/2008 - 11:04 von Albrecht | Report spam
Hallo alle,

ich habe mir ein kleine Anwendung in Word/VBA geschrieben, bei der viele
Fotos (bis zu mehrere hundert) einer 5MB-Kamera (1 Bild entspricht einer
.jpg-Datei mit ca. 1MB) in ein Dokument eingefügt werden. Das mache ich zur
Zeit wie folgt:

Ich stelle die Dateinamen der querformatigen Bilder vorab in einen array
quer(n). (Gleiches für hochformatige Bilder; das spielt aber für die
Fragestellungen keine Rolle).
Danach werden die zu den im array enthaltenen Dateinamen gehörenden Bilder
als InlineShape in das Dokument eingefügt. Da die Bilder (InlineShape) wohl
im Document daselbe Dateivolumen beanspruchen, wie als jpg-Datei, führt das
zu irrsinnig großen Dokumenten. Ein Komprimierungsschritt ist unbedingt
notwendig.

Dazu schneide ich die InlineShapes aus und setzte sie als jpg-Bild wieder
ein. Anschließend wird der Dateiname des Bildes noch unter das Bild
geschrieben.

Mein Code sieht bislang so aus:

Function Ausgabe_quer(q)
For n = 1 To q
Selection.InlineShapes.AddPicture FileName:=quer(n)
' Anpassen der Bildgrößen
..
' Komprimieren der Bilder
Selection.Cut
Selection.PasteSpecial Link:=False, DataType:,
Placement:=wdInLine, DisplayAsIcon:=False
' Bildbezeichnung kürzen
graf2 = "any text"
' Dateinamen darunter fügen
Selection.MoveRight Unit:=wdCharacter, Count:=1 ', Extend:=wdExtend
Selection.TypeParagraph
Selection.TypeText graf2
quer(n) = ""
Next
End Function

Meine Fragen:

1) Kann die Komprimierung der Bilder schon beim Einfügen erfolgen, ungefàhr
wie .AddPicture Filename:= "XYZ" DataType:
2) In Word gibt es die Funktionalitàt
<Format><Grafik><komprimieren><etc>; Gibt es dazu den passenden
VBA-Befehl, ich habe diesen leider nirgends gefunden?
3) Beim Umwandlen von InlineShape in DataType: (jpg; s.o.) ergeben sich
am rechten und unteren Bildrand dunkle, unscharfe "Schmutzstreifen". Wie
lassen sich diese vermeiden?

TIA Albrecht
 

Lesen sie die antworten

#1 Helmut Weber
16/02/2008 - 13:53 | Warnen spam
Hallo Albrecht,

habe einige Postings dazu gelesen.
Für die englischsprachigen Groups google nach "Compress pictures"
Das ist eine harte Nuss.
Eine elegante Lösung scheint es nicht zu geben.
Ich habe sogar ein Posting von mir selbst gefunden,
von dem ich mir nicht mehr erklàren kann,
wieso es funktioniert.

Ich habe ein fast leeres Dokument und füge zwei Bilder ein.
Buckelwal und Bach.

Speichere das Dokument.
Größe ist dann 541 KB.

Dann lasse ich dieses Makro laufen:

Sub Compress()
ActiveDocument.Save ' eigentlich brauchts das nicht
MsgBox ActiveDocument.BuiltInDocumentProperties("Number of Bytes")
SendKeys "%a", 1
SendKeys "%w", 1
SendKeys "{ENTER}"
With ActiveDocument.CommandBars("Picture")
.Controls("Compress Pictures...").Execute
End With
ActiveDocument.Save
MsgBox ActiveDocument.BuiltInDocumentProperties("Number of Bytes")
End Sub

Danach ist das Dokument noch 158 KB groß.

Wieso das mit den Sendkeys funktioniert, verstehe ich selbst nicht.

Viel Spaß beim Knobeln.

Gruß

Helmut Weber, MVP WordVBA

Vista Small Business, Office XP

Ähnliche fragen