I was tired of looking at complicated (ehm, not free) applications to do this, so I wrote my own
Enjoy
#!/usr/bin/env python
from PIL import Image
import sys
if len(sys.argv)!=3 and len(sys.argv)!=4:
print "USAGE: <command> <filename> <black border percentage> <white border percentage>"
sys.exit(0)
filename=sys.argv[1]
percBlack=float(sys.argv[2])
if len(sys.argv)==3:
percWhite=0
else:
percWhite=float(sys.argv[3])
im = Image.open(filename)
blackWidth=int(im.size[0]*percBlack)
whiteWidth=int(im.size[0]*percWhite)
white = Image.new('RGB',(im.size[0]+whiteWidth,im.size[1]+whiteWidth),'white')
black = Image.new('RGB',(white.size[0]+blackWidth,white.size[1]+blackWidth),'black')
white.paste(im,(int(whiteWidth/2),int(whiteWidth/2)))
black.paste(white,(int(blackWidth/2),int(blackWidth/2)))
black.save('framed-'+filename)