pilprint.py 2.3KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. #!/home/daccorsi/sources/protos/pboard/tg2env/bin/python
  2. #
  3. # The Python Imaging Library.
  4. # $Id$
  5. #
  6. # print image files to postscript printer
  7. #
  8. # History:
  9. # 0.1 1996-04-20 fl Created
  10. # 0.2 1996-10-04 fl Use draft mode when converting.
  11. # 0.3 2003-05-06 fl Fixed a typo or two.
  12. #
  13. VERSION = "pilprint 0.3/2003-05-05"
  14. from PIL import Image
  15. from PIL import PSDraw
  16. letter = ( 1.0*72, 1.0*72, 7.5*72, 10.0*72 )
  17. def description(file, image):
  18. import os
  19. title = os.path.splitext(os.path.split(file)[1])[0]
  20. format = " (%dx%d "
  21. if image.format:
  22. format = " (" + image.format + " %dx%d "
  23. return title + format % image.size + image.mode + ")"
  24. import getopt, os, sys
  25. if len(sys.argv) == 1:
  26. print "PIL Print 0.2a1/96-10-04 -- print image files"
  27. print "Usage: pilprint files..."
  28. print "Options:"
  29. print " -c colour printer (default is monochrome)"
  30. print " -p print via lpr (default is stdout)"
  31. print " -P <printer> same as -p but use given printer"
  32. sys.exit(1)
  33. try:
  34. opt, argv = getopt.getopt(sys.argv[1:], "cdpP:")
  35. except getopt.error, v:
  36. print v
  37. sys.exit(1)
  38. printer = None # print to stdout
  39. monochrome = 1 # reduce file size for most common case
  40. for o, a in opt:
  41. if o == "-d":
  42. # debug: show available drivers
  43. Image.init()
  44. print Image.ID
  45. sys.exit(1)
  46. elif o == "-c":
  47. # colour printer
  48. monochrome = 0
  49. elif o == "-p":
  50. # default printer channel
  51. printer = "lpr"
  52. elif o == "-P":
  53. # printer channel
  54. printer = "lpr -P%s" % a
  55. for file in argv:
  56. try:
  57. im = Image.open(file)
  58. title = description(file, im)
  59. if monochrome and im.mode not in ["1", "L"]:
  60. im.draft("L", im.size)
  61. im = im.convert("L")
  62. if printer:
  63. fp = os.popen(printer, "w")
  64. else:
  65. fp = sys.stdout
  66. ps = PSDraw.PSDraw(fp)
  67. ps.begin_document()
  68. ps.setfont("Helvetica-Narrow-Bold", 18)
  69. ps.text((letter[0], letter[3]+24), title)
  70. ps.setfont("Helvetica-Narrow-Bold", 8)
  71. ps.text((letter[0], letter[1]-30), VERSION)
  72. ps.image(letter, im)
  73. ps.end_document()
  74. except:
  75. print "cannot print image",
  76. print "(%s:%s)" % (sys.exc_type, sys.exc_value)