【正经的AI on Python入门系列】0.来学点Python吧!从一个斗图小工具开始

Before The Beginning

    近年,技术圈炒的最火的两个话(ba)题(gua)不外乎就是人工智障智能以及炒币区块链了,这个系列文章我主要以一个小菜鸟的角度一步一步的对人工智能的相关知识作一点了解,也算是一个颤颤巍巍追着AI浪潮公交车的社会主义五好青年,咳咳,扯远了...其实对于人工智能,严格意义上更多的是一个科学领域的课题,其中更多的是数学、语言学、社会学、神经科学的研究内容,对于咱们这种社会底层的小码农想要进入这个领域每每可能面临的是一大堆的专业名词,一大堆的技术论文,一大堆公开课还有一大堆的不知道到底搞懂没有可是吹的很牛逼的培训机构讲师,门都没入就被各类忽悠到西伯利亚去了。
    所以,本文将会以一些正经的严谨的有深度的(大概吧)的课题,慢慢的接触人工智能的相关知识。java

Why Python?

    提起人工智能,就不得不提Python语言,但实际上Python不是什么新东西,反而这是一门至关老的语言了起源甚至能够追溯到80年代末90年代初,那为什么它会在人工智能这个风口独领风骚占据了半壁江山呢?Python的特色整体能够概括成如下几点:python

  • 成熟完善的社区——比起go、koltin之类的新兴语言,相关资料简直是好找一个数量级
  • 大量的库——其中包括了Python的库、用Python包装的C/C++库、甚至各类语言的库
  • 与生俱来的C/c++互操做性——其实不止C,Python与不少语言都具有良好的互操做性,胶水语言的大名不是白叫的
  • 语法简单优雅——Python的哲学就是简单,甚至某些问题只会提供你惟一的解决方案,不够灵活但简单啊!并且,对于一些不是计算机专业人士来讲,他的语法可能更接近天然语言,更容易被接受,并且是真正的编程语言(它的竞争对手——各类Shell脚本语言哭晕在厕所)

Hellow World!

好的,按照国际管理,咱们先用python来写个hellow worldc++

P.S. 本文基于Python3,并且一些语法细节也不会一一讲解,更完整的语法还请查阅官网文档!如非特殊状况的话仍是更推荐你们学习Python3,至于Python2跟Python3的区别就不在赘述了。

建立项目文件

Python源码以.py为后缀,如下为一个最简例子:git

example-1: helloWorld.pygithub

# -*- coding:utf-8 -*-
#__author__ = 'akers'

print("hellow world !")

没错,就是这么简单!用python helloWorld.py运行,就能看到打印的Hellow World了!(没错,我单词打错了,仅此一家,版权全部,若有雷同,纯属巧合,本人不保留追究权利!)
由于Python柔和了面向对象、面向过程、函数式编程等多种编程方式,所以相似这种直接在源文件中书写命令也是支持的,这种写法在制做一些小工具、小脚本、小实验的时候很是很是的方便,但咱们要严谨一点对吧,因此咱们再来个正经点的:编程

Python中的main函数

如下为一个Python的main方法的最简例子:
example-1: hello_world_main.pywindows

# -*- coding:utf-8 -*-
#__author__ = 'akers'

if __name__ == "__main__":
    print("hellow world !");

在上面例子中的if __name__ == "__main__":即为平时咱们熟知的main方法了,那至于一些以为这个很别扭的,看不惯的,可使用以下这种格式的:编程语言

# -*- coding:utf-8 -*-
#__author__ = 'akers'

import sys #包导入

# 常见的main函数定义
def main(argv=[]):
    print("hellow world: ", argv)


# 你看不到我,你看不到我
if __name__ == "__main__":
    main(sys.argv) # sys.argv获取命令行参数

这样是否是就亲切不少了呢,跟你熟悉的java和c是否是就同样同样了呢....额....你说那个__name__啥的,没事你就当没看见了!啊?你问这个__name__是什么?其实它是一个内置变量,若是是直接执行的话,编译器会传入"main"若是是做为包引入,会传入包名。
而后,本期文章就到此结束了,才怪!下面让咱们把HelloWorld完善一下函数式编程

更高大上的hello world

首先,咱们准备两个素材

先准备一个底图
图片描述函数

而后请出——————————馆长大人:
图片描述

而后,使用PIL库组合一下它们

PIL是Python的一个视觉处理库,目前已经中止维护了,但它后继有人啊,pillow库fork了它,所以通常咱们说PIL的时候,实际上用的是pillow
Python的外部依赖,须要经过pip工具进行安装,而后才能在代码里import到相应的包,下面以安装过pillow为例:

pip install pillow

引入依赖包

from PIL import Image,ImageDraw,ImageFont

加载图片

#导入表情背景
background=Image.open('./resources/background/pander/default.png')
#导入表情
faceImg=Image.open('./resources/face/jgz/laugth.png')

组合图片

#建立底图
target=Image.new('RGBA', (250, 250), (0, 0, 0, 0))
#表情背景贴到底图上
target.paste(background, (0,0))
#表情图贴在合适的位置上,注意啊,别挡到背景图
target.paste(faceImg, (62,37))

加上点文字

#ImageDraw为PIL的绘图模块
draw = ImageDraw.Draw(target)
#设置字体
font = ImageFont.truetype('./resources/msyh.ttc', 30)
#底图上的10,200位置写入文字
draw.text((10, 200), argv[1],fill='black', font=font)

上面的argv[1]就是取第一个命令行参数

走你!

运行一下咱们脚本:

python emofigther.py "Hellow World!"

而后,你就会获得一个Hellow World!(没错,我依然打错单词了!)
图片描述

随便再扩展一下

我相信大家的斗图之魂已经有点按耐不住了,可是等等,如今生成的图片还获得output文件夹找,很是不方即是吧,能不能实如今运行脚本后,生成的图片自动放到剪贴板呢?固然能够!咱们能够用pywin32这个package,他提供了一套用python封装的win32库(windows应用开发的一套底层库)接口。

from io import BytesIO
import win32clipboard as clip
import sys, platform, win32con

if 'Windows' in platform.platform() or 'windows' in platform.platform():
    # 打开字节流
    output = BytesIO()
    # 打开剪贴板
    clip.OpenClipboard() 
    # 先清空剪贴板
    clip.EmptyClipboard()
    # 将图片保存到字节流
    target.save(output, format="BMP")
    # 去掉字节流中的前14个字符(BMP位图文件头)
    data = output.getvalue()[14:]
    # 将图片放入剪贴板,这里是不带文件头的数据
    clip.SetClipboardData(win32con.CF_DIB, data) 
    clip.CloseClipboard()
    output.close()

而后再运行下咱们的emofigther

python emofigther.py "Ctrl-V大法好!"

而后找个地方试试Ctrl-V,惊喜不惊喜,意外不意外?
图片描述

Ending

至此,咱们已经用python轻松愉快的学会了制做一个斗图工具了
图片描述

本章节的全部例子,均可以在个人GitHub上找到:sources of example-1
图片描述

等等,有BUG!
好吧,目前咱们的小工具可能还存在着一些小小的瑕疵:

  • 文本是左对齐的,如何进行居中呢?
  • 当字数过多的时候,怎么保证能所有显示呢?
  • 底图与表情都只有一款,好单调啊,都斗不过别人了,咋办呢?

恩,为了解决这些问题,咱们——————
图片描述

相关文章
相关标签/搜索