Każda wymówka jest dobra. Postanowiłem kuknąć w Pythona żeby zobaczyć, co tam się zmieniło od 2005, kiedy to ostatni raz miałem okazję napisać sobie małego toola do monitorowania połączeń między routerami. Miałem już rozwiązanie, szukałem problemu.
Męczę się z seriami obrazków. Mam kilka ładnych komiksów, które cholernie ciężko się przegląda i przegrywa (na przykład na N800), postanowiłem więc zagonić Pythona do generowania jednego, grubego PDF-a, który pozwoli mi robić zakładki i wygodnie czytać na dowolnym urządzeniu.
Spędziłem pół godziny przełączając się między Safari i Vimem. Ostatecznie wyszło coś takiego.
import dircache
import Image
import ImageFilter
from reportlab.pdfgen.canvas import Canvas
from reportlab.lib.pagesizes import A3
from reportlab.lib.pagesizes import A4
import os, sys
from stat import *
class PDFStack:
def __init__(self,filename):
self.filename = filename
self.pdf = Canvas(filename, pagesize = A4)
# debug
print filename
def addToStack(self,file):
#debug
mode = os.stat(file)[ST_MODE]
if S_ISDIR(mode):
print "I haz directory"
tree = ITree(file,self)
print "Adding...",file
try:
im = Image.open(file)
#im.filter(ImageFilter.BLUR)
#im.resize([2338,1654]) #A3 pi*drzwi
#im.resize([595,841]) #A4 pi*drzwi
#im.resize([200,300]);
#im.save('/tmp/'+file, "PNG")
self.pdf.drawImage(file,0,0,570,841) #hardoking, fuck yeah
self.pdf.showPage()
except IOError:
print "Meh, ", file, " is not an image file"
class ITree:
def __init__(self, dirname, stack):
dirlist = dircache.listdir(dirname)
for item in dirlist:
stack.addToStack(dirname +"/"+ item)
stack = PDFStack('/tmp/output.pdf')
tree = ITree('.',stack)
stack.pdf.save()
Wymagania to chyba Python 2.5 (działa ten dostarczony z OS X), Python Imaging Library 1.1.6 i ReportLab 2.2. Oczywiście, zero parametrów, więc jak komuś się chce, to może sobie dopisać obsługę argv. ;-) Mi już się nie chce, uzyskałem swojego PDF-a i mogę się uwalić, poczytać.
Cały kod potencjalnie ssie: choćby rekurencja, którą dopisałem jak przypomniałem sobie o podziale i rozmiary obrazków zakodowane na stałe. Ważne, że weekendowy projekt mam zaliczony i dopisuję sobie dwa i pół nerdpunkta do dzienniczka.
« N800 + OS2008 w obrazkach | Było blisko, cholernie blisko! »
Podobało się? dodaj kanał RSS do swojego czytnika.
Bronikowski.com © Emil Oppeln-Bronikowski <blog@bronikowski.com>
♥ (random bits of love) Makowski & Pepe
September 21st, 2008 at 22:02
Stary, tymi znaczkami na czarnym tle co to są na screenie widoczne to mnie przerażasz. Jak dla mnie z pięć nerdpunktów jak w pysk strzelił.
September 22nd, 2008 at 09:41
Hmm, ja to robiłem chyba prościej - convert z imagemagicka = pojedynczy obrazek na pdf, a potem pdftk.
Czyli:
convert 001.jpg 001.pdf
convert 002.jpg 002.pdf
pdftk 001.pdf 002.pdf cat output all.pdf
A całość uskryptowić dowolnym bashem czy innym pythonem.
September 22nd, 2008 at 14:47
Co do komiksów to istnieje kilka fajnych dedykowanych przeglądarek i tak się składa, że wczoraj u siebie na blogu robiłem mały przegląd tego co jest dostępne dla Linuksa (czyli w teorii powinno działać też na Mac OS X czy N800) => http://pbm.jogger.pl/2008/09/21/linuksowe-przegladarki-komiksow/
September 22nd, 2008 at 18:10
Ja z innej beczki: zamiast systemowego Preview pozwolę sobie polecić bezpłatnego Skima (http://skim-app.sourceforge.net/). Jak dla mnie o wiele lepsze narzędzie do PDF-ów.
September 22nd, 2008 at 18:12
Eeeee? Gdzieś wcięło mój komentarz?
Nie chce mi się znowu tyle pisać, więc krótko: Skim (http://skim-app.sourceforge.net/)
September 23rd, 2008 at 03:34
@LeszekT takiego pdftk nie mogłem wygooglać.
@byte przeszedł normalnie, a za skima dzięki, zaraz obadam.
September 23rd, 2008 at 05:39
@pbm Zjadło Twój komentarz. ;-) Zaraz sobie zobaczę.
September 23rd, 2008 at 16:02
Pdftk to strasznie fajne narzędzie. Brakuje mu moim zdaniem tylko transformowania plików do postaci `kilka stron na jednej`, ale tym może zająć się pdfnup (z ubuncianego pakietu pdfjam, jeśli ktoś jest zbyt leniwy, żeby szukać).