from PIL import Image im = Image.open("hopper.ppm") from __future__ import print_function print(im.format, im.size, im.mode) #打應結果 PPM (512, 512) RGB
讓圖片顯示,im.show(),由於打開是暫時的因此顯示圖片效果不太好,並且還有15功能,因此通常用來測試顯示python
改變圖片的後綴,pil能夠根據文件內容,本身判斷文件類型less
from __future__ import print_function import os, sys from PIL import Image for infile in sys.argv[1:]: f, e = os.path.splitext(infile) outfile = f + ".jpg" if infile != outfile: try: Image.open(infile).save(outfile) except IOError: print("cannot convert", infile)
若是後綴不合法會用第二個參數ide
from __future__ import print_function import os, sys from PIL import Image size = (128, 128) for infile in sys.argv[1:]: outfile = os.path.splitext(infile)[0] + ".thumbnail" if infile != outfile: try: im = Image.open(infile) im.thumbnail(size) im.save(outfile, "JPEG") except IOError: print("cannot create thumbnail for", infile)
先打開文件確認類型,讀取/解析會在稍後執行測試
from __future__ import print_function import sys from PIL import Image for infile in sys.argv[1:]: try: with Image.open(infile) as im: print(infile, im.format, "%dx%d" % im.size, im.mode) except IOError: pass
截取圖片大小, (left, upper, right, lower),座標 (0, 0) in the upper left corner,準確來講是300*300pixeelsui
box = (100, 100, 400, 400) region = im.crop(box)
把圖片反轉180度再填回去spa
region = region.transpose(Image.ROTATE_180) im.paste(region, box)
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)) #load是由於crop是個延遲操做,不這樣會在第二步保存不到 part1.load() part2.load() image.paste(part2, (0, 0, xsize-delta, ysize)) image.paste(part1, (xsize-delta, 0, xsize, ysize)) return image
拆分紅原生三原色,換位置再合併orm
r, g, b = im.split() im = Image.merge("RGB", (b, g, r))
簡單的幾何逆時針旋轉,transpose也能夠在90度內旋轉,也能夠水平活垂直旋轉blog
out = im.resize((128, 128)) out = im.rotate(45)
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)
不通像素之間圖片圖片
from PIL import Image im = Image.open("hopper.ppm").convert("L")
加強圖像ip
from PIL import ImageFilter out = im.filter(ImageFilter.DETAIL)
改變對比度
out = im.point(lambda i: i * 1.2)
具體操做圖片
# split the image into individual bands source = im.split() R, G, B = 0, 1, 2 # select regions where red is less than 100 mask = source[R].point(lambda i: i < 100 and 255) # process the green band out = source[G].point(lambda i: i * 0.7) # paste the processed band back, but only where red was < 100 source[G].paste(out, None, mask) # build a new multiband image im = Image.merge(im.mode, source)
你能夠用這種方式調整對比度、亮度、顏色平衡和銳度
from PIL import ImageEnhance enh = ImageEnhance.Contrast(im) enh.enhance(1.3).show("30% more contrast")
打開動態圖,並跳幀播放一次結束
from PIL import Image im = Image.open("animation.gif") im.seek(1) # skip to the second frame try: while 1: im.seek(im.tell()+1) # do something to im except EOFError: pass # end of sequence
循環播放
from PIL import ImageSequence for frame in ImageSequence.Iterator(im): # ...do something to frame...
在打印機上打印
from PIL import Image from PIL import PSDraw im = Image.open("hopper.ppm") title = "hopper" box = (1*72, 2*72, 7*72, 10*72) # in points ps = PSDraw.PSDraw() # default is sys.stdout ps.begin_document(title) # draw the image (75 dpi) ps.image(box, im, 75) ps.rectangle(box) # draw title ps.setfont("HelveticaNarrow-Bold", 36) ps.text((3*72, 4*72), title) ps.end_document()
也能夠這樣打開
from PIL import Image with open("hopper.ppm", "rb") as fp: im = Image.open(fp)
from PIL import Image, TarIO fp = TarIO.TarIO("Tests/images/hopper.tar", "hopper.jpg") im = Image.open(fp)
This is only available for JPEG and MPO files.
from PIL import Image from __future__ import print_function im = Image.open(file) print("original =", im.mode, im.size) im.draft("L", (100, 100)) print("draft =", im.mode, im.size) #This prints something like: original = RGB (512, 512) draft = L (128, 128)