pil-handbook

VIP免费
2025-02-27 0 0 486.4KB 77 页 5.9玖币
侵权投诉
Python Imaging Library Overview
PIL 1.1.3 | March 12, 2002 | Fredrik Lundh, Matthew Ellis
Introduction
The Python Imaging Library adds image processing capabilities to your Python
interpreter.
This library provides extensive file format support, an efficient internal representation,
and fairly powerful image processing capabilities.
The core image library is designed for fast access to data stored in a few basic pixel
formats. It should provide a solid foundation for a general image processing tool.
Let's look at a few possible uses of this library:
Image Archives
The Python Imaging Library is ideal for for image archival and batch processing
applications. You can use the library to create thumbnails, convert between file formats,
print images, etc.
The current version identifies and reads a large number of formats. Write support is
intentionally restricted to the most commonly used interchange and presentation formats.
Image Display
The current release includes Tk PhotoImage and BitmapImage interfaces, as well as a
Windows DIB interface that can be used with PythonWin. For X and Mac displays, you can
use Jack Jansen's img library.
For debugging, there's also a show method in the Unix version which calls xv to display the
image.
Image Processing
The library contains some basic image processing functionality, including point operations,
filtering with a set of built-in convolution kernels, and colour space conversions.
The library also supports image resizing, rotation and arbitrary affine transforms.
There's a histogram method allowing you to pull some statistics out of an image. This can
be used for automatic contrast enhancement, and for global statistical analysis.
Tutorial
Using the Image Class
The most important class in the Python Imaging Library is the Image class, defined in the
module with the same name. You can create instances of this class in several ways; either
by loading images from files, processing other images, or creating images from scratch.
To load an image from a file, use the open function in the Image module.
>>> import Image
>>> im = Image.open("lena.ppm")
If successful, this function returns an Image object. You can now use instance attributes
to examine the file contents.
>>> print im.format, im.size, im.mode
PPM (512, 512) RGB
The format attribute identifies the source of an image. If the image was not read from a
file, it is set to None. The size attribute is a 2-tuple containing width and height (in
pixels). The mode attribute defines the number and names of the bands in the image, and
also the pixel type and depth. Common modes are "L" (luminance) for greyscale images,
"RGB" for true colour images, and "CMYK" for pre-press images.
If the file cannot be opened, an IOError exception is raised.
Once you have an instance of the Image class, you can use the methods defined by this
class to process and manipulate the image. For example, let's display the image we just
loaded:
>>> im.show()
(The standard version of show is not very efficient, since it saves the image to a
temporary file and calls the xv utility to display the image. If you don't have xv installed,
it won't even work. When it does work though, it is very handy for debugging and tests.)
The following sections provide an overview of the different functions provided in this
library.
Reading and Writing Images
The Python Imaging Library supports a wide variety of image file formats. To read files
from disk, use the open function in the Image module. You don't have to know the file
format to open a file. The library automatically determines the format based on the
contents of the file.
To save a file, use the save method of the Image class. When saving files, the name
becomes important. Unless you specify the format, the library uses the filename extension
to discover which file storage format to use.
Example: Convert files to JPEG
import os, sys
import Image
for infile in sys.argv[1:]:
outfile = os.path.splitext(infile)[0] + ".jpg"
if infile != outfile:
try:
Image.open(infile).save(outfile)
except IOError:
print "cannot convert", infile
A second argument can be supplied to the save method which explicitly specifies a file
format. If you use a non-standard extension, you must always specify the format this way:
Example: Create JPEG Thumbnails
import os, sys
import Image
for infile in sys.argv[1:]:
outfile = os.path.splitext(infile)[0] + ".thumbnail"
if infile != outfile:
try:
im = Image.open(infile)
im.thumbnail((128, 128))
im.save(outfile, "JPEG")
except IOError:
print "cannot create thumbnail for", infile
It is important to note is that the library doesn't decode or load the raster data unless it
really has to. When you open a file, the file header is read to determine the file format
and extract things like mode, size, and other properties required to decode the file, but
the rest of the file is not processed until later.
This means that opening an image file is a fast operation, which is independent of the file
size and compression type. Here's a simple script to quickly identify a set of image files:
Example: Identify Image Files
import sys
import Image
for infile in sys.argv[1:]:
try:
im = Image.open(infile)
print infile, im.format, "%dx%d" % im.size, im.mode
except IOError:
pass
Cutting, Pasting and Merging Images
The Image class contains methods allowing you to manipulate regions within an image. To
extract a sub-rectangle from an image, use the crop method.
Example: Copying a subrectangle from an image
box = (100, 100, 400, 400)
region = im.crop(box)
The region is defined by a 4-tuple, where coordinates are (left, upper, right, lower). The
Python Imaging Library uses a coordinate system with (0, 0) in the upper left corner. Also
note that coordinates refer to positions between the pixels, so the region in the above
example is exactly 300x300 pixels.
The region could now be processed in a certain manner and pasted back.
Example: Processing a subrectangle, and pasting it back
region = region.transpose(Image.ROTATE_180)
im.paste(region, box)
When pasting regions back, the size of the region must match the given region exactly. In
addition, the region cannot extend outside the image. However, the modes of the original
image and the region do not need to match. If they don't, the region is automatically
converted before being pasted (see the section on Colour Transforms below for details).
Here's an additional example:
Example: Rolling an image
def roll(image, delta):
"Roll an image sideways"
xsize, ysize = image.size
delta = delta % xsize
if delta == 0: return image
part1 = image.crop((0, 0, delta, ysize))
part2 = image.crop((delta, 0, xsize, ysize))
image.paste(part2, (0, 0, xsize-delta, ysize))
image.paste(part1, (xsize-delta, 0, xsize, ysize))
return image
For more advanced tricks, the paste method can also take a transparency mask as an
optional argument. In this mask, the value 255 indicates that the pasted image is opaque
in that position (that is, the pasted image should be used as is). The value 0 means that
the pasted image is completely transparent. Values in-between indicate different levels of
transparency.
The Python Imaging Library also allows you to work with the individual bands of an
multi-band image, such as an RGB image. The split method creates a set of new images,
each containing one band from the original multi-band image. The merge function takes a
mode and a tuple of images, and combines them into a new image. The following sample
swaps the three bands of an RGB image:
Example: Splitting and merging bands
r, g, b = im.split()
im = Image.merge("RGB", (b, g, r))
Geometrical Transforms
The Image class contains methods to resize and rotate an image. The former takes a tuple
giving the new size, the latter the angle in degrees counter-clockwise.
Example: Simple geometry transforms
out = im.resize((128, 128))
out = im.rotate(45) # degrees counter-clockwise
To rotate the image in 90 degree steps, you can either use the rotate method or the
transpose method. The latter can also be used to flip an image around its horizontal or
vertical axis.
Example: Transposing an image
out = im.transpose(Image.FLIP_LEFT_RIGHT)
out = im.transpose(Image.FLIP_TOP_BOTTOM)
out = im.transpose(Image.ROTATE_90)
out = im.transpose(Image.ROTATE_180)
out = im.transpose(Image.ROTATE_270)
There's no difference in performance or result between transpose(ROTATE) and
corresponding rotate operations.
A more general form of image transformations can be carried out via the transform
method. See the reference section for details.
Colour Transforms
The Python Imaging Library allows you to convert images between different pixel
representations using the convert function.
Example: Converting between modes
im = Image.open("lena.ppm").convert("L")
The library supports transformations between each supported mode and the "L" and "RGB"
modes. To convert between other modes, you may have to use an intermediate image
(typically an "RGB" image).
Image Enhancement
The Python Imaging Library provides a number of methods and modules that can be used
to enhance images.
Filters
The ImageFilter module contains a number of pre-defined enhancement filters that can
be used with the filter method.
Example: Applying filters
摘要:

PythonImagingLibraryOverviewPIL1.1.3|March12,2002|FredrikLundh,MatthewEllisIntroductionThePythonImagingLibraryaddsimageprocessingcapabilitiestoyourPythoninterpreter.Thislibraryprovidesextensivefileformatsupport,anefficientinternalrepresentation,andfairlypowerfulimageprocessingcapabilities.Thecoreima...

收起<<
pil-handbook.pdf

共77页,预览5页

还剩页未读, 继续阅读

声明:本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。玖贝云文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知玖贝云文库,我们立即给予删除!
分类:计算机 价格:5.9玖币 属性:77 页 大小:486.4KB 格式:PDF 时间:2025-02-27

开通VIP享超值会员特权

  • 多端同步记录
  • 高速下载文档
  • 免费文档工具
  • 分享文档赚钱
  • 每日登录抽奖
  • 优质衍生服务
/ 77
客服
关注