Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/PIL/ImageTk.py
diff options
context:
space:
mode:
Diffstat (limited to 'PIL/ImageTk.py')
-rw-r--r--PIL/ImageTk.py296
1 files changed, 0 insertions, 296 deletions
diff --git a/PIL/ImageTk.py b/PIL/ImageTk.py
deleted file mode 100644
index 30f7c0e..0000000
--- a/PIL/ImageTk.py
+++ /dev/null
@@ -1,296 +0,0 @@
-#
-# The Python Imaging Library.
-# $Id: ImageTk.py 2134 2004-10-06 08:55:20Z fredrik $
-#
-# a Tk display interface
-#
-# History:
-# 96-04-08 fl Created
-# 96-09-06 fl Added getimage method
-# 96-11-01 fl Rewritten, removed image attribute and crop method
-# 97-05-09 fl Use PyImagingPaste method instead of image type
-# 97-05-12 fl Minor tweaks to match the IFUNC95 interface
-# 97-05-17 fl Support the "pilbitmap" booster patch
-# 97-06-05 fl Added file= and data= argument to image constructors
-# 98-03-09 fl Added width and height methods to Image classes
-# 98-07-02 fl Use default mode for "P" images without palette attribute
-# 98-07-02 fl Explicitly destroy Tkinter image objects
-# 99-07-24 fl Support multiple Tk interpreters (from Greg Couch)
-# 99-07-26 fl Automatically hook into Tkinter (if possible)
-# 99-08-15 fl Hook uses _imagingtk instead of _imaging
-#
-# Copyright (c) 1997-1999 by Secret Labs AB
-# Copyright (c) 1996-1997 by Fredrik Lundh
-#
-# See the README file for information on usage and redistribution.
-#
-
-import Tkinter, Image
-
-##
-# The <b>ImageTk</b> module contains support to create and modify
-# Tkinter <b>BitmapImage</b> and <b>PhotoImage</b> objects.
-# <p>
-# For examples, see the demo programs in the <i>Scripts</i>
-# directory.
-##
-
-# --------------------------------------------------------------------
-# Check for Tkinter interface hooks
-
-_pilbitmap_ok = None
-
-def _pilbitmap_check():
- global _pilbitmap_ok
- if _pilbitmap_ok is None:
- try:
- im = Image.new("1", (1,1))
- Tkinter.BitmapImage(data="PIL:%d" % im.im.id)
- _pilbitmap_ok = 1
- except Tkinter.TclError:
- _pilbitmap_ok = 0
- return _pilbitmap_ok
-
-# --------------------------------------------------------------------
-# PhotoImage
-
-##
-# Creates a Tkinter-compatible photo image. This can be used
-# everywhere Tkinter expects an image object. If the image is an RGBA
-# image, pixels having alpha 0 are treated as transparent.
-
-class PhotoImage:
-
- ##
- # Create a photo image object. The constructor takes either
- # a PIL image, or a mode and a size. Alternatively, you can
- # use the <b>file</b> or <b>data</b> options to initialize
- # the photo image object.
- # <p>
- # @def __init__(image=None, size=None, **options)
- # @param image Either a PIL image, or a mode string. If a
- # mode string is used, a size must also be given.
- # @param size If the first argument is a mode string, this
- # defines the size of the image.
- # @keyparam file A filename to load the image from (using
- # Image.open(file)).
- # @keyparam data An 8-bit string containing image data (as
- # loaded from an image file).
-
- def __init__(self, image=None, size=None, **kw):
-
- # Tk compatibility: file or data
- if image is None:
- if kw.has_key("file"):
- image = Image.open(kw["file"])
- del kw["file"]
- elif kw.has_key("data"):
- from StringIO import StringIO
- image = Image.open(StringIO(kw["data"]))
- del kw["data"]
-
- if hasattr(image, "mode") and hasattr(image, "size"):
- # got an image instead of a mode
- mode = image.mode
- if mode == "P":
- # palette mapped data
- image.load()
- try:
- mode = image.palette.mode
- except AttributeError:
- mode = "RGB" # default
- size = image.size
- kw["width"], kw["height"] = size
- else:
- mode = image
- image = None
-
- if mode not in ["1", "L", "RGB", "RGBA"]:
- mode = Image.getmodebase(mode)
-
- self.__mode = mode
- self.__size = size
- self.__photo = apply(Tkinter.PhotoImage, (), kw)
- self.tk = self.__photo.tk
- if image:
- self.paste(image)
-
- def __del__(self):
- name = self.__photo.name
- self.__photo.name = None
- try:
- self.__photo.tk.call("image", "delete", name)
- except:
- pass # ignore internal errors
-
- ##
- # Get the Tkinter photo image identifier. This method is
- # automatically called by Tkinter whenever a PhotoImage object is
- # passed to a Tkinter method.
- #
- # @return A Tkinter photo image identifier (a string).
-
- def __str__(self):
- return str(self.__photo)
-
- ##
- # Get the width of the image.
- #
- # @return The width, in pixels.
-
- def width(self):
- return self.__size[0]
-
- ##
- # Get the height of the image.
- #
- # @return The height, in pixels.
-
- def height(self):
- return self.__size[1]
-
- ##
- # Paste a PIL image into the photo image. Note that this can
- # be very slow if the photo image is displayed.
- #
- # @param im A PIL image. The size must match the target region.
- # If the mode does not match, the image is converted to the
- # mode of the bitmap image.
- # @param box A 4-tuple defining the left, upper, right, and
- # lower pixel coordinate. If None is given instead of a
- # tuple, all of the image is assumed.
-
- def paste(self, im, box=None):
-
- # convert to blittable
- im.load()
- image = im.im
- if image.isblock() and im.mode == self.__mode:
- block = image
- else:
- block = image.new_block(self.__mode, im.size)
- image.convert2(block, image) # convert directly between buffers
-
- tk = self.__photo.tk
-
- try:
- tk.call("PyImagingPhoto", self.__photo, block.id)
- except Tkinter.TclError, v:
- # activate Tkinter hook
- try:
- import _imagingtk
- try:
- _imagingtk.tkinit(tk.interpaddr(), 1)
- except AttributeError:
- _imagingtk.tkinit(id(tk), 0)
- tk.call("PyImagingPhoto", self.__photo, block.id)
- except (ImportError, AttributeError, Tkinter.TclError):
- raise # configuration problem; cannot attach to Tkinter
-
-# --------------------------------------------------------------------
-# BitmapImage
-
-##
-# Create a Tkinter-compatible bitmap image. This can be used
-# everywhere Tkinter expects an image object.
-
-class BitmapImage:
-
- ##
- # Create a Tkinter-compatible bitmap image.
- # <p>
- # The given image must have mode "1". Pixels having value 0 are
- # treated as transparent. Options, if any, are passed on to
- # Tkinter. The most commonly used option is <b>foreground</b>,
- # which is used to specify the colour for the non-transparent
- # parts. See the Tkinter documentation for information on how to
- # specify colours.
- #
- # @def __init__(image=None, **options)
- # @param image A PIL image.
-
- def __init__(self, image=None, **kw):
-
- # Tk compatibility: file or data
- if image is None:
- if kw.has_key("file"):
- image = Image.open(kw["file"])
- del kw["file"]
- elif kw.has_key("data"):
- from StringIO import StringIO
- image = Image.open(StringIO(kw["data"]))
- del kw["data"]
-
- self.__mode = image.mode
- self.__size = image.size
-
- if _pilbitmap_check():
- # fast way (requires the pilbitmap booster patch)
- image.load()
- kw["data"] = "PIL:%d" % image.im.id
- self.__im = image # must keep a reference
- else:
- # slow but safe way
- kw["data"] = image.tobitmap()
- self.__photo = apply(Tkinter.BitmapImage, (), kw)
-
- def __del__(self):
- name = self.__photo.name
- self.__photo.name = None
- try:
- self.__photo.tk.call("image", "delete", name)
- except:
- pass # ignore internal errors
-
- ##
- # Get the width of the image.
- #
- # @return The width, in pixels.
-
- def width(self):
- return self.__size[0]
-
- ##
- # Get the height of the image.
- #
- # @return The height, in pixels.
-
- def height(self):
- return self.__size[1]
-
- ##
- # Get the Tkinter bitmap image identifier. This method is
- # automatically called by Tkinter whenever a BitmapImage object
- # is passed to a Tkinter method.
- #
- # @return A Tkinter bitmap image identifier (a string).
-
- def __str__(self):
- return str(self.__photo)
-
-##
-# Copies the contents of a PhotoImage to a PIL image memory.
-
-def getimage(photo):
- photo.tk.call("PyImagingPhotoGet", photo)
-
-# --------------------------------------------------------------------
-# Helper for the Image.show method.
-
-def _show(image, title):
-
- class UI(Tkinter.Label):
- def __init__(self, master, im):
- if im.mode == "1":
- self.image = BitmapImage(im, foreground="white", master=master)
- else:
- self.image = PhotoImage(im, master=master)
- Tkinter.Label.__init__(self, master, image=self.image,
- bg="black", bd=0)
-
- if not Tkinter._default_root:
- raise IOError, "tkinter not initialized"
- top = Tkinter.Toplevel()
- if title:
- top.title(title)
- UI(top, image).pack()