zoukankan      html  css  js  c++  java
  • Python 编程快速上手 第十七章 操作图像

    前言

    在这一章节,讲了关于图像的三个方面的内容:

    1. 获得图像的相关信息:例如 RGBA 值,尺寸...
    2. 对图像进行编辑操作:例如 旋转,缩放...
    3. 在图像上绘制形状:例如 矩形,圆形...

    [ImageColor 模块 & Image 模块]获得图像的相关信息

    图像知识基础

    谈谈 ImageColor 模块

    格式:from PIL import ImageColor

    getcolor() 方法和 RGBA 元组:

    格式:ImageColor('Black', 'RGBA')
    功能:第一个参数为一个颜色名称字符串,第二个参数为颜色的模式,返回一个 RGBA 值的元组。

    谈谈 Image 模块和 Box 元组

    格式:from PIL import Image
    Box 元组: 为一个图像的尺寸值,通过 Image 模块得到一个 Image 对象之后,利用这个对象的 size() 方法可以得到一个 Box 元组。

    [Image 模块]操作 & 编辑图像

    操作图像的基础:打开,保存,新建

    打开图像

    格式:im = Image.open('nameOfImg.png')
    功能:获得一个 Image 对象

    谈谈 Image 对象的一些方法

    • im.filename:获得图像的名称
    • im.format:获得图像的格式
    • im.format_description: 获得描述更精准的图像的格式

    保存图像:

    格式:im.save('nameOfImag')
    功能:保存当工作目录目前的图像

    新建图像:

    格式:Image.new('RGBA', (100, 200), 'purple')
    功能:第一个参数为颜色的模式,第二个参数为大小,第三个参数为背景的颜色,是可选值,默认为透明。

    编辑图像:裁剪,复制和黏贴,缩放

    裁剪图像:

    格式:im.crop((335, 345, 565, 560))
    功能:接收一个矩形元组(左,顶,右,底的顺序)返回一个新的已经裁剪了的图像。

    复制图像和黏贴图像到其他图像:

    复制图像:

    格式: im.copy() 
    功能:返回一个 Image 对象

    黏贴图像到其他图像:

    格式:im.paste(anoterIm, (400, 500))
    功能:接受的第一个参数为一个 Image 对象,另一个参数为黏贴图像的时候源 Image 对象的左上角在主 Image 对象的位置。

    缩放图像:

    格式:im.resize((int(width/2), int(height/2)))
    功能:接收一个 Box 元组, Box 元组的元素的值都为整数,然后返回一个缩放后的 Image 对象。

    旋转,翻转图像

    旋转图像:

    格式:im.rotate(90, expand = True) 
    功能:接受一个角度作为参数,将这个图像逆时针旋转这个角度后,返回一个新的 Image 对象。第二个参数决定是否对尺寸进行放大,来适应旋转后整个图像的全部像素,是一个可选值。

    翻转图像

    格式:im.transpose(Image.FILP_RIGHT)
    功能:接收 Image.FILP(RIGHT/BOTTOM), 进行翻转图像。

    操作像素

    获得像素值

    格式:im.getpixel()
    功能:接受一个坐标元组,返回一个 三整数 RGB 元组或四整数 RGBA 元组。

    更改像素值

    格式:im.putpixel((x,y),(210, 210, 210))
    功能:接受一个坐标元组和一个三整数 RGB 元组或四整数 RGBA 元组作为两个参数,设置图像这一点像素的颜色。

    [ImageDraw 模块 & ImageFont 模块]在图像上绘制形状

    导入模块: 
    from PIL import Image, ImageDraw, ImageFont

    绘制形状的步骤:

    1. 获得 ImageDraw 对象

    格式: draw = ImageDraw.Draw()
    功能: 使用 Draw() 方法得到一个 ImageDraw 对象。

    2. 进行绘制

    • 点:point(xy, fill): 其中 xy 为点的元组列表, fill 为 RGBA 元组或者颜色名称的字符串
    • 线: line(xy, fill, width): 其中 xy 除了点点元组列表,还可以用整数列表,width 默认值为1,是可选值。
    • 矩形: rectangle(xy , fill, outline): xy 为矩形元组,outline 为 RGBA 元组,是一个可选值。
    • 椭圆: ellipse(xy, fill, outline): 和矩形一样
    • 多边形: polygon(xy ,fill, outline): xy 和 line 中的一样。

    绘制文本的步骤:

    1. 获得 ImageFont 对象

    格式:arialFont = ImageFont.truetype(os.path.join('/Library/Fonts','arial.ttf'),32)
    功能:从系统的字体目录中获取字体文件,返回一个 ImageFont 对象。

    2. 进行绘制

    格式:ImageDraw(xy, text, fill, font)
    功能:接受四个参数。需要注意: xy,是一个包含两个整数的元组,决定文字的左上角。text 为字符串格式。 font 为ImageFont 对象。





  • 相关阅读:
    访客登录方案设计与应用
    VS Code下载
    dockerfile COPY命令失效
    mysql排序字段值相等时,分页数据重复
    go使用json包Marshal方法得到异常结果[123 125]
    Mysql知识点概览
    dockercompose安装
    docker安装
    Shell脚本执行报错:Syntax error: "(" unexpected
    二进制数的位运算,角色权限,多种账号来源
  • 原文地址:https://www.cnblogs.com/FBsharl/p/10311144.html
Copyright © 2011-2022 走看看