Python Imaging Library (PIL) op Mac OS X inclusief libjpeg en freetype2Ik wilde image manipulatie doen vanuit Python op mijn Mac. Dan kom je zo'n beetje automatisch op PIL uit.
Hieronder heb ik beschreven hoe je PIL zelf compileert met de juiste libraries erbij (PNG/JPEG/FREETYPE). Zoals ik het hier heb beschreven werkt het op mijn PowerPC MAC Mini met OS X 10.4 (Tiger), maar ik verwacht dat het op nieuwere Macs ook gewoon werkt.
—Benodigdheden:
$ curl -o jpegsrc.v8a.tar.gz http://www.ijg.org/files/jpegsrc.v8a.tar.gz $ tar xzf jpegsrc.v8a.tar.gz $ cd jpeg-8a $ ./configure --enable-shared --enable-static $ make $ sudo make install
$ curl -o freetype-2.3.12.tar.bz2 http://mirrors.aixtools.net/sv/freetype/freetype-2.3.12.tar.bz2 $ tar xjf freetype-2.3.12.tar.bz2 $ cd freetype-2.3.12
Als je truetype hinting en subpixel rendering wilt, moet je een paar #defines aanzetten in een headerfile. Zie docs/TRUETYPE voor details. Als dit gedaan is kun je gaan compileren:
$ ./configure --enable-shared --enable-static $ make $ sudo make install
$ curl -o PIL-Imaging-1.1.7.tar.gz http://effbot.org/media/downloads/PIL-1.1.7.tar.gz $ tar xzf PIL-Imaging-1.1.7.tar.gz $ cd PIL-1.1.7 $ python setup.py build
Er zou nu een soort van status rapport moeten staan met JPEG/PNG/FREETYPE op available.
$ sudo python setup.py install $ python selftest.py
De selftest moet foutloos verlopen en iets zeggen als "57 tests passed". Er lijken wat foutjes in te zitten over modules die niet beschikbaar zouden zijn maar ik vermoed dat de test niet helemaal lekker is, want de testcases doen het wel gewoon.
Hier nog een klein testprogje dat een plaatje rendert met wat tekst erin en het opslaat in jpeg, gif en png formaat:
import Image
import ImageDraw
import ImageFont
def getFont():
for path in [ "arial.ttf", "/System/Library/Fonts/Helvetica.dfont",
"/Library/Fonts/Arial.ttf", "c:/windows/fonts/arial.ttf",
"/usr/share/fonts/truetype/ttf-dejavu/DejaVuSans.ttf" ]:
try:
return ImageFont.truetype(path,30)
except:
pass
raise RuntimeError("PIL could not load an appropriate font")
img=Image.new("RGBA",(100,100))
draw=ImageDraw.Draw(img)
font=getFont()
print "using font:", font.getname()
draw.ellipse((0,0,100,100),fill="#ff0000",outline="#ffff00")
draw.line((0,0,100,100),"#00ff00",width=3)
draw.line((100,0,0,100),"#0000ff",width=3)
draw.text((10,30),"Hello!",font=font, fill="#ffffff")
img.save("testpic.jpg","JPEG",quality=90)
img.save("testpic.png","PNG")
img.save("testpic.gif","GIF")
i1=Image.open("testpic.jpg")
i2=Image.open("testpic.png")
i3=Image.open("testpic.gif")
print "PIL tests passed (libfreetype/ttf font rendering, jpeg/gif/png image formats)." • Wrote irmen at 02:13
(edited 5×, last on 14 May 2010)
| read 328× | Add comment