PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Probleme mit großen Bildern



BTFYA
22-08-2009, 01:45
Hi, ich habe ein Dokument mit vielen Bildern. Es handelt sich um Fotos, daher zum Großteil jpg.. Ich verwende Notepad ++ und habe PDFLatex wie hier beschrieben eingebunden: http://www.tlhiv.org/ma497/software/

Jetzt handelt es sich um viele 10 MP Bilder. Die haben also eine zu hohe Auflösung und verusachen so ein großes PDF Dokument nach dem kompilieren.

Ich habe mir überlegt die vorher zu komprimieren, aber das stört den "Wokflow" doch imens, besonders da sie unterschiedlich im PDF-Dokument skaliert werden.

Also habe ich versucht PDFLatex die arbeit machen zu lassen.

Dazu habe ich in die Windows konsole folgenden Befehl eingegeben:
initexmf --edit-config-file pdftex.cfg

und da diesen Text eingegeben und gespeichert:

compress_level 9
decimal_digits 3
horigin 1 true in
vorigin 1 true in
image_resolution 72
move_chars 1
output_format 1
page_width 210 true mm
page_height 297 true mm
pdf_minorversion 4
pk_resolution 72

Ändert leider nichts. Liegt das daran dass ich PDFtex und nicht PDFLatex konfiguriert habe?

Außerdem habe ich folgende Befehle ausprobiert:
\pdfcompresslevel=9
\pdfimageresolution=72

Einfach hinter hyperref schreiben. Sieht dann so aus in der Präambel:

\documentclass[11pt,a4paper]{scrartcl} %beschreibt die Art des Dokuments
%\usepackage{ifpdf}
\usepackage[english]{babel}
\usepackage[T1]{fontenc}
\usepackage{SIunits} %ermöglicht Einheiten
\usepackage[latin1]{inputenc}
\usepackage{graphicx} %Graphiken einfügen
\usepackage{ae} %Umlaute verwenden
\usepackage{subfigure} %Mehrere Bilder nebeneinander
\usepackage[colorlinks=true,
pdfstartview=FitV,
linkcolor=blue,
citecolor=blue,
urlcolor=blue]{hyperref}
\pdfcompresslevel=9
\pdfimageresolution=72

%\usepackage[all]{hypcap}
% Besserer Blocksatz
\usepackage{microtype}
\usepackage{a4wide}

Das einzige was mich daran stört, ist dass es nicht funktioniert. Woran liegt das? Ich hab schon viel gesucht komme aber auf keine Lösung.

Vielen Dank für Hilfe!

Gruß

bobmalaria
22-08-2009, 02:05
hi,

wenn ich mir deinen code ansehe wird mir leicht schlecht. könnte aber auch an dem liegen was ich mir vorher gekocht habe :)
also du verwendest einige pakete die als vaeraltet und/oder inkonsistent bekannt sind. das sollten wir mal ändern.



Einfach hinter hyperref schreiben. Sieht dann so aus in der Präambel:

\documentclass[11pt,a4paper]{scrartcl} %beschreibt die Art des Dokuments
%\usepackage{ifpdf}
\usepackage[english]{babel}
\usepackage[T1]{fontenc}
\usepackage{SIunits} %ermöglicht Einheiten
\usepackage[latin1]{inputenc}
\usepackage{graphicx} %Graphiken einfügen
%\usepackage{ae} %Umlaute verwenden, mit latin1 inputenc unnötig!!
\usepackage{subfigure} %Mehrere Bilder nebeneinander
%Durch paket subfig oder subcaption abgelöst
\usepackage{hyperref}
\pdfcompresslevel=9
\pdfimageresolution=72

%\usepackage[all]{hypcap}
% Besserer Blocksatz
[COLOR="Red"]\usepackage{microtype} vor hyperref einbinden und option babel?
\usepackage{a4wide}%unöötig, a4 istastandart und das paket schlecht

so und zu deinem problem. hilft es dir eventuell einfach die option draft und demo zu setzen?


\documentclass[draft]{scrartcl}
\usepackage[demo]{graphicx}

gruss

BTFYA
22-08-2009, 14:18
Hi,

danke schon mal für die Tips. War gerade dabei alles zu ändern, dann ist es zu einen irreversiblen (für mich) fehler gekommen. Irgendwie ensteht kein PDF mehr. Das steht am ende des log files:

