python邮件发送、字符(动)画

目录

  • 1. 发送邮件
    • 1.1 准备(qq邮箱发送为例)
    • 1.2 代码
  • 2. 图片转字符画
  • 3. 视频转字符动画

1. 发送邮件

1.1 准备(qq邮箱发送为例)

python邮件发送、字符(动)画_第1张图片

1.2 代码

SMTP 是python当中邮件发送的协议 内置支持的功能库 发送文本或者附件
python当中模块 smtplib、email 两个模块,email负责构造邮件 stmp负责发送

import smtplib
# 构造邮件
from email.mime.text import MIMEText
import time

def send_message():
    # 1.定义邮箱服务  用户  密码或授权码  接收人
    mail_server = "smtp.qq.com"
    mail_user = "[email protected]"
    mail_password = "lfxtxtfpytheljcafdh"# 去名
    to = "[email protected]"

    # 2.进行邮件消息定义   邮件格式转换
    message="你好啊,中午吃点啥?"
    message = MIMEText(message)


    # 3. 指定主题(标题)  发件人的设定
    message['subject'] = '小傻瓜'
    message['From'] = mail_user

    # 4.创建发送对象,端口号记住就行了
    mail = smtplib.SMTP(mail_server, 25)
    mail.set_debuglevel(1)

    # 5.登录
    mail.login(mail_user, mail_password)

    # 6.发送邮件
    mail.sendmail(mail_user, to, message.as_string())

    # 7.断开服务
    mail.quit()
    print("邮件发送成功!")
# 可以多次发送
for i in range(5):
    send_message()
    time.sleep(10)

2. 图片转字符画

工具:image
思路:
1.通过image打开图片
2.分析每一个像素点
3.颜色转换,默认是RGB,转成黑白灰转换
4.不同灰度对应不同字符映射
5.本地存储

import Image
def getchar(r,g,b):
    # 转成灰度
    gray = r*0.2126 + g*0.7152 + b*0.0722
    # 设定指定字符   从左到有逐渐变浅
    txt = list("@MNA&mno,.  ")
    # 256匹配到相应数量个数
    n = 256/len(txt)
    # 找到匹配下标
    index = int(gray/n)
    return txt[index]

if __name__ == '__main__':
    im = Image.open("./img/demo.jpg")
    # 降低图片大小
    WIDTH = 180
    HEIGHT =280
    im = im.resize((WIDTH, HEIGHT), Image.NEAREST)
    txt = ''
    for j in range(HEIGHT):
        for i in range(WIDTH):
            pix = im.getpixel((i, j))
            txt += getchar(*pix)
        txt += '\n'
    with open("./result_txt/wang2.txt", 'w') as ff:
        ff.write(txt)
    im.show()
    print('完毕')

3. 视频转字符动画

思路:
动画(一帧一帧的画面连起来)
把得到的视频进行拆分,拆分成一帧一帧的画面,然后进行一帧一帧的修改
转换成对应的字符画,然后再进行一帧一帧的刷新显示。
工具:
cv2模块,opencv,
opencv-cont

# 需安装包opencv-contrib-python
import cv2
import os

def getchar(num):
	# 设定指定字符   从左到有逐渐变浅
    txt = list("@MNA&mno,.  ")
    n = 256/len(txt)
    index = int(num/n)
    return txt[index]

if __name__ == '__main__':
    # 文件读取cv2,VideoCapture()可以读取文件.
    # 1.如果参数为0,打开摄像头;
    # 2.如果为路径,则打开相应视频
    cv = cv2.VideoCapture('./video/laohuyuan.mp4')
    WIDTH = 55    # 宽
    HEIGHT = 30     # 高
    sum=0
    data_list=[]
    if cv.isOpened():
        # boo代表当前是否读到数据  im代表当前图像画面
        boo, im = cv.read()
    else:
        boo = False
    while boo:
        sum += 1
        txt = ""
        gray = cv2.cvtColor(im, cv2.COLOR_BGR2GRAY)
        gray = cv2.resize(gray, (WIDTH,HEIGHT))
        for y in gray:
            for x in y:
                # getchar(x)
                txt += getchar(x)
            txt +="\n"
        data_list.append(txt)
        boo, im = cv.read()
        if sum % 100 == 0:
            print("当前打印第%d帧"%sum)
	# 开始展示动画
    for item in data_list:
        os.system('cls')
        print(item)
        print("\n\n")

你可能感兴趣的:(python,python,开发语言)