千锋教育-做有情怀、有良心、有品质的职业教育机构

400-811-9990
手机站
千锋教育

千锋学习站 | 随时随地免费学

千锋教育

扫一扫进入千锋手机站

领取全套视频
千锋教育

关注千锋学习站小程序
随时随地免费学习课程

上海
  • 北京
  • 郑州
  • 武汉
  • 成都
  • 西安
  • 沈阳
  • 广州
  • 南京
  • 深圳
  • 大连
  • 青岛
  • 杭州
  • 重庆
当前位置:深圳千锋IT培训  >  行业资讯  >  深圳Python培训哪家好?如何用Python生成GIF动图?

深圳Python培训哪家好?如何用Python生成GIF动图?

来源:千锋教育
发布人:
时间: 2022-01-12 11:32:00

  要知道,除了用途广泛之外,Python自身也具备很强大的优势,入门门槛较低,具有丰富和强大的库。它常被昵称为胶水语言,能够把用其他语言制作的各种模块(尤其是C/C++)很轻松地联结在一起。那么,今天就带大家来了解下,如何用Python生成GIF动图?

PY1

  其实,网上也有很多图片转 ascii art 的教程,不如我们就来试试看 gif 转 ascii art:

  要将gif图转换成字符画肯定先要知道如何将一张静态的图片转换成字符画简单来说是将一张图片的每个像素点的rgb值都转换成灰度值然后建立起灰度值和字符串的对应关系最后就能用字符串来表示像素啦!

  看看代码:

  def rgb_to_ascii(r, g, b, alpha=256):
    '''
    通过灰度值的映射
    将每一个rgb值对应成一个ascii符
    也就实现了rgb -> ascii
    '''
    # 当像素透明时,直接返回一个空白字符串
    if alpha == 0:
        return ' '

    length = len(ASCII_CHAR)
    gray = int(0.299 * r + 0.587 * g + 0.114 * b)
    # 灰度值和字符串的对应关系
    # 每个字符串对应灰度值的区间是
    unit = (256.0 + 1)/length
    # 找到灰度值所对应字符串的下标
    index = int(gray/unit)
    return ASCII_CHAR[index]

def image_to_ascii_chart(image):
    '''
    # 图片转ascii图
    先来说下实现原理:
    # RGB
    RGB色彩模式是通过对红(R)、绿(G)、蓝(B)
    三个颜色通道的变化以及它们相互之间的叠加来得到各式各样的颜色
    通常情况下,RGB各有256级亮度 其区间为[0,255] 也就是256个阶梯
    # 灰度图
    灰度图是指只含亮度信息,不含色彩信息的图象,
    就象我们平时看到的黑白照片:亮度由暗到明,变化是连续的。
    rgb向灰度值转换的公式是:
    gray = 0.299r + 0.587g + 0.114b
    所以灰度值的区间是 [0,(0.299+0.587+0.114)*255] ~> [0,255]
    '''

    width, height = image.size
    text = ''
    for y in range(height):
        line = ''
        for x in range(width):
            # 找到对应位置的像素点
            dot = image.getpixel((x, y))
            line += rgb_to_ascii(*dot)
        text += line
        text += '\n'
    return text

  之后就是很简单的截取gif图里的每一帧,将每一帧都解析保存成字符串就好了

  def gif_to_ascii_chart(path):
    frames = list()
    gif = Image.open(path)
    imgs = [frame.copy() for frame in ImageSequence.Iterator(gif)]
    for img in imgs:
        image = img.convert("RGBA")
        frames.append(image_to_ascii_chart(resize_img(image)))
    return frames

  Python里的屏幕刷新:

  每一帧的图片都会以字符串的形式保存在内存里但是我们如何像真的gif图一样,展示它呢?如果直接print出来,那肯定不是一个连续的动图在Python里想要在print的同时刷新屏幕一般是这样做的:

  print('xxy',end='\r',flush=True)

  可是这样只能做到单行刷新,不能刷新整个屏幕在经过一番搜索之后,我发现可以通过 ANSI码 来刷新整个屏幕

  def clear_screen():
    '''
    ANSI 屏幕控制
    '\033[2J' 代表清空屏幕
    '''
    print('\033[2J')

  在学Python的小伙伴,不妨也可以自己尝试下去用Python生成GIF动图。其实也是挺有意思的呢~

  千锋深圳Python培训课程内容不断升级,推出最贴近企业实战的机器学习案例,例如人脸识别,手写数字识别,汽车车牌号识别等。千锋深圳Python培训在做好前期企业调研之后,将潮流技术完美融入课程体系,实用性强,注重理论更重实践,结合项目真实工作流程,进行项目实训!

声明:本站稿件版权均属千锋教育所有,未经许可不得擅自转载。

猜你喜欢LIKE

前端培训哪个机构比较好?千锋好吗

2022-11-17

软件测试培训一般多久?学什么?

2022-11-16

python培训管用吗?学完好找工作吗?

2022-11-15

最新文章NEW

html培训教程有用吗?小白怎么入行?

2022-11-28

前端培训速成班深圳这里有吗?哪家好

2022-11-25

哪里的python培训班好?怎么入行

2022-11-23

相关推荐HOT

更多>>

快速通道 更多>>

最新开班信息 更多>>

网友热搜 更多>>