Here is how much of TeX's memory you used:
7708 strings out of 95304
114732 string characters out of 1183070
230168 words of memory out of 1500000
10777 multiletter control sequences out of 110000
13723 words of font info for 45 fonts, out of 3000000 for 5000
14 hyphenation exceptions out of 8191
40i,10n,43p,700b,325s stack positions out of 5000i,500n,10000p,200000b,50000s
! ==> Fatal error occurred, no output PDF file produced!

Woran kann das liegen?

Gruß

BTFYA
22-08-2009, 15:22
Es lag daran dass bei fehlenden \usepackage{ae} nichts mehr ging. Warum??? Naja egal. Ich schreib gleich ob der rest funktioniert hat.

bobmalaria
22-08-2009, 15:26
hi,

villeicht mal die temporären dateien löschen nachdem das paket auskommentiert wurde.

gruss

BTFYA
22-08-2009, 15:28
Boa mir demo und draft ist es auf 55 kB runter... aber es sind nur noch schwarze blöcke drin. Hm auch nicht optimal. Also hätte da jemand noch eine Idee was ich machen kann?

bobmalaria
22-08-2009, 15:33
hi,

ja ich dachte das wäre gut während der bearbeitungsphase. mir war nicht ganz sooo klar das es dir um die enddateigröße geht.

da bleibt dir wohl nur an den original bildern herumzuformatieren. kannst du nicht in einem batch job die auflösung verringern? ich meine du kennst ja die größe deines papieres und dafür brauchst du keine bilder die postergröße haben könnten.

spontan würde mir ein programm wie irfanview einfallen mit dem sich ganz simpel batch jobs aufsetzen lassen.

BTFYA
23-08-2009, 01:30
Hi,

die extern komprimieren/skalieren Variante geht eher nicht. So ist z.B. ein hochformat neben ein Querformatbild. Auf gleicher Höhe. Also wird das Hochformatbild stärker in Latex skaliert. Folglich wäre es nicht sinnvoll überall die gleiche Auflösung zu verwenden, da nicht bekannt ist wie groß die bilder rauskommen. Wenn ich mit Acrobat komprimiere, kommt übrigens ein fehler...

bischi
23-08-2009, 09:28
die extern komprimieren/skalieren Variante geht eher nicht.

Ist aber afaik die einzige Variante... Du kannst ja auch die Bilder in zwei Schritten komprimieren: Einmal die hochformatigen und einmal die anderen...

MfG Bischi

BTFYA
30-08-2009, 02:16
Hat vielleicht doch noch jemand ne idee wie man die Bilder alle auf einmal komprimieren könnte, und zwar beim kompilieren?

Legion
30-08-2009, 14:43
wie wäre es mit der stapelverarbeitung von photoshop?

