diff --git a/Scripts/README.rst b/Scripts/README.rst
deleted file mode 100644
index c8b06d59c..000000000
--- a/Scripts/README.rst
+++ /dev/null
@@ -1,65 +0,0 @@
-Scripts
-=======
-
-This directory contains a number of more or less trivial utilities
-and demo programs.
-
-Comments and contributions are welcome.
-
-
-
-pildriver.py (by Eric S. Raymond)
---------------------------------------------------------------------
-
-A class implementing an image-processing calculator for scripts.
-Parses lists of commands (or, called interactively, command-line
-arguments) into image loads, transformations, and saves.
-
-viewer.py
---------------------------------------------------------------------
-
-A simple image viewer. Can display all file formats handled by
-PIL. Transparent images are properly handled.
-
-thresholder.py
---------------------------------------------------------------------
-
-A simple utility that demonstrates how a transparent 1-bit overlay
-can be used to show the current thresholding of an 8-bit image.
-
-enhancer.py
---------------------------------------------------------------------
-
-Illustrates the ImageEnhance module. Drag the sliders to modify the
-images. This might be very slow on some platforms, depending on the
-Tk version.
-
-painter.py
---------------------------------------------------------------------
-
-Illustrates how a painting program could be based on PIL and Tk.
-Press the left mouse button and drag over the image to remove the
-colour. Some clever tricks have been used to get decent performance
-when updating the screen; see the sources for details.
-
-player.py
---------------------------------------------------------------------
-
-A simple image sequence player. You can use either a sequence format
-like FLI/FLC, GIF, or ARG, or give a number of images which are
-interpreted as frames in a sequence. All frames must have the same
-size.
-
-gifmaker.py
---------------------------------------------------------------------
-
-Convert a sequence file to a GIF animation.
-
-Note that the GIF encoder provided with this release of PIL writes
-uncompressed GIF files only, so the resulting animations are rather
-large compared with these created by other tools.
-
-explode.py
---------------------------------------------------------------------
-
-Split a sequence file into individual frames.
diff --git a/Scripts/enhancer.py b/Scripts/enhancer.py
deleted file mode 100755
index ee333974f..000000000
--- a/Scripts/enhancer.py
+++ /dev/null
@@ -1,64 +0,0 @@
-#!/usr/bin/env python
-#
-# The Python Imaging Library
-# $Id$
-#
-# this demo script creates four windows containing an image and a slider.
-# drag the slider to modify the image.
-#
-
-import sys
-
-if sys.version_info[0] > 2:
- import tkinter
-else:
- import Tkinter as tkinter
-
-from PIL import Image, ImageTk, ImageEnhance
-
-#
-# enhancer widget
-
-
-class Enhance(tkinter.Frame):
- def __init__(self, master, image, name, enhancer, lo, hi):
- tkinter.Frame.__init__(self, master)
-
- # set up the image
- self.tkim = ImageTk.PhotoImage(image.mode, image.size)
- self.enhancer = enhancer(image)
- self.update("1.0") # normalize
-
- # image window
- tkinter.Label(self, image=self.tkim).pack()
-
- # scale
- s = tkinter.Scale(self, label=name, orient=tkinter.HORIZONTAL,
- from_=lo, to=hi, resolution=0.01,
- command=self.update)
- s.set(self.value)
- s.pack()
-
- def update(self, value):
- self.value = float(value)
- self.tkim.paste(self.enhancer.enhance(self.value))
-
-#
-# main
-
-if len(sys.argv) != 2:
- print("Usage: enhancer file")
- sys.exit(1)
-
-root = tkinter.Tk()
-
-im = Image.open(sys.argv[1])
-
-im.thumbnail((200, 200))
-
-Enhance(root, im, "Color", ImageEnhance.Color, 0.0, 4.0).pack()
-Enhance(tkinter.Toplevel(), im, "Sharpness", ImageEnhance.Sharpness, -2.0, 2.0).pack()
-Enhance(tkinter.Toplevel(), im, "Brightness", ImageEnhance.Brightness, -1.0, 3.0).pack()
-Enhance(tkinter.Toplevel(), im, "Contrast", ImageEnhance.Contrast, -1.0, 3.0).pack()
-
-root.mainloop()
diff --git a/Scripts/explode.py b/Scripts/explode.py
deleted file mode 100755
index 53436100b..000000000
--- a/Scripts/explode.py
+++ /dev/null
@@ -1,112 +0,0 @@
-#!/usr/bin/env python
-#
-# The Python Imaging Library
-# $Id$
-#
-# split an animation into a number of frame files
-#
-
-from __future__ import print_function
-
-from PIL import Image
-import os
-import sys
-
-
-class Interval(object):
-
- def __init__(self, interval="0"):
-
- self.setinterval(interval)
-
- def setinterval(self, interval):
-
- self.hilo = []
-
- for s in interval.split(","):
- if not s.strip():
- continue
- try:
- v = int(s)
- if v < 0:
- lo, hi = 0, -v
- else:
- lo = hi = v
- except ValueError:
- i = s.find("-")
- lo, hi = int(s[:i]), int(s[i+1:])
-
- self.hilo.append((hi, lo))
-
- if not self.hilo:
- self.hilo = [(sys.maxsize, 0)]
-
- def __getitem__(self, index):
-
- for hi, lo in self.hilo:
- if hi >= index >= lo:
- return 1
- return 0
-
-# --------------------------------------------------------------------
-# main program
-
-html = 0
-
-if sys.argv[1:2] == ["-h"]:
- html = 1
- del sys.argv[1]
-
-if not sys.argv[2:]:
- print()
- print("Syntax: python explode.py infile template [range]")
- print()
- print("The template argument is used to construct the names of the")
- print("individual frame files. The frames are numbered file001.ext,")
- print("file002.ext, etc. You can insert %d to control the placement")
- print("and syntax of the frame number.")
- print()
- print("The optional range argument specifies which frames to extract.")
- print("You can give one or more ranges like 1-10, 5, -15 etc. If")
- print("omitted, all frames are extracted.")
- sys.exit(1)
-
-infile = sys.argv[1]
-outfile = sys.argv[2]
-
-frames = Interval(",".join(sys.argv[3:]))
-
-try:
- # check if outfile contains a placeholder
- outfile % 1
-except TypeError:
- file, ext = os.path.splitext(outfile)
- outfile = file + "%03d" + ext
-
-ix = 1
-
-im = Image.open(infile)
-
-if html:
- file, ext = os.path.splitext(outfile)
- html = open(file+".html", "w")
- html.write("\n
\n")
-
-while True:
-
- if frames[ix]:
- im.save(outfile % ix)
- print(outfile % ix)
-
- if html:
- html.write("![](%s)
\n" % outfile % ix)
-
- try:
- im.seek(ix)
- except EOFError:
- break
-
- ix += 1
-
-if html:
- html.write("\n\n")
diff --git a/Scripts/gifmaker.py b/Scripts/gifmaker.py
deleted file mode 100755
index c0679ca79..000000000
--- a/Scripts/gifmaker.py
+++ /dev/null
@@ -1,31 +0,0 @@
-#!/usr/bin/env python
-#
-# The Python Imaging Library
-# $Id$
-#
-# convert sequence format to GIF animation
-#
-# history:
-# 97-01-03 fl created
-#
-# Copyright (c) Secret Labs AB 1997. All rights reserved.
-# Copyright (c) Fredrik Lundh 1997.
-#
-# See the README file for information on usage and redistribution.
-#
-
-from __future__ import print_function
-
-from PIL import Image
-
-if __name__ == "__main__":
-
- import sys
-
- if len(sys.argv) < 3:
- print("GIFMAKER -- create GIF animations")
- print("Usage: gifmaker infile outfile")
- sys.exit(1)
-
- im = Image.open(sys.argv[1])
- im.save(sys.argv[2], save_all=True)
diff --git a/Scripts/painter.py b/Scripts/painter.py
deleted file mode 100755
index 30d55c2b6..000000000
--- a/Scripts/painter.py
+++ /dev/null
@@ -1,84 +0,0 @@
-#!/usr/bin/env python
-#
-# The Python Imaging Library
-# $Id$
-#
-# this demo script illustrates pasting into an already displayed
-# photoimage. note that the current version of Tk updates the whole
-# image every time we paste, so to get decent performance, we split
-# the image into a set of tiles.
-#
-
-import sys
-
-if sys.version_info[0] > 2:
- import tkinter
-else:
- import Tkinter as tkinter
-
-from PIL import Image, ImageTk
-
-#
-# painter widget
-
-
-class PaintCanvas(tkinter.Canvas):
- def __init__(self, master, image):
- tkinter.Canvas.__init__(self, master,
- width=image.size[0], height=image.size[1])
-
- # fill the canvas
- self.tile = {}
- self.tilesize = tilesize = 32
- xsize, ysize = image.size
- for x in range(0, xsize, tilesize):
- for y in range(0, ysize, tilesize):
- box = x, y, min(xsize, x+tilesize), min(ysize, y+tilesize)
- tile = ImageTk.PhotoImage(image.crop(box))
- self.create_image(x, y, image=tile, anchor=tkinter.NW)
- self.tile[(x, y)] = box, tile
-
- self.image = image
-
- self.bind("", self.paint)
-
- def paint(self, event):
- xy = event.x - 10, event.y - 10, event.x + 10, event.y + 10
- im = self.image.crop(xy)
-
- # process the image in some fashion
- im = im.convert("L")
-
- self.image.paste(im, xy)
- self.repair(xy)
-
- def repair(self, box):
- # update canvas
- dx = box[0] % self.tilesize
- dy = box[1] % self.tilesize
- for x in range(box[0]-dx, box[2]+1, self.tilesize):
- for y in range(box[1]-dy, box[3]+1, self.tilesize):
- try:
- xy, tile = self.tile[(x, y)]
- tile.paste(self.image.crop(xy))
- except KeyError:
- pass # outside the image
- self.update_idletasks()
-
-#
-# main
-
-if len(sys.argv) != 2:
- print("Usage: painter file")
- sys.exit(1)
-
-root = tkinter.Tk()
-
-im = Image.open(sys.argv[1])
-
-if im.mode != "RGB":
- im = im.convert("RGB")
-
-PaintCanvas(root, im).pack()
-
-root.mainloop()
diff --git a/Scripts/pilconvert.py b/Scripts/pilconvert.py
deleted file mode 100755
index b9ebd52ae..000000000
--- a/Scripts/pilconvert.py
+++ /dev/null
@@ -1,99 +0,0 @@
-#!/usr/bin/env python
-#
-# The Python Imaging Library.
-# $Id$
-#
-# convert image files
-#
-# History:
-# 0.1 96-04-20 fl Created
-# 0.2 96-10-04 fl Use draft mode when converting images
-# 0.3 96-12-30 fl Optimize output (PNG, JPEG)
-# 0.4 97-01-18 fl Made optimize an option (PNG, JPEG)
-# 0.5 98-12-30 fl Fixed -f option (from Anthony Baxter)
-#
-
-from __future__ import print_function
-
-import getopt
-import string
-import sys
-
-from PIL import Image
-
-
-def usage():
- print("PIL Convert 0.5/1998-12-30 -- convert image files")
- print("Usage: pilconvert [option] infile outfile")
- print()
- print("Options:")
- print()
- print(" -c convert to format (default is given by extension)")
- print()
- print(" -g convert to greyscale")
- print(" -p convert to palette image (using standard palette)")
- print(" -r convert to rgb")
- print()
- print(" -o optimize output (trade speed for size)")
- print(" -q set compression quality (0-100, JPEG only)")
- print()
- print(" -f list supported file formats")
- sys.exit(1)
-
-if len(sys.argv) == 1:
- usage()
-
-try:
- opt, argv = getopt.getopt(sys.argv[1:], "c:dfgopq:r")
-except getopt.error as v:
- print(v)
- sys.exit(1)
-
-output_format = None
-convert = None
-
-options = {}
-
-for o, a in opt:
-
- if o == "-f":
- Image.init()
- id = sorted(Image.ID)
- print("Supported formats (* indicates output format):")
- for i in id:
- if i in Image.SAVE:
- print(i+"*", end=' ')
- else:
- print(i, end=' ')
- sys.exit(1)
-
- elif o == "-c":
- output_format = a
-
- if o == "-g":
- convert = "L"
- elif o == "-p":
- convert = "P"
- elif o == "-r":
- convert = "RGB"
-
- elif o == "-o":
- options["optimize"] = 1
- elif o == "-q":
- options["quality"] = string.atoi(a)
-
-if len(argv) != 2:
- usage()
-
-try:
- im = Image.open(argv[0])
- if convert and im.mode != convert:
- im.draft(convert, im.size)
- im = im.convert(convert)
- if output_format:
- im.save(argv[1], output_format, **options)
- else:
- im.save(argv[1], **options)
-except:
- print("cannot convert image", end=' ')
- print("(%s:%s)" % (sys.exc_info()[0], sys.exc_info()[1]))
diff --git a/Scripts/pildriver.py b/Scripts/pildriver.py
deleted file mode 100755
index cc425ad08..000000000
--- a/Scripts/pildriver.py
+++ /dev/null
@@ -1,526 +0,0 @@
-#!/usr/bin/env python
-"""PILdriver, an image-processing calculator using PIL.
-
-An instance of class PILDriver is essentially a software stack machine
-(Polish-notation interpreter) for sequencing PIL image
-transformations. The state of the instance is the interpreter stack.
-
-The only method one will normally invoke after initialization is the
-`execute' method. This takes an argument list of tokens, pushes them
-onto the instance's stack, and then tries to clear the stack by
-successive evaluation of PILdriver operators. Any part of the stack
-not cleaned off persists and is part of the evaluation context for
-the next call of the execute method.
-
-PILDriver doesn't catch any exceptions, on the theory that these
-are actually diagnostic information that should be interpreted by
-the calling code.
-
-When called as a script, the command-line arguments are passed to
-a PILDriver instance. If there are no command-line arguments, the
-module runs an interactive interpreter, each line of which is split into
-space-separated tokens and passed to the execute method.
-
-In the method descriptions below, a first line beginning with the string
-`usage:' means this method can be invoked with the token that follows
-it. Following <>-enclosed arguments describe how the method interprets
-the entries on the stack. Each argument specification begins with a
-type specification: either `int', `float', `string', or `image'.
-
-All operations consume their arguments off the stack (use `dup' to
-keep copies around). Use `verbose 1' to see the stack state displayed
-before each operation.
-
-Usage examples:
-
- `show crop 0 0 200 300 open test.png' loads test.png, crops out a portion
-of its upper-left-hand corner and displays the cropped portion.
-
- `save rotated.png rotate 30 open test.tiff' loads test.tiff, rotates it
-30 degrees, and saves the result as rotated.png (in PNG format).
-"""
-# by Eric S. Raymond
-# $Id$
-
-# TO DO:
-# 1. Add PILFont capabilities, once that's documented.
-# 2. Add PILDraw operations.
-# 3. Add support for composing and decomposing multiple-image files.
-#
-
-from __future__ import print_function
-
-from PIL import Image
-
-
-class PILDriver(object):
-
- verbose = 0
-
- def do_verbose(self):
- """usage: verbose
-
- Set verbosity flag from top of stack.
- """
- self.verbose = int(self.do_pop())
-
- # The evaluation stack (internal only)
-
- stack = [] # Stack of pending operations
-
- def push(self, item):
- "Push an argument onto the evaluation stack."
- self.stack.insert(0, item)
-
- def top(self):
- "Return the top-of-stack element."
- return self.stack[0]
-
- # Stack manipulation (callable)
-
- def do_clear(self):
- """usage: clear
-
- Clear the stack.
- """
- self.stack = []
-
- def do_pop(self):
- """usage: pop
-
- Discard the top element on the stack.
- """
- return self.stack.pop(0)
-
- def do_dup(self):
- """usage: dup
-
- Duplicate the top-of-stack item.
- """
- if hasattr(self, 'format'): # If it's an image, do a real copy
- dup = self.stack[0].copy()
- else:
- dup = self.stack[0]
- self.push(dup)
-
- def do_swap(self):
- """usage: swap
-
- Swap the top-of-stack item with the next one down.
- """
- self.stack = [self.stack[1], self.stack[0]] + self.stack[2:]
-
- # Image module functions (callable)
-
- def do_new(self):
- """usage: new :
-
- Create and push a greyscale image of given size and color.
- """
- xsize = int(self.do_pop())
- ysize = int(self.do_pop())
- color = int(self.do_pop())
- self.push(Image.new("L", (xsize, ysize), color))
-
- def do_open(self):
- """usage: open
-
- Open the indicated image, read it, push the image on the stack.
- """
- self.push(Image.open(self.do_pop()))
-
- def do_blend(self):
- """usage: blend
-
- Replace two images and an alpha with the blended image.
- """
- image1 = self.do_pop()
- image2 = self.do_pop()
- alpha = float(self.do_pop())
- self.push(Image.blend(image1, image2, alpha))
-
- def do_composite(self):
- """usage: composite
-
- Replace two images and a mask with their composite.
- """
- image1 = self.do_pop()
- image2 = self.do_pop()
- mask = self.do_pop()
- self.push(Image.composite(image1, image2, mask))
-
- def do_merge(self):
- """usage: merge
- [ [ []]]
-
- Merge top-of stack images in a way described by the mode.
- """
- mode = self.do_pop()
- bandlist = []
- for band in mode:
- bandlist.append(self.do_pop())
- self.push(Image.merge(mode, bandlist))
-
- # Image class methods
-
- def do_convert(self):
- """usage: convert
-
- Convert the top image to the given mode.
- """
- mode = self.do_pop()
- image = self.do_pop()
- self.push(image.convert(mode))
-
- def do_copy(self):
- """usage: copy
-
- Make and push a true copy of the top image.
- """
- self.dup()
-
- def do_crop(self):
- """usage: crop
-
-
- Crop and push a rectangular region from the current image.
- """
- left = int(self.do_pop())
- upper = int(self.do_pop())
- right = int(self.do_pop())
- lower = int(self.do_pop())
- image = self.do_pop()
- self.push(image.crop((left, upper, right, lower)))
-
- def do_draft(self):
- """usage: draft
-
- Configure the loader for a given mode and size.
- """
- mode = self.do_pop()
- xsize = int(self.do_pop())
- ysize = int(self.do_pop())
- self.push(self.draft(mode, (xsize, ysize)))
-
- def do_filter(self):
- """usage: filter
-
- Process the top image with the given filter.
- """
- from PIL import ImageFilter
- imageFilter = getattr(ImageFilter, self.do_pop().upper())
- image = self.do_pop()
- self.push(image.filter(imageFilter))
-
- def do_getbbox(self):
- """usage: getbbox
-
- Push left, upper, right, and lower pixel coordinates of the top image.
- """
- bounding_box = self.do_pop().getbbox()
- self.push(bounding_box[3])
- self.push(bounding_box[2])
- self.push(bounding_box[1])
- self.push(bounding_box[0])
-
- def do_getextrema(self):
- """usage: extrema
-
- Push minimum and maximum pixel values of the top image.
- """
- extrema = self.do_pop().extrema()
- self.push(extrema[1])
- self.push(extrema[0])
-
- def do_offset(self):
- """usage: offset
-
- Offset the pixels in the top image.
- """
- xoff = int(self.do_pop())
- yoff = int(self.do_pop())
- image = self.do_pop()
- self.push(image.offset(xoff, yoff))
-
- def do_paste(self):
- """usage: paste
-
-
- Paste figure image into ground with upper left at given offsets.
- """
- figure = self.do_pop()
- xoff = int(self.do_pop())
- yoff = int(self.do_pop())
- ground = self.do_pop()
- if figure.mode == "RGBA":
- ground.paste(figure, (xoff, yoff), figure)
- else:
- ground.paste(figure, (xoff, yoff))
- self.push(ground)
-
- def do_resize(self):
- """usage: resize
-
- Resize the top image.
- """
- ysize = int(self.do_pop())
- xsize = int(self.do_pop())
- image = self.do_pop()
- self.push(image.resize((xsize, ysize)))
-
- def do_rotate(self):
- """usage: rotate
-
- Rotate image through a given angle
- """
- angle = int(self.do_pop())
- image = self.do_pop()
- self.push(image.rotate(angle))
-
- def do_save(self):
- """usage: save
-
- Save image with default options.
- """
- filename = self.do_pop()
- image = self.do_pop()
- image.save(filename)
-
- def do_save2(self):
- """usage: save2
-
- Save image with specified options.
- """
- filename = self.do_pop()
- options = self.do_pop()
- image = self.do_pop()
- image.save(filename, None, options)
-
- def do_show(self):
- """usage: show
-
- Display and pop the top image.
- """
- self.do_pop().show()
-
- def do_thumbnail(self):
- """usage: thumbnail
-
- Modify the top image in the stack to contain a thumbnail of itself.
- """
- ysize = int(self.do_pop())
- xsize = int(self.do_pop())
- self.top().thumbnail((xsize, ysize))
-
- def do_transpose(self):
- """usage: transpose
-
- Transpose the top image.
- """
- transpose = self.do_pop().upper()
- image = self.do_pop()
- self.push(image.transpose(transpose))
-
- # Image attributes
-
- def do_format(self):
- """usage: format
-
- Push the format of the top image onto the stack.
- """
- self.push(self.do_pop().format)
-
- def do_mode(self):
- """usage: mode
-
- Push the mode of the top image onto the stack.
- """
- self.push(self.do_pop().mode)
-
- def do_size(self):
- """usage: size
-
- Push the image size on the stack as (y, x).
- """
- size = self.do_pop().size
- self.push(size[0])
- self.push(size[1])
-
- # ImageChops operations
-
- def do_invert(self):
- """usage: invert
-
- Invert the top image.
- """
- from PIL import ImageChops
- self.push(ImageChops.invert(self.do_pop()))
-
- def do_lighter(self):
- """usage: lighter
-
- Pop the two top images, push an image of the lighter pixels of both.
- """
- from PIL import ImageChops
- image1 = self.do_pop()
- image2 = self.do_pop()
- self.push(ImageChops.lighter(image1, image2))
-
- def do_darker(self):
- """usage: darker
-
- Pop the two top images, push an image of the darker pixels of both.
- """
- from PIL import ImageChops
- image1 = self.do_pop()
- image2 = self.do_pop()
- self.push(ImageChops.darker(image1, image2))
-
- def do_difference(self):
- """usage: difference
-
- Pop the two top images, push the difference image
- """
- from PIL import ImageChops
- image1 = self.do_pop()
- image2 = self.do_pop()
- self.push(ImageChops.difference(image1, image2))
-
- def do_multiply(self):
- """usage: multiply
-
- Pop the two top images, push the multiplication image.
- """
- from PIL import ImageChops
- image1 = self.do_pop()
- image2 = self.do_pop()
- self.push(ImageChops.multiply(image1, image2))
-
- def do_screen(self):
- """usage: screen
-
- Pop the two top images, superimpose their inverted versions.
- """
- from PIL import ImageChops
- image2 = self.do_pop()
- image1 = self.do_pop()
- self.push(ImageChops.screen(image1, image2))
-
- def do_add(self):
- """usage: add
-
- Pop the two top images, produce the scaled sum with offset.
- """
- from PIL import ImageChops
- image1 = self.do_pop()
- image2 = self.do_pop()
- scale = float(self.do_pop())
- offset = int(self.do_pop())
- self.push(ImageChops.add(image1, image2, scale, offset))
-
- def do_subtract(self):
- """usage: subtract
-
- Pop the two top images, produce the scaled difference with offset.
- """
- from PIL import ImageChops
- image1 = self.do_pop()
- image2 = self.do_pop()
- scale = float(self.do_pop())
- offset = int(self.do_pop())
- self.push(ImageChops.subtract(image1, image2, scale, offset))
-
- # ImageEnhance classes
-
- def do_color(self):
- """usage: color
-
- Enhance color in the top image.
- """
- from PIL import ImageEnhance
- factor = float(self.do_pop())
- image = self.do_pop()
- enhancer = ImageEnhance.Color(image)
- self.push(enhancer.enhance(factor))
-
- def do_contrast(self):
- """usage: contrast
-
- Enhance contrast in the top image.
- """
- from PIL import ImageEnhance
- factor = float(self.do_pop())
- image = self.do_pop()
- enhancer = ImageEnhance.Contrast(image)
- self.push(enhancer.enhance(factor))
-
- def do_brightness(self):
- """usage: brightness
-
- Enhance brightness in the top image.
- """
- from PIL import ImageEnhance
- factor = float(self.do_pop())
- image = self.do_pop()
- enhancer = ImageEnhance.Brightness(image)
- self.push(enhancer.enhance(factor))
-
- def do_sharpness(self):
- """usage: sharpness
-
- Enhance sharpness in the top image.
- """
- from PIL import ImageEnhance
- factor = float(self.do_pop())
- image = self.do_pop()
- enhancer = ImageEnhance.Sharpness(image)
- self.push(enhancer.enhance(factor))
-
- # The interpreter loop
-
- def execute(self, list):
- "Interpret a list of PILDriver commands."
- list.reverse()
- while len(list) > 0:
- self.push(list[0])
- list = list[1:]
- if self.verbose:
- print("Stack: " + repr(self.stack))
- top = self.top()
- if not isinstance(top, str):
- continue
- funcname = "do_" + top
- if not hasattr(self, funcname):
- continue
- else:
- self.do_pop()
- func = getattr(self, funcname)
- func()
-
-if __name__ == '__main__':
- import sys
-
- # If we see command-line arguments, interpret them as a stack state
- # and execute. Otherwise go interactive.
-
- driver = PILDriver()
- if len(sys.argv[1:]) > 0:
- driver.execute(sys.argv[1:])
- else:
- print("PILDriver says hello.")
- while True:
- try:
- if sys.version_info[0] >= 3:
- line = input('pildriver> ')
- else:
- line = raw_input('pildriver> ')
- except EOFError:
- print("\nPILDriver says goodbye.")
- break
- driver.execute(line.split())
- print(driver.stack)
-
-# The following sets edit modes for GNU EMACS
-# Local Variables:
-# mode:python
-# End:
diff --git a/Scripts/pilfile.py b/Scripts/pilfile.py
deleted file mode 100755
index dab240e2f..000000000
--- a/Scripts/pilfile.py
+++ /dev/null
@@ -1,101 +0,0 @@
-#!/usr/bin/env python
-#
-# The Python Imaging Library.
-# $Id$
-#
-# a utility to identify image files
-#
-# this script identifies image files, extracting size and
-# pixel mode information for known file formats. Note that
-# you don't need the PIL C extension to use this module.
-#
-# History:
-# 0.0 1995-09-01 fl Created
-# 0.1 1996-05-18 fl Modified options, added debugging mode
-# 0.2 1996-12-29 fl Added verify mode
-# 0.3 1999-06-05 fl Don't mess up on class exceptions (1.5.2 and later)
-# 0.4 2003-09-30 fl Expand wildcards on Windows; robustness tweaks
-#
-
-from __future__ import print_function
-
-import getopt
-import glob
-import logging
-import sys
-
-from PIL import Image
-
-if len(sys.argv) == 1:
- print("PIL File 0.4/2003-09-30 -- identify image files")
- print("Usage: pilfile [option] files...")
- print("Options:")
- print(" -f list supported file formats")
- print(" -i show associated info and tile data")
- print(" -v verify file headers")
- print(" -q quiet, don't warn for unidentified/missing/broken files")
- sys.exit(1)
-
-try:
- opt, args = getopt.getopt(sys.argv[1:], "fqivD")
-except getopt.error as v:
- print(v)
- sys.exit(1)
-
-verbose = quiet = verify = 0
-logging_level = "WARNING"
-
-for o, a in opt:
- if o == "-f":
- Image.init()
- id = sorted(Image.ID)
- print("Supported formats:")
- for i in id:
- print(i, end=' ')
- sys.exit(1)
- elif o == "-i":
- verbose = 1
- elif o == "-q":
- quiet = 1
- elif o == "-v":
- verify = 1
- elif o == "-D":
- logging_level = "DEBUG"
-
-logging.basicConfig(level=logging_level)
-
-
-def globfix(files):
- # expand wildcards where necessary
- if sys.platform == "win32":
- out = []
- for file in files:
- if glob.has_magic(file):
- out.extend(glob.glob(file))
- else:
- out.append(file)
- return out
- return files
-
-for file in globfix(args):
- try:
- im = Image.open(file)
- print("%s:" % file, im.format, "%dx%d" % im.size, im.mode, end=' ')
- if verbose:
- print(im.info, im.tile, end=' ')
- print()
- if verify:
- try:
- im.verify()
- except:
- if not quiet:
- print("failed to verify image", end=' ')
- print("(%s:%s)" % (sys.exc_info()[0], sys.exc_info()[1]))
- except IOError as v:
- if not quiet:
- print(file, "failed:", v)
- except:
- import traceback
- if not quiet:
- print(file, "failed:", "unexpected error")
- traceback.print_exc(file=sys.stdout)
diff --git a/Scripts/pilfont.py b/Scripts/pilfont.py
deleted file mode 100755
index aa6a34083..000000000
--- a/Scripts/pilfont.py
+++ /dev/null
@@ -1,57 +0,0 @@
-#!/usr/bin/env python
-#
-# The Python Imaging Library
-# $Id$
-#
-# PIL raster font compiler
-#
-# history:
-# 1997-08-25 fl created
-# 2002-03-10 fl use "from PIL import"
-#
-
-from __future__ import print_function
-
-import glob
-import sys
-
-# drivers
-from PIL import BdfFontFile
-from PIL import PcfFontFile
-
-VERSION = "0.4"
-
-if len(sys.argv) <= 1:
- print("PILFONT", VERSION, "-- PIL font compiler.")
- print()
- print("Usage: pilfont fontfiles...")
- print()
- print("Convert given font files to the PIL raster font format.")
- print("This version of pilfont supports X BDF and PCF fonts.")
- sys.exit(1)
-
-files = []
-for f in sys.argv[1:]:
- files = files + glob.glob(f)
-
-for f in files:
-
- print(f + "...", end=' ')
-
- try:
-
- fp = open(f, "rb")
-
- try:
- p = PcfFontFile.PcfFontFile(fp)
- except SyntaxError:
- fp.seek(0)
- p = BdfFontFile.BdfFontFile(fp)
-
- p.save(f)
-
- except (SyntaxError, IOError):
- print("failed")
-
- else:
- print("OK")
diff --git a/Scripts/pilprint.py b/Scripts/pilprint.py
deleted file mode 100755
index 3d8d01751..000000000
--- a/Scripts/pilprint.py
+++ /dev/null
@@ -1,102 +0,0 @@
-#!/usr/bin/env python
-#
-# The Python Imaging Library.
-# $Id$
-#
-# print image files to postscript printer
-#
-# History:
-# 0.1 1996-04-20 fl Created
-# 0.2 1996-10-04 fl Use draft mode when converting.
-# 0.3 2003-05-06 fl Fixed a typo or two.
-#
-
-from __future__ import print_function
-import getopt
-import os
-import sys
-import subprocess
-
-VERSION = "pilprint 0.3/2003-05-05"
-
-from PIL import Image
-from PIL import PSDraw
-
-letter = (1.0*72, 1.0*72, 7.5*72, 10.0*72)
-
-
-def description(filepath, image):
- title = os.path.splitext(os.path.split(filepath)[1])[0]
- format = " (%dx%d "
- if image.format:
- format = " (" + image.format + " %dx%d "
- return title + format % image.size + image.mode + ")"
-
-if len(sys.argv) == 1:
- print("PIL Print 0.3/2003-05-05 -- print image files")
- print("Usage: pilprint files...")
- print("Options:")
- print(" -c colour printer (default is monochrome)")
- print(" -d debug (show available drivers)")
- print(" -p print via lpr (default is stdout)")
- print(" -P same as -p but use given printer")
- sys.exit(1)
-
-try:
- opt, argv = getopt.getopt(sys.argv[1:], "cdpP:")
-except getopt.error as v:
- print(v)
- sys.exit(1)
-
-printerArgs = [] # print to stdout
-monochrome = 1 # reduce file size for most common case
-
-for o, a in opt:
- if o == "-d":
- # debug: show available drivers
- Image.init()
- print(Image.ID)
- sys.exit(1)
- elif o == "-c":
- # colour printer
- monochrome = 0
- elif o == "-p":
- # default printer channel
- printerArgs = ["lpr"]
- elif o == "-P":
- # printer channel
- printerArgs = ["lpr", "-P%s" % a]
-
-for filepath in argv:
- try:
-
- im = Image.open(filepath)
-
- title = description(filepath, im)
-
- if monochrome and im.mode not in ["1", "L"]:
- im.draft("L", im.size)
- im = im.convert("L")
-
- if printerArgs:
- p = subprocess.Popen(printerArgs, stdin=subprocess.PIPE)
- fp = p.stdin
- else:
- fp = sys.stdout
-
- ps = PSDraw.PSDraw(fp)
-
- ps.begin_document()
- ps.setfont("Helvetica-Narrow-Bold", 18)
- ps.text((letter[0], letter[3]+24), title)
- ps.setfont("Helvetica-Narrow-Bold", 8)
- ps.text((letter[0], letter[1]-30), VERSION)
- ps.image(letter, im)
- ps.end_document()
-
- if printerArgs:
- fp.close()
-
- except:
- print("cannot print image", end=' ')
- print("(%s:%s)" % (sys.exc_info()[0], sys.exc_info()[1]))
diff --git a/Scripts/player.py b/Scripts/player.py
deleted file mode 100755
index 6e6e21d20..000000000
--- a/Scripts/player.py
+++ /dev/null
@@ -1,94 +0,0 @@
-#!/usr/bin/env python
-#
-# The Python Imaging Library
-# $Id$
-#
-
-from __future__ import print_function
-
-import sys
-
-if sys.version_info[0] > 2:
- import tkinter
-else:
- import Tkinter as tkinter
-
-from PIL import Image, ImageTk
-
-
-# --------------------------------------------------------------------
-# an image animation player
-
-class UI(tkinter.Label):
-
- def __init__(self, master, im):
- self.im = im
- if isinstance(self.im, list):
- # list of images
- im = self.im.pop(0)
-
- if im.mode == "1":
- self.image = ImageTk.BitmapImage(im, foreground="white")
- else:
- self.image = ImageTk.PhotoImage(im)
-
- tkinter.Label.__init__(self, master, image=self.image, bg="black", bd=0)
-
- self.update()
-
- duration = im.info.get("duration", 100)
- self.after(duration, self.next)
-
- def next(self):
-
- if isinstance(self.im, list):
-
- try:
- im = self.im[0]
- del self.im[0]
- self.image.paste(im)
- except IndexError:
- return # end of list
-
- else:
-
- try:
- im = self.im
- im.seek(im.tell() + 1)
- self.image.paste(im)
- except EOFError:
- return # end of file
-
- duration = im.info.get("duration", 100)
- self.after(duration, self.next)
-
- self.update_idletasks()
-
-
-# --------------------------------------------------------------------
-# script interface
-
-if __name__ == "__main__":
-
- if not sys.argv[1:]:
- print("Syntax: python player.py imagefile(s)")
- sys.exit(1)
-
- filename = sys.argv[1]
-
- root = tkinter.Tk()
- root.title(filename)
-
- if len(sys.argv) > 2:
- # list of images
- print("loading...")
- im = []
- for filename in sys.argv[1:]:
- im.append(Image.open(filename))
- else:
- # sequence
- im = Image.open(filename)
-
- UI(root, im).pack()
-
- root.mainloop()
diff --git a/Scripts/thresholder.py b/Scripts/thresholder.py
deleted file mode 100755
index c6c62ff19..000000000
--- a/Scripts/thresholder.py
+++ /dev/null
@@ -1,80 +0,0 @@
-#!/usr/bin/env python
-#
-# The Python Imaging Library
-# $Id$
-#
-# this demo script illustrates how a 1-bit BitmapImage can be used
-# as a dynamically updated overlay
-#
-
-import sys
-
-if sys.version_info[0] > 2:
- import tkinter
-else:
- import Tkinter as tkinter
-
-from PIL import Image, ImageTk
-
-#
-# an image viewer
-
-
-class UI(tkinter.Frame):
- def __init__(self, master, im, value=128):
- tkinter.Frame.__init__(self, master)
-
- self.image = im
- self.value = value
-
- self.canvas = tkinter.Canvas(self, width=im.size[0], height=im.size[1])
- self.backdrop = ImageTk.PhotoImage(im)
- self.canvas.create_image(0, 0, image=self.backdrop, anchor=tkinter.NW)
- self.canvas.pack()
-
- scale = tkinter.Scale(self, orient=tkinter.HORIZONTAL, from_=0, to=255,
- resolution=1, command=self.update_scale,
- length=256)
- scale.set(value)
- scale.bind("", self.redraw)
- scale.pack()
-
- # uncomment the following line for instant feedback (might
- # be too slow on some platforms)
- # self.redraw()
-
- def update_scale(self, value):
- self.value = float(value)
-
- self.redraw()
-
- def redraw(self, event=None):
-
- # create overlay (note the explicit conversion to mode "1")
- im = self.image.point(lambda v, t=self.value: v >= t, "1")
- self.overlay = ImageTk.BitmapImage(im, foreground="green")
-
- # update canvas
- self.canvas.delete("overlay")
- self.canvas.create_image(0, 0, image=self.overlay, anchor=tkinter.NW,
- tags="overlay")
-
-# --------------------------------------------------------------------
-# main
-
-if len(sys.argv) != 2:
- print("Usage: thresholder file")
- sys.exit(1)
-
-root = tkinter.Tk()
-
-im = Image.open(sys.argv[1])
-
-if im.mode != "L":
- im = im.convert("L")
-
-# im.thumbnail((320,200))
-
-UI(root, im).pack()
-
-root.mainloop()
diff --git a/Scripts/viewer.py b/Scripts/viewer.py
deleted file mode 100755
index c5b0b55ca..000000000
--- a/Scripts/viewer.py
+++ /dev/null
@@ -1,55 +0,0 @@
-#!/usr/bin/env python
-#
-# The Python Imaging Library
-# $Id$
-#
-
-from __future__ import print_function
-
-import sys
-
-if sys.version_info[0] > 2:
- import tkinter
-else:
- import Tkinter as tkinter
-
-from PIL import Image, ImageTk
-
-#
-# an image viewer
-
-
-class UI(tkinter.Label):
-
- def __init__(self, master, im):
-
- if im.mode == "1":
- # bitmap image
- self.image = ImageTk.BitmapImage(im, foreground="white")
- tkinter.Label.__init__(self, master, image=self.image, bd=0,
- bg="black")
-
- else:
- # photo image
- self.image = ImageTk.PhotoImage(im)
- tkinter.Label.__init__(self, master, image=self.image, bd=0)
-
-#
-# script interface
-
-if __name__ == "__main__":
-
- if not sys.argv[1:]:
- print("Syntax: python viewer.py imagefile")
- sys.exit(1)
-
- filename = sys.argv[1]
-
- root = tkinter.Tk()
- root.title(filename)
-
- im = Image.open(filename)
-
- UI(root, im).pack()
-
- root.mainloop()
diff --git a/setup.py b/setup.py
index 202266139..02f72d99b 100755
--- a/setup.py
+++ b/setup.py
@@ -9,7 +9,6 @@
# ------------------------------
from __future__ import print_function
-import glob
import os
import platform as plat
import re
@@ -796,7 +795,6 @@ try:
ext_modules=[Extension("PIL._imaging", ["_imaging.c"])],
include_package_data=True,
packages=find_packages(),
- scripts=glob.glob("Scripts/*.py"),
test_suite='nose.collector',
keywords=["Imaging", ],
license='Standard PIL License',