Spinsels op het web
actions » SearchLogin 215 articles • 30 Jul 2010

Article with comments

Saturday, 02 Aug 2008

permalink Python Imaging Library (PIL) op Mac OS X inclusief libjpeg en freetype2

Ik 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:

  1. Compile & install libjpeg De actuele versie is libjpeg v8a.
    $ 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

  2. Compile & install freetype2 De actuele versie is 2.3.12.

    $ 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

  3. Compile & install PIL De actuele versie is 1.1.7.

    $ 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

Comments (0)

No comments for this article yet.

Write a comment

Your name  
E-mail   (only visible for blog owner)
Homepage
Text:

[b] [i] [u] [tt] [center] [code] [quote] [url] [url=] [img] [@] [@@] [@:]
detailed help about markup
You must answer the following to be able to submit.
[Captcha Image] Type the letters you see in the image.
(Unreadable? Click on it for another one)

Process times: page=0.029 request=0.037 cpu=0.030