2019-08-19 22:35:44 qq_43292041 阅读数 154

RGBA解释:A代表第三个参数,透明度
RGBA 值是一组数字,指定顔色中的红、绿、蓝和 alpha(透明度)的值。
在 Pillow 中,RGBA 值表示为四个整数值的元组。例如,红色表示为(255,0,0,255)。
from PIL import Image #导入模块
Pillow 的模块名称是 PIL
备注:
由于 Pillow 的创建者设计 Pillow 模块的方式,你必须使用 from PIL import Image 形式的 import 语句,而不是简单地 import PIL。

读取图片属性:

from PIL import Image

catT = Image.open('zophie.jpg')    # 加载图片
print(catT.size)                   # 获得图片尺寸
width, height = catT.size          # 用两个变量接收长 和高尺寸元组数值
print(width)
print(height)
# --------------------------------------------------------
print(catT.filename)               # 获得图片名称
print(catT.format)                 # 获得图片的格式
print(catT.format_description)     # 获取图片格式和描述

catT.save('zophie.png')            # 保存图片png格式,相当于转换格式

创建图片:

from PIL import Image
im = Image.new('RGBA', (200, 200), 'red')     # 创建图片,RGBA模式,图片尺寸,图片背景颜色red红色
im.save('1.png')
im2 = Image.new('RGBA', (220, 220))           # 创建图片,RGBA模式,图片尺寸,第三个参数没写,不可见的黑色,代表透明
im2.save('2.png')                             # 创建颜色是png格式才可以

1.图片裁剪:crop()函数

from PIL import Image
catT = Image.open('zophie.jpg')            # 加载图片
Im = catT.crop((241, 26, 341, 126))        # 裁剪图像,第一个和第二个参数,X,Y起点坐标,第三和第四个裁剪终点坐标
Im.save('裁剪后图.png')                     # 裁剪保留原图,不变,创建新的裁剪后图 

2.复制黏贴,将剪切图到复制图中 copy()复制图片函数; paste()输出黏贴函数,相当于贴水印

from PIL import Image
cat_y = Image.open('zophie.png')             # 加载图片,赋值给cat_y
cat_c = cat_y.copy()                         # 复制图片,到参数cat_c
jianqie = cat_y.crop((241, 26, 341, 126))    # 剪切图片
print(jianqie.size)                          # 输出剪切图片尺寸

cat_c.paste(jianqie, (0, 0))                 # 将剪切图黏贴到,复制的cat_c中,第一个坐标0,0,起始坐标
cat_c.paste(jianqie, (100, 200))             # 第二次复制剪切图
cat_c.save('复制后图.png')                    # 保存复制后图片为png图

3.图像调整大小:resize()函数

from PIL import Image
catIm = Image.open('zophie.png')                            # 加载图片,赋值给cat_y
width, height = catIm.size                                  # 元组赋值法:用2个函数接收图像尺寸赋值
img = catIm.resize((int(width / 2), int(height / 2)))       # 按比例将图片缩小一半除以2
img.save('调整大小1.png')
img = catIm.resize((width, height + 300))                   # 只将高度增加300px
img.save('调整大小2.png')

备注:我们将 catIm.size 元组中的两个值赋给变量 width 和 height。使用 width和 height,
而不是 catIm.size[0]和 catIm.size[1],让接下来的代码更易读
备注:resize()方法的元组参数中只允许整数,这就是为什么需要用 int()调用对两个除以 2 的值取整

【图像缩小,防止失真:PIL带ANTIALIAS滤镜缩放结果,加入:Image.ANTIALIAS参数】 
代码改造:  img = img.resize((width, height),Image.ANTIALIAS)

4.图像旋转,和镜像翻转

from PIL import Image
catIm = Image.open('zophie.png')                            # 加载图片,赋值给cat_y
catIm.rotate(90).save('旋转1.png')                          # 逆时针,旋转90度,
catIm.rotate(180).save('旋转2.png')                         # 逆时针,旋转180度
catIm.rotate(270).save('旋转3.png')                         # 逆时针,旋转270度

