python操作图像基础知识

1、ImageColor.getcolor()

Pillow模块提供ImageColor.getcolor(),该函数接受一个颜色名称字符串作为第一个参数,字符串’RGBA’作为第二个参数,返回一个 RGBA 元组 (红,绿,蓝,alpha透明度)

>>> from PIL import ImageColor
>>> ImageColor.getcolor('red', 'RGBA')
(255, 0, 0, 255)
>>> ImageColor.getcolor('RED', 'RGBA')
(255, 0, 0, 255) 
>>> ImageColor.getcolor('Black', 'RGBA') 
(0, 0, 0, 255)

2、坐标与Box元组

在这里插入图片描述
矩形包括左、顶坐标,但不包括右、底坐标,如图。

3、处理Image数据类型(打开图片,新建图片)

打开图片

from PIL import Image
cat_image = Image.open('zophie.png') #加载图片得到Image对象
width, height = cat_image.size #得到图片的宽度与高度

新建图片

from PIL import Image
test_image1 = Image.new('RGBA', (100, 200), 'purple') #新建一张宽为100像素,高为200像素的紫色图片,颜色字符串也可以用RGBA元组
test_image1.save('image1.png') #保存命名为image1
test_image2 = Image.new('RGBA', (20, 20)) #新建一张宽为20像素,高为20像素的黑色透明图片(啥也没有),未指定参数时默认颜色参数为(0,0,0,0)
test_image2.save('image2.png') #保存命名为image2

4、裁剪图片

Image 对象的 crop()方法接受一个矩形元组(因此crop()传递参数时有双重括弧),返回一个 Image 对象,表示裁剪后的图像。返回的是新Image对象,也就是说会生成裁剪后的图片,而不是在原图基础上裁剪再保存。

from PIL import Image
cat_image = Image.open('zophie.png')
cropped_image = cat_image.crop((335, 345, 565, 560)) #将左上顶点为(335,345),右下顶点(565,560),宽为230像素,高为215像素的区域剪出来
cropped_image.save('cropped_image.png')

5、复制粘贴图像到另一图像上

from PIL import Image
cat_image = Image.open('zophie.png')
cat_copyimage = cat_image.copy() #复制一个image对象用于粘贴操作
cropped_image = cat_image.crop((335, 345, 565, 560)) #将左上顶点为(335,345),右下顶点(565,560),宽为230像素,高为215像素的区域剪出来

face_im_width, face_im_height = face_image.size
cat_im_width, cat_im_height = cat_image.size

for left in range(0, cat_im_width, face_im_width):
    for top in range(0, cat_im_height, face_im_height):
        print("paste at the point of (%s, %s) now..."%(left, top))
        cat_copyimage.paste(face_image, (left, top))

cat_copyimage.save('tiled.png')
  • <image对象>.copy()用于复制;
  • <被粘贴的image对象>.paste(<要粘贴到别处的image对象>,(坐标值,以被粘贴的image图像为坐标系,要粘贴到别处的image的左上角来定位))。如cat_copyimage.paste(face_image, (100, 200))

6、调整图像大小

resized_image = cat_copyimage.resize((cat_im_width, int(cat_im_height/2)))
resized_image.save('resize.png')

resize()方法在 Image 对象上调用,返回指定宽度和高度的一个新 Image 对象。 它接受两个整数的元组作为参数(因此resize传递参数时有双重括弧),表示返回图像的新高度和宽度。这个是使得图像变胖变瘦,与crop()区别。

7、旋转图像或镜像图像

>>> catIm.rotate(6).save('rotated6.png') 
>>> catIm.rotate(6, expand=True).save('rotated6_expanded.png')

在这里插入图片描述

>>>catIm.transpose(Image.FLIP_LEFT_RIGHT).save('horizontal.png') #图片左右翻转
>>>catIm.transpose(Image.FLIP_TOP_BOTTOM).save('vertical.png') #图片上下翻转

8、更改单个像素点

  • 单个像素的颜色可以通过 getpixel()和putpixel()方法取得和设置。它们都接受一个元组,表示像素的 x 和 y 坐标。putpixel()方法还接受一个元组,作为该像素的颜色。这个顔色参数是四整数 RGBA 元组或三整数 RGB 元组。
from PIL import Image
from PIL import ImageColor

block_image = Image.new('RGBA', (100, 100))

for i in range(0, 50):
    for j in range(0, 50):
        block_image.putpixel((i, j), ImageColor.getcolor('purple', 'RGBA'))
for i in range(50, 100):
    for j in range(0, 50):
        block_image.putpixel((i, j), ImageColor.getcolor('red', 'RGBA'))
for i in range(0, 50):
    for j in range(50, 100):
        block_image.putpixel((i, j), ImageColor.getcolor('pink', 'RGBA'))
for i in range(50, 100):
    for j in range(50, 100):
        block_image.putpixel((i, j), ImageColor.getcolor('blue', 'RGBA'))

block_image.save('block_image.png')

如图

9、用ImageDraw.Draw()画图

from PIL import Image, ImageDraw

im = Image.new('RGBA', (200, 200), 'white')
draw = ImageDraw.Draw(im)
draw.line([(0, 0), (199, 0), (199, 199), (0, 199), (0, 0)], fill='black')
draw.rectangle((20, 30, 60, 60), fill='blue')
draw.ellipse((120, 30, 160, 60), fill='red')
draw.polygon(((57, 87), (79, 62), (94, 85), (120, 90), (103, 113)), fill='brown')
for i in range(100, 200, 10):
    draw.line([(i, 0), (200, i - 100)], fill='green')
 
im.save('drawing.png')

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值