Name: | convertScanMultiplePNGToPDF |
Typ: | bash |
benötigt: | potrace, convert / imageMagick und ein paar Graphikprogramme |
Ein Script, um png-Dateien, die beim Scannen entstehen in pdf Dateien
umzuwandenln.
Nachteil: nur schwarz weiß
Vorteil: hohe Qualität, sehr geringe Dateigröße
Details: Beim Scan von Dokumenten entstehen Pixel-Graphiken, die viele Details enhalten, die man nicht braucht.
Auf die Kaffee-Flecken kann man meist verzichten. Handelt es sich um reine schwarz-weiß Dokumente, so ist
der Ansatz wie unter
Das folgende Script faßt die beschriebenen Schritte zusammen. – wie immer keinerlei Gewähr. Download / View Source / Run it (depends on file type)
http://mirror.hamakor.org.il/archives/linux-il/07-2004/10831.htmlbeschrieben recht erfolgreich. Man wandelt die Dateien mittels potrace in eine Vektor-Graphik um. Diese wird dabei geglättet und anschließend wieder in eine Bitmap umgewandelt - nur halt glatter und mit weniger Flecken.
Das folgende Script faßt die beschriebenen Schritte zusammen. – wie immer keinerlei Gewähr.
hide
convertScanMultiplePNGToPDF
#!/bin/bash tdir=convert_tmp echo "see http://mirror.hamakor.org.il/archives/linux-il/07-2004/10831.html" echo "Karsten Roemke, September 2009" echo "Umwandlung in Vektorgrafik per potrace -> skalierbar, aber ca Faktor 10 größer" echo "auf potrace homepage noch hinweise - leider gerade keine Zeit ..." echo "scan sollte mit 600 dpi erfolgt sein nicht mit 300, nicht zu hell, lieber ein paar flecken!" echo "pngs koennen auch geloescht werden" echo "mit convert -density 600x600 allPages.pdf original.png" echo "bekommt man sie wieder - dauert nur :-)" echo "musste festellen, bei scan von 600 dpi haben die pdfs die " echo "doppelte Kantenlaenge - offenbar ist 300dpi irgendwo verdrahtet" echo "noch unklar - nein geloest, denke pgm kennt keine resolution" echo "spaeter wieder einbauen, pnmtotiff -> erledigt" echo "create $tdir in actual dir - ctrl c to stop" echo "Am Ende zwischenErgebnisse ($tdir) entfernen? (j) [j/n]" read tempWeg echo "otherwise enter threshold in [0;1], bigger is darker"; echo "original author says 0.5 I take 0.9 for a bad original, higher -> darker?" echo "thresh: " read thresh mkdir ./$tdir || exit echo "create pgms" for i in *.png do echo convert $i $tdir/${i%.png}.pgm convert $i $tdir/${i%.png}.pgm done cd $tdir echo "using potrace -> vector graphics" for i in *.pgm do echo potrace -g $i -o ${i%.pgm}-2.pgm potrace -g $i -o ${i%.pgm}-2.pgm done echo "to pbm via pgmtopbm" for i in *-2.pgm do echo pgmtopbm -threshold -value $thresh $i > ${i%-*}.pbm pgmtopbm -threshold -value $thresh $i > ${i%-*}.pbm done echo "generate tiffs with g4 black/white losless compression" for i in *.pbm do #ermittle auflösung xrest=$(identify -format "%x" ../${i%.pbm}.png) yrest=$(identify -format "%y" ../${i%.pbm}.png) resunit=inch #check ob PixelsPerCentimeter / bzw. nur Centimeter in xres enthalten #dann nehme ich x / y als pixel per cm an, sonst als pixel per inch echo $xrest | grep -q -i centimeter if [[ $? == 0 ]] #gefunden then resunit=centimeter fi #variablen splitten set -- $xrest # xrest auf $1..$n, siehe mein beispiel in splitVarByReadBetterSet #hobby-runden / abschneiden, dachte es geht mit printf xres=$(echo $1 | cut -d . -f 1) set -- $yrest yres=$(echo $1 | cut -d . -f 1) echo "found in orig image ${i%.pbm} xres $xres and yres $yres with unit per $resunit" echo pnmtotiff -xresolution $xres -yresolution $yres -resolutionunit $resunit -g4 $i > ${i%.pbm}.tiff pnmtotiff -xresolution $xres -yresolution $yres -resolutionunit $resunit -g4 $i > ${i%.pbm}.tiff done echo "concatenate tiffs" echo tiffcp *.tiff allPages.tiff tiffcp *.tiff allPages.tiff echo "convert to pdf" echo tiff2pdf -o ../allPages.pdf allPages.tiff tiff2pdf -o ../allPages.pdf allPages.tiff cd .. if [[ "$tempWeg." != "n." ]] then echo "cleaning up" rm -rf $tdir fi
Parsed using GeSHi 1.0.8.6
Karsten Römke (k Ponkt roemke at gmx in de), Rechtliches, Datenschutz, etc.
Rein private Seite, lediglich eine Spielerei Last modified: 2010-04-18
Created: 2010-04-18
Reason: –
Rein private Seite, lediglich eine Spielerei Last modified: 2010-04-18
Created: 2010-04-18
Reason: –