# 画布撑大,expand=True
# 逆时针,旋转39度,添加expand参数接受图片框架被撑大,改变整体画布大小
catIm.rotate(39, expand=True).save('旋转1.png')             
catIm.rotate(39).save('旋转1.png')                          # 逆时针,旋转39度,无expand参数,整体画布保持不变!

# 镜像翻转
catIm.transpose(Image.FLIP_LEFT_RIGHT).save('水平镜像翻转.png')    # 水平镜像翻转
catIm.transpose(Image.FLIP_TOP_BOTTOM).save('垂直镜像翻转.png')    # 垂直镜像翻转

5.更改单个像素getpixel()函数 和putpixel()函数

from PIL import Image
im = Image.new('RGBA', (100, 100))
print(im.getpixel((0, 0)))    # 获取0,0坐标颜色值

for x in range(100):                           # 嵌套循环for   range(100)是0-99范围内
    for y in range(50):
        print(x, y)
        im.putpixel((x, y), (210, 210, 210))    # 给图片上色

from PIL import ImageColor                      # 导入ImageColor模块来获取颜色单词名称
for x in range(100):   
    for y in range(50, 100):
        im.putpixel((x, y), ImageColor.getcolor('darkgray', 'RGBA'))

im.save('putPixel.png')

实战案例:

import os
from PIL import Image
global width, height
SIZE_800 = 800
os.makedirs('Logo水印后文件夹', exist_ok=True)                          # 用os新建文件夹
logoIm = Image.open('catlogo.png')                                    # 登录水印图片
logoWidth, logoHeight = logoIm.size                                   # 接收水印图尺寸并赋值

# for遍历当前文件夹中所有文件,用.表示当前文件夹
for wenjian in os.listdir('.'):                            
    if not (wenjian.endswith('.png') or wenjian.endswith('.jpg')) or wenjian == 'catlogo.png':       
        continue                                                      # 跳过非图像文件和徽标文件本身
    im = Image.open(wenjian)                                          # filename为读取文件全名
    print(im)
    width, height = im.size

if width > SIZE_800 and height > SIZE_800:                            # 判断读取的图片是否大于800px
    if width > height:
        height = int((SIZE_800 / width) * height)
        width = SIZE_800
    else:
        width = int((SIZE_800 / height) * width)
        height = SIZE_800

print('Resizing %s...' % (wenjian))
im = im.resize((width, height))                                                     # 调整图片大小
print('Adding logo to %s...' % (wenjian))

# 黏贴图片,黏贴水印 ,第一个参数,黏贴的水印第二个参数,黏贴的坐标位置,第三个参数,遮罩,透明图像
im.paste(logoIm, (width - logoWidth, height - logoHeight), logoIm)                                  
im.save(os.path.join('Logo水印后文件夹', wenjian))                                   # 保存到指定文件夹
2019-02-13 17:25:05 weixin_42514606 阅读数 391


在Pyhton图像库「Python Imaging Library」支持大量的图片格式,是图像处理和批处理的最佳选择,可以用这个来创建缩略图、文件格式之间的转换、打印图片、大小转换、颜色转换、还有对图片加滤镜「模糊、磨皮」等操作。功能非常简单,但是API调用非常简单


安装

安装的仍然使用pip安装,非常简单快捷。对于国内用户来说,不能访问python官网的时候,可以替换python源为阿里源或者其他国内源;其二对于其他的内网用户来说,可以在安装的时候加上代理地址。

$ pip install Pillow # python2
$ pip3 install Pillow # python3 如果没有添加pip3软连接,用python3的pip一样的

$ pip install Pillow --proxy=10.10.10.10:80 # 代理

验证是否安装成功,没有报错就是安装成功了。