edit: aso beim kompilieren ... kein plan :(

rais
31-08-2009, 19:57
Moin moin,

Hat vielleicht doch noch jemand ne idee wie man die Bilder alle auf einmal komprimieren könnte, und zwar beim kompilieren?
es wäre einfacher, wenn Du Dir dazu ein Skript bauen würdest, trotzdem ein möglicher Ansatz auf LaTeX-Ebene:


\documentclass{article}
\usepackage{graphicx}
\let\orgincludegraphics\includegraphics
\def\stripi#1.#2\relax{#1}
\newcommand*\stripext[1]{\stripi#1.\relax}
\renewcommand*\includegraphics[2][\empty]{%
\def\srcname{\stripext{#2}}%
\def\dstname{\srcname-klein}%
\IfFileExists{\dstname.jpg}{%
\typeout{`\dstname.jpg' bereits vorhanden.}%
}{%
\IfFileExists{\srcname.jpg}{%
\write18{jpegtopnm \srcname.jpg | pamscale -xscale=0.1 -yscale=0.1 | pnmtojpeg > \dstname.jpg}%
}{%
\typeout{Andere Dateierweiterungen erweitern...}%
}%
}%
\IfFileExists{\dstname.jpg}{%
\ifx#1\empty
\orgincludegraphics{\dstname}%
\else
\orgincludegraphics[#1]{\dstname}%
\fi
}{%
\typeout{`\dstname.jpg' (noch) nicht vorhanden.}%
\ifx#1\empty
\orgincludegraphics{\srcname}%
\else
\orgincludegraphics[#1]{\srcname}%
\fi
}%
}
\begin{document}
\includegraphics[width=\linewidth]{test}
\end{document}

als `foo.tex' abgespeichert und unter der Voraussetzung, daß sich dort auch eine `test.jpg' befindet, wird nach


pdflatex --shell-escape foo.tex

zunächst die ursprüngliche `test.jpg' eingebunden, da \includegraphics und der verwendete \write18 asynchron verlaufen, nach einem weiteren Durchlauf


pdflatex [--shell-escape] foo.tex

sollte dann die im Aufruf zuvor zuvor erzeugte `test-klein.jpg' eingebunden werden -- und bei mir unter Linux klappt das auch.
Soweit, so gut, nun zu den Stolperstellen;-)

\write18
Das, was Du innerhalb des \write18-Befehls angeben musst, hängt davon ab, mit welchem Programm Du wie Deine jpg-Datei(en) skalieren kannst; da Du Dich unter Win$ bewegst und ich mich unter Linux, dürfte das bei Dir anders aussehen.
Ob es bei Dir auch `--shell-escape' oder `--enable-write18' (oder wie auch immer) heißen muß, um eben externe Programme starten zu können, weiß ich nicht mit Bestimmtheit, aber Du kannst Dich innerhalb Deiner .log davon überzeugen, ob's zumindest diese Option betreffend geklappt hat: innerhalb der ersten fünf Zeilen (oder so) sollte dort dann


\write18 enabled

auftauchen.
Und dann sind LaTeX-Dokumente, die eben mit \write18 (oder vllt etwas obskurer mit \input{|irgendwas}) hantieren, grundsätzlich mit Vorsicht zu geniessen, immerhin übergibst Du damit die Kontrolle ans Betriebssystem ... oder kontrollierst wohlmöglich das System.;-)
Pfadangaben
Angenommen, Du hast ein Bild in einem Unterordner und dies entsprechend mitgeteilt


\includegraphics[]{irgend/ein/Ordner/foo}

was macht Dein Programm daraus, wenn der Pfad in dieser Form dem Teil als \srcname.jpg unterbreitet wird? Kann es überhaupt mit Pfadangeben umgehen? Vermutlich, aber kann es mit `/' als Trennzeichen umgehen? Unwahrscheinlich ... mit großer Wahrscheinlichkeit erwartet es Pfade mit `\' als Trennzeichen -- was wiederum auf (La)TeX-Ebene typischerweise den Anfang eines Befehls markiert, ansonsten könntest Du mit so etwas wie


\newcommand*\kpsewhich[1]{\input{|"kpsewhich #1"}}

(evtl bräuchtest Du dazu einen zusätzlichen `--enable-pipe' beim pdfLaTeX-Aufruf)
einen Befehl zur Verfügung stellen, dessen Ausgabe afaik zwar die richtigen Pfadtrennzeichen enthält, aber vermutlich beim Expandieren auf die Nase fällt -- kann ich nicht testen, hab kein Win$.
Dateiname
Nun ja, einfach `-klein' an den Dateinamen anzuhängen, mag bei Dir deshalb nicht funktionieren, weil Du bereits `wasweissich.jpg' und `wasweissich-klein.jpg' benutzt, in dem Fall bräuchtest Du Dir nur etwas für `-klein' einfallen zu lassen, das Du selbst bisher nicht am Ende einer Bilddatei nutzt und ändere den \def\dstname entsprechend.
Skalierung
Im Grunde genommen macht dieses Teil, was Du eingangs nicht wolltest, eben jede Bilddatei unabhängig davon, ob es im Hoch- oder Querformat vorliegt, mit konstantem Faktor runterzuskalieren. Abhilfe mag für Dich sein, statt `xscale', `yscale' so etwas wie `height' und/oder `width' zu verwenden, auch das hängt natürlich von dem von Dir verwendeten Programm bzw. dessen Möglichkeiten ab.
Systemabhängigkeit
mag hier eine untergeordnete Rolle spielen -- im Grunde genommen bräuchtest Du das Ganze ja nur einmal komplett durchzuspielen, danach könntest Du, so vorhanden, statt `Datei' einfach `Datei-klein' laden -- aber generell machst Du Dich mit Dingen wie `--shell-escape', `--enable-write18' und/oder `--enable-pipe' von Deinem Betriebssystem abhängig ... und einer der Vorteile von LaTeX ist ja gerade Betriebssystemunabhängigkeit bzw. Übertragbarkeit von einem System aufs Andere.

Sollte Dich das nicht dazu bringen, es doch lieber mit einem Shell- ... öhem, Bash-Skript zu versuchen -- der entsprechende Aufwand scheint mir dort wesentlich geringer -- bleibt mir vermutlich nur zu sagen: Viel Erfolg!

PS) Irgendwas ist mir bestimmt entgangen.:D

MfG