郭炜老师mooc第十章玩转python生态(学习python的各种库)

正是由于黑点的密集程度构成了颜色的深浅 所以只是如果单纯的采用image.convert('1')会得到一个抖动的图像

  • Python自带的库
    math, re, datetime, turtle, random .....
  • 无数第三方的库
    Pillow, jieba, request, matplotlib .....

用datetime库处理日期、时间

datetime模块定义了5个关于日期时间的类,

  • datetime.datetime:表示日期时间的类
  • datetime.timedelta:表示时间间隔的类
  • datetime.date:表示日期的类
  • datetime.time:表示时间的类
  • datetime.tzinfo:时区相关的类

 利用datetime类的实例方法strftime()可以轻松转为格式化的字符串,其中f便是format,格式化的意思。具体使用的适合需要传入定制的格式化字符串。

利用datetime类的静态方法strptime()可以轻松转为格式化的字符串,其中p便是parse,解析的意思,即从对于字符串格式中解析出日期时间数据。

【参考链接】【Python基础】datetime模块_python datetime模块-CSDN博客

处理日期

# 处理日期

import datetime #导入datetime模块
dtBirth = datetime.date(2001,8,14) #创建日期对象,日期为2001年8月14日
print(dtBirth.weekday()) #>>1 输出dtBirth代表的日期是星期几。0表示星期一

dtNow = datetime.date.today() #取今天日期,假设是 2024年3月9日
print("今天的日期是:", dtNow)

print(dtBirth < dtNow) #>>True 日期可以比大小
life = dtNow - dtBirth #取两个日期的时间差
print(life.days,life.total_seconds()) #>>8243 712195200.0
#两个日期相差8243天,即712195200.0秒

delta = datetime.timedelta(days = -10) #构造时间差对象,时间差为-10天
newDate = dtNow + delta #newDate代表的日期是dtNow的日期往前数10天
print(newDate.year, newDate.month, newDate.day, newDate.weekday())
#>>2024 2 28 2 2024年2月28日星期三

print(newDate.strftime(r'%m/%d/%Y')) #>>02/28/2024

newDate = datetime.datetime.strptime("2020.08.05", "%Y.%m.%d")
print(newDate.strftime("%Y%m%d")) #>>20200805

 处理时刻

# 处理时刻

import datetime
tm = datetime.datetime.now() #取当前时刻,精确到微秒
print(tm.year, tm.month, tm.day, tm.hour, tm.minute, tm.second, tm.microsecond)
#>>2020 8 15 20 32 53 899669 假设当前时刻是2020年8月15日20时32分53秒899669微秒

tm = datetime.datetime(2017, 8, 10, 15, 56, 10,0)
#构造一个时刻,2017年8月10日15时56分10秒0微秒
print(tm.strftime("%Y%m%d %H:%M:%S")) #>>20170810 15:56:10
print(tm.strftime("%Y%m%d %I:%M:%S %p")) #20170810 03:56:10 PM
# %H是二十四小时制,%I是十二小时制(后面加一个%p, 显示AM还是PM,上午还是下午)

tm2 = datetime.datetime.strptime("2013.08.10 22:31:24","%Y.%m.%d %H:%M:%S") #由字符串生成一个时间对象
delta = tm - tm2 #求两个时间的时间差
print(delta.days, delta.seconds, delta.total_seconds())
#>>1460 62686 126206686.0 #时间差是1460天零62686秒,总共126206686.0秒

delta = tm2 - tm
print(delta.days, delta.seconds, delta.total_seconds())
#>>-1461 23714 -126206686.0
delta = datetime.timedelta( days = 10, hours= 10, minutes=30, seconds=20)
#构造一个时间差,10天10小时30分20秒
tm2 = tm + delta
print(tm2.strftime("%Y%m%d %H:%M:%S")) #>>20170821 02:26:30

用random库处理随机事务

random库中的函数

import random
random.seed(2) #或random.seed("ok")....种子可以是随便什么数、字符串...
#则下面程序每次运行结果都一样,seed( )是拿来确定随机数生成的,如果使用相同的seed( )值,则每次生成的随机数相同
print(random.random())
print(random.uniform(1.2,7.8))
print(random.randint(-20,70))
print(random.randrange(2,30,3))
print(random.choice("hello,world"))
print(random.choice([1,2,'ok',34.6,'jack']))
lst = [1,2,3,4,5,6]
random.shuffle(lst)
print(lst)
print(random.sample(lst,3)) 

 实现4人玩牌的发牌模拟

# 实现4人玩牌的发牌模拟

import random
cards = [str(i) for i in range(2,11)]
print("cards:", cards)

cards.extend(list("JQKA"))
# extend是把每个元素都作为一个独立的元素扩充到原来的列表,而append则是把整个扩充列表作为一个元素追加到列表最后。
# extend能够接受的参数必须是一个可迭代对象。相比之下,比较熟悉的append则可以接受一个简单的元素,类型任意。

#cards是 ['2', '3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q','K', 'A']
allCards = [] #一副牌
for s in "♣♦♥♠": #中文输入法下打“梅花”就能出梅花字符......
    for c in cards:
        allCards.append(s+c) #allCards元素形式如: '♠3'
random.shuffle(allCards) #随机打乱52张牌
for i in range(4):
    onePlayer = allCards[i::4] #每个玩家都是隔三张牌取一张
    onePlayer.sort() #扑克牌排序规则略复杂,这个排序不太完美
    print(onePlayer) 
  • extend是把每个元素都作为一个独立的元素扩充到原来的列表而append则是把整个扩充列表作为一个元素追加到列表最后。
  • extend能够接受的参数必须是一个可迭代对象。相比之下,比较熟悉的append则可以接受一个简单的元素,类型任意。

用Pillow处理图像