>>> import PIL
>>> dir(PIL)
['PILLOW_VERSION', 'VERSION', '__builtins__', '__cached__', '__doc__.......

访问文件

用「open」方法打开指定文件即可,可以看到文件的一些详细参数,比如大小、高度、长度、格式、模式等。

from PIL import Image
try:
    im= Image.open("1.png")
    print(im.format, im.size, im.mode)
except Exception as e:
        print(e)
# output: PNG (736, 458) RGB

加载图像

获取到Image实例之后,可以用这个类的方法来处理和操作图像。这个是把图片保存位临时文件,然后用系统默认的图片查看工具来显示图片的,方便调试和测试。也可以用save()方法来保存文件。

>>> im.show()
>>> im.save("test.png") #

读写图像

对图像的几何变换、颜色变换、图像增强、以及剪切等操作。

图像过滤器

图像增强处理里面有个,包含了一个过滤器ImageFilter模块,可以模糊图片等操作,下面是一个模糊操作的Demo。

# Import the modules
from PIL import Image, ImageFilter

try:
    # Load an image from the hard drive
    original = Image.open("1.png")

    # Blur the image
    blurred = original.filter(ImageFilter.BLUR)

    # Display both images
    original.show()
    blurred.show()

    # save the new image
    blurred.save("blurred.png")

except:
    print "Unable to load image"

效果如下:在这里插入图片描述
除了BLUR,还有其他的参数。

BLUR
CONTOUR
DETAIL
EDGE_ENHANCE
EDGE_ENHANCE_MORE
EMBOSS
FIND_EDGES
SMOOTH
SMOOTH_MORE
SHARPEN

创建缩略图

也是同样使用实例的thumbnail方法即可,非常简单。

from PIL import Image
size = (128, 128)
thumbnail= "thumbnail.jpeg"
try:
    im =  Image.open("1.png")
except Exception as e:
    print(e)
im.thumbnail(size)
im.save(thumbnail)

缩略图

剪切、粘贴

剪切使用crop方法即可,指定 2 个坐标,需要说明的是左上角是(0 ,0);

box = (10, 10, 200, 200) # 对应: 左 上 右 下
region = im.crop(box) # 剪切

region = region.transpose(Image.ROTATE_180)
im.paste(region, box) # 粘贴

小结

python 图像处理「PIL」对图像处理非常容易,加上完善的API文档手册,对于新手也是非常友好的。

更多阅读

  1. Pillow 官方文档
2018-01-12 13:03:59 u012576807 阅读数 120

Python高级编程之pillow图像处理

PIL:Python Imaging Library,已经是Python平台事实上的图像处理标准库了。PIL功能非常强大,但API却非常简单易用。

由于PIL仅支持到Python 2.7,一群志愿者在PIL的基础上创建了兼容的版本,名字叫Pillow,支持最新Python 3.x,又加入了许多新特性

安装Pillow

需要在命令行下通过pip安装:

$ sudo pip install pillow


操作图像

来看看最常见的将图像缩小一半操作,只需三四行代码:

#-*- coding:UTF-8 –*-
#! /usr/bin/env python
#coding=utf-8
#!/usr/bin/python

from PIL import Image
import crash_ipy
import os

# 当前路径是:/Users/beyond
print os.getcwd()
img = Image.open("./sg_python/sora.jpg")
imgWidth,imgHeight = img.size
print "origin W:%d and H:%d" % (imgWidth,imgHeight)
#缩小到一半,注意:参数是个元组
#// 取整除 - 返回商的整数部分
img.thumbnail((imgWidth//2,imgHeight//2))
#保存
img.save("./sg_python/sora_half.jpg","jpeg")

其他功能如模糊效果也只需几行代码:

#-*- coding:UTF-8 –*-
#! /usr/bin/env python
#coding=utf-8
#!/usr/bin/python

from PIL import Image
from PIL import ImageFilter
import crash_ipy
import os

# 当前路径是:/Users/beyond
print os.getcwd()
img = Image.open("./sg_python/sora.jpg")
#模糊半径不能调节吗???
img_blur = img.filter(ImageFilter.BLUR)

#保存
img_blur.save("./sg_python/sora_blur.jpg","jpeg")

PIL的ImageDraw提供了一系列绘图方法,让我们可以直接绘图。比如要生成字母验证码图片,代码只要仅仅几行:

#-*- coding:UTF-8 –*-
#! /usr/bin/env python
#coding=utf-8
#!/usr/bin/python
import ipython_debug
#生成二维码
from PIL import Image,ImageDraw,ImageFont,ImageFilter
import random

#生成随机数
def randomChar():
   randomInt = random.randint(65,90)
   return chr(randomInt)

#生成随机浅和深颜色
def randomWhiteColor():
      return (random.randint(125,255),random.randint(125,255),random.randint(125,255))
def randomBlackColor():
      return (random.randint(0,125),random.randint(0,125),random.randint(0,125))
#生成4个字符验证码      
charNumbers = 4      
canvasWidth = charNumbers * 60
canvasHeight = 60
img = Image.new('RGB',(canvasWidth,canvasHeight),(255,255,255))      
#文字
fnt = ImageFont.truetype('/Library/Fonts/Arial.ttf',36)
#一张素洁的画布
canvas = ImageDraw.Draw(img)
#将画布的每个点上色
for x in range(canvasWidth):
   for y in range(canvasHeight):
      canvas.point((x,y),fill = randomWhiteColor())
#在画布上绘制文字
codeStr = ''
for posIndex in range(charNumbers):
   tmpChar = randomChar()
   codeStr = codeStr+tmpChar
   canvas.text((10+posIndex*60,10),tmpChar,font = fnt,fill = randomBlackColor())
#模糊
img = img.filter(ImageFilter.BLUR)
#创建文件
targetFilePath = '/Users/beyond/sg_python/randomchar_'+codeStr+'.jpg'
img.save(targetFilePath,'jpeg')

果图如下:




要详细了解PIL的强大功能,请请参考Pillow官方文档:

https://pillow.readthedocs.org/

小结

PIL提供了操作图像的强大功能,可以通过简单的代码完成复杂的图像处理。















2019-12-09 11:42:00 weixin_44194246 阅读数 16

Pillow图像处理

图像处理是一门应用非常广的技术,而拥有非常丰富第三方扩展库的 Python 当然不会错过这一门盛宴。PIL (Python Imaging Library)是 Python 中最常用的图像处理库,目前版本为 1.1.7,我们可以 在这里 下载学习和查找资料。Image 类是 PIL 库中一个非常重要的类,通过这个类来创建实例可以有直接载入图像文件,读取处理过的图像和通过抓取的方法得到的图像这三种方法
安装
pip install pillow
讲解
from PIL import Image
im = Image.open('1.png') #通过open的方式打开一个图片文件

im.show()  # 使用图片查看器查看图片
im.format  #定义了图像的格式
im.size    #size属性是一个tuple, 表示图像的宽和高
im.mode    #属性为图像的模式, 常用的模式L为灰度图, RGB为真彩色, CMYK为pre-press图像

convert() 是图像实例对象的一个方法,接受一个 mode 参数,用以指定一种色彩模式,mode 的取值可以是如下几种:
· 1 (1-bit pixels, black and white, stored with one pixel per byte)
· L (8-bit pixels, black and white)
· P (8-bit pixels, mapped to any other mode using a colour palette)
· RGB (3x8-bit pixels, true colour)
· RGBA (4x8-bit pixels, true colour with transparency mask)
· CMYK (4x8-bit pixels, colour separation)
· YCbCr (3x8-bit pixels, colour video format)
· I (32-bit signed integer pixels)
· F (32-bit floating point pixels)
filter
from PIL import Image, ImageFilter 
im = Image.open(‘1.png') 
# 高斯模糊 
im.filter(ImageFilter.GaussianBlur) 
# 普通模糊 
im.filter(ImageFilter.BLUR) 
# 边缘增强 
im.filter(ImageFilter.EDGE_ENHANCE) 
# 找到边缘 
im.filter(ImageFilter.FIND_EDGES) 
# 浮雕 
im.filter(ImageFilter.EMBOSS) 
# 轮廓 
im.filter(ImageFilter.CONTOUR) 
# 锐化 
im.filter(ImageFilter.SHARPEN) 
# 平滑 
im.filter(ImageFilter.SMOOTH) 
# 细节 
im.filter(ImageFilter.DETAIL)
查看图像直方图
im.histogram()
转换文件格式
def img2jpg(imgFile):  
   if type(imgFile)==str and imgFile.endswith(('.bmp', '.gif', '.png')):
     with Image.open(imgFile) as im:
       im.convert('RGB').save(imgFile[:-3]+'jpg')  
屏幕截图
from PIL import ImageGrab
im = ImageGrab.grab((0,0,800,200)) # 截取屏幕指定区域的图像
im = ImageGrab.grab() #不带参数表示全屏幕截图
图像裁剪和黏贴
box = (120, 194, 220, 294) #定义裁剪区域 
region = im.crop(box) #裁剪 
region = region.transpose(Image.ROTATE_180) 
im.paste(region,box) #粘贴
图像缩放
im = im.resize((100,100)) #参数表示图像的新尺寸,分别表示宽度和高度
图像对比度增强
from PIL import Image 
from PIL import ImageEnhance 
 
#原始图像 
image = Image.open('lena.jpg') 
image.show() 
 
#亮度增强 
enh_bri = ImageEnhance.Brightness(image) 
brightness = 1.5
image_brightened = enh_bri.enhance(brightness) 
image_brightened.show() 
 
#色度增强 
enh_col = ImageEnhance.Color(image) 
color = 1.5
image_colored = enh_col.enhance(color) 
image_colored.show() 
 
#对比度增强 
enh_con = ImageEnhance.Contrast(image) 
contrast = 1.5
image_contrasted = enh_con.enhance(contrast) 
image_contrasted.show() 
 
#锐度增强 
enh_sha = ImageEnhance.Sharpness(image) 
sharpness = 3.0
image_sharped = enh_sha.enhance(sharpness) 
image_sharped.show()
2019-04-06 23:27:00 sinat_35815559 阅读数 150

python学习-Pillow图像处理

 

Pillow中文文档:https://pillow-cn.readthedocs.io/zh_CN/latest/handbook/tutorial.html

安装:pip install pillow

操作图像:

#!/usr/bin/env python3
# _*_ coding utf-8 _*_

__author__ = 'nxz'

from PIL import Image, ImageFilter
from time import sleep

# 打开一个jpg图像文件
im = Image.open('test.jpg')
w, h = im.size  #
print('图片的宽:%s,和高:%s' % (w, h))

# 图片缩放
im.thumbnail((w // 2, h // 2))
w, h = im.size
print(w, h)

# 缩放之后的图片重新保存
im.save('thumbnail.jpg', 'jpeg')

# 其他功能:切片、旋转、滤镜、输出文字、调色板

# 模糊效果
im2 = im.filter(ImageFilter.BLUR)
im2.save('blur.jpg','jpeg')

截屏:

from PIL import ImageGrab
from time import sleep

m = int(input("请输入想截屏多少次:"))
n = 1
while n <= m:
    sleep(0.02)
    im = ImageGrab.grab()
    local = (r'%s.jpg' % (n))
    im.save(local, 'jpeg')
    n = n + 1

转换文件到JPEG:

'''
将指定路径下的图片后缀改为  “.jpg” 格式
'''

from PIL import Image
import os, sys

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 Exception as exc:
            print(exc)

GIF动图:

"""
GIf动图
"""

from PIL import Image

im = Image.open('test.jpg')
images = []
images.append(Image.open('blur.png'))
images.append(Image.open('test.jpg'))
im.save('gif.gif', save_all=True, append_image=images, loop=1, duration=1, comment=b'aaaabbb')

几何变换:

#简单的集合变换
out = im.resize((128, 128))

#旋转图像
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) #旋转180°
out = im.transpose(Image.ROTATE_270) #旋转270°

 

 
 
 
 
 
 
 
posted @ 2019-04-06 23:27 巡山小妖N 阅读(...) 评论(...) 编辑 收藏

pillow图像处理

阅读数 2

没有更多推荐了,返回首页