Pillow库的主要作用包括图像的打开、保存、裁剪、旋转、缩放、调整大小、滤镜应用、颜色调整等。

Pillow库是Python中用于图像处理的强大库,它是Python Imaging Library(PIL)的一个分支。这个库支持多种图像格式,包括常见的JPEG、PNG、GIF、BMP等,提供了丰富的图像处理功能,如图像转换、图像增强、图像合成等。它还支持多种Python系统版本,便于在不同环境下使用,并且可以与GUI工具一起使用,处理一些较为复杂的图像任务。

 图像的缩放

# 图像的缩放

from PIL import Image #导入Image类进行图像处理
img = Image.open("E:/jupyter_projects/python_projects/图片/4K高清图片/36 《一起喝果汁喵》画师:炼丹 4K高清无水印壁纸.jpg") #将图像文件载入对象img
w,h = img.size #获取图像的宽和高(单位:像素),img.size是个元组,图片文件对象调用.size可以获取图片的尺寸信息

newSize = (w//2,h//2) #生成一个新的图像尺寸
newImg = img.resize(newSize) #得到一张原图像一半大小的新图像
print("新图片的尺寸大小:", newImg.size)

newImg.save("D:/桌面/一起喝果汁喵.jpg") #保存新图像文件
# 对新得到的图片文件调用.save(‘保存路径’)即可保存修改后的图片啦!

newImg.thumbnail((128,128)) #变成宽高各128像素的缩略图
# thumbnail() 函数是制作当前图片的缩略图, 参数size指定了图片的最大的宽度和高度。

newImg.save("D:/桌面/一起喝果汁喵_thumb.png", "PNG")
#保存新图像文件为png文件
newImg.show() #显示图像文件
# Image.show()显示此图像。此方法主要用于调试目的。

 图像的裁剪与粘贴

# 图像的裁剪与粘贴

from PIL import Image
img = Image.open("E:\\jupyter_projects\\python_projects\\图片\\4K高清图片\\38 诛仙 白龙 陆雪琪 4K高清壁纸 4K手机壁纸.jpg")
w,h = img.size[0]//3,img.size[1]//3
gap = 10 #九宫图中相邻两幅子图间的空白宽10像素
newImg = Image.new("RGB",(w * 3 + gap * 2,h * 3 + gap * 2),"white")
# 一张空白图片,用来将裁剪的九张小图片粘贴过来

'''
Image.new(mode, size, color=0)方法,顾名思义,是用来new一个新的图像,具体参数如下:
mode:模式,通常用"RGB"这种模式,
size:生成的图像大小
color:生成图像的颜色,默认为0,即黑色。
'''

for i in range(0,3):
    for j in range(0,3):
        clipImg = img.crop((j*w, i*h, (j+1)*w, (i+1)*h)) 
        '''
        image.crop的参数为一个四元组,表示裁剪区域的左上角坐标(先横坐标再纵坐标)和右下角坐标。
        使用该函数时需要注意以下几点:
        1、四元组的坐标值必须为整数,否则会报错。
        2、裁剪后的图片像素尺寸需要与裁剪区域一致,否则会出现图片被压缩或拉伸的情况。
        3、裁剪区域的左上角坐标需要在图片范围内,否则会报错。
        对于PIL图像库中的坐标,则是横向是x坐标,纵向是y坐标,
        '''
        
        clipImg.save("E:\\jupyter_projects\\python_projects\\图片\\九宫格图片\\grass%d%d.jpg" % (i,j))
        newImg.paste(clipImg,(j*(w + gap), i * ( h + gap))) #左上角坐标,先横坐标再纵坐标
        '''
        img.paste(im, box=None, mask=None),中文就是粘贴的意思,
        所以该方法就是将paste方法中,传入的图像粘贴在原图像上。
        img.paste(image,box)
        将一张图粘贴到另一张图像上。变量box或者是一个给定左上角的2元组,
        或者是定义了左,上,右和下像素坐标的4元组,或者为空(与(0,0)一样)。如果给定4元组,
        被粘贴的图像的尺寸必须与区域尺寸一样。如果模式不匹配,被粘贴的图像将被转换为当前图像的模式。
        '''
newImg.save("E:\\jupyter_projects\\python_projects\\图片\\九宫格图片\grass9.jpg") #保存九宫图
newImg.show()

图像的素描画

image = image.convert() 是图像实例对象的一个方法,接受一个 mode 参数,用以指定一种色彩模式

PIL有九种不同模式:

    1: 1位像素,黑白,每字节一个像素存储
    L: 8位像素,黑白
    P: 8位像素,使用调色板映射到任何其他模式
    RGB: 3x8位像素,真彩色
    RGBA: 4x8位像素,带透明度掩模的真彩色
    CMYK: 4x8位像素,分色
    YCbCr: 3x8位像素,彩色视频格式
    I: 32位有符号整数像素
    F: 32位浮点像素

 

 img.convert('1')
# 图像的素描化

from PIL import Image
img = Image.open("E:\\jupyter_projects\\python_projects\\图片\\4K高清图片\\879 民族风 清纯 美女 高清壁纸.jpg")
img = img.convert('1')
img.show()

 正是由于黑点的密集程度构成了颜色的深浅 所以只是如果单纯的采用image.convert('1')会得到一个抖动的图像

img.convert('L')
# 图像的素描化

from PIL import Image
img = Image.open("E:\\jupyter_projects\\python_projects\\图片\\4K高清图片\\879 民族风 清纯 美女 高清壁纸.jpg")
img = img.convert('L')
img.show()

 

 【参考链接】[Python] - 图像处理 ------ img.convert()-CSDN博客

 

image模块的各种方法含义:

【参考链接】python PIL库的Image 图片处理模块 画图修改等_img.load() python-CSDN博客

 

  • 19
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值