python 玩耍天地
词云 wordcloud
- 下载上面链接里对应的 whl (我选的 xxx_win32.whl)到 本地 进行安装
- 一般地, 会结合 jieba 分词 还有 matplotlib 来做
初识庐山面目
# -*- coding: utf-8 -*-
#导入所需库
from wordcloud import WordCloud
f = open(r'xxx\AI\go\wordcollections.txt','r').read()
wordcloud = WordCloud(background_color="white",width=1000, height=860, margin=2).generate(f)
__author__ = 'Frank Li'
# width,height,margin可以设置图片属性
# generate 可以对全部文本进行自动分词,但是对中文支持不好
# 可以设置font_path参数来设置字体集
#background_color参数为设置背景颜色,默认颜色为黑色
import matplotlib.pyplot as plt
plt.imshow(wordcloud)
plt.axis("off")
plt.show()
wordcloud.to_file('test.png')
# 保存图片,但是在第三模块的例子中 图片大小将会按照 mask 保存
# -*- coding: utf-8 -*-
import matplotlib.pyplot as plt
from PIL import Image as image
import jieba
import numpy
from wordcloud import WordCloud, ImageColorGenerator, STOPWORDS
__author__ = 'Frank Li'
def chinese_jieba(text):
# 通过jieba工具将中文文本做处理,并返回指定格式的内容
wordlist_jieba = jieba.cut(text)
text_jieba = ' '.join(wordlist_jieba)
return text_jieba
def main(filename):
with open(filename, 'rb') as f:
text = chinese_jieba(f.read().decode())
mask_pic = numpy.array(image.open('heart.png')) # 打开图像处理,设置遮罩层
# 设置固定的词个数为0
# stopwords = {'黑娃':0,'白嘉轩':0}
# 也可以按照下面格式设置
stopwords = set(STOPWORDS)
stopwords = stopwords.union(set(['黑娃', '白嘉轩'])) # 将不想在词云上出现的词,放入集合中,也就是设置固定词个数为0
wordclod = WordCloud(
background_color='white', # 设置背景颜色,默认是黑色
margin=0,
max_words=2000, # 关键字的个数
max_font_size=100, # 字体大小
font_path=r'C:\Windows\Fonts\simsun.ttc', # 设置中文识别
mask=mask_pic, # 添加遮罩层,也就是设置词云形状
stopwords=stopwords, # 过滤固定的词
).generate(text) # 将text里面所有的词统计,产生词云
# image_colors = ImageColorGenerator(mask_pic)
plt.imshow(wordclod)
# plt.imshow(wordclod.recolor(color_func=image_colors))
plt.axis('off')
plt.show()
wordclod.to_file('bailuyuan.jpg') # 保存图片
if __name__ == "__main__":
filename = r'C:\Users\FrankLi\Downloads\白鹿原.txt'
main(filename)
将图像转为 字符画
# -*- coding: utf-8 -*-
__author__ = 'Frank Li'
import os
import math
from PIL import Image
class ProcessBar(object):
"""一个打印进度条的类"""
def __init__(self, total): # 初始化传入总数
self.shape = ['▏', '▎', '▍', '▋', '▊', '▉']
self.shape_num = len(self.shape)
self.row_num = 30
self.now = 0
self.total = total
def print_next(self, now=-1): # 默认+1
if now == -1:
self.now += 1
else:
self.now = now
rate = math.ceil((self.now / self.total) * (self.row_num * self.shape_num))
head = rate // self.shape_num
tail = rate % self.shape_num
info = self.shape[-1] * head
if tail != 0:
info += self.shape[tail-1]
full_info = '[%s%s] [%.2f%%]' % (info, (self.row_num-len(info)) * ' ', 100 * self.now / self.total)
print("\r", end='', flush=True)
print(full_info, end='', flush=True)
if self.now == self.total:
print('')
class MosaicImg(object):
'''
用于将源图像当成一个像素点合成目标图像
'''
def __init__(self,
target, # 目标图像的路径,图像的透明区域会被忽略
img_path, # 源图片的目录,里面的图片将被拿来作为像素点
pixel_size=50, # 每个像素图片的宽高
size=(0, 0), # 最后生成的图片的尺寸,格式是 (width, height)
scale_factor=-1, # 缩放因子,0~1之间的浮点数,如果设定了这个,则 size 无效
):
path = os.path.split(target)
name, ext = os.path.splitext(path[1])
self.save_img = os.path.join(path[0], "mosaic_" + name + '.png') # 生成的图像名字
self.pixel_size = pixel_size
# 处理目标图像
self.target = Image.open(target).convert('RGBA')
if scale_factor == -1: # 使用 size 参数
self.target.thumbnail(size)
else: # 使用 scale_factor 参数
new_size = (scale_factor * self.target.size[0], scale_factor * self.target.size[1])
self.target.thumbnail(new_size)
# 处理源图像
self.images = {} # key是一张图片的主颜色,value是该图片的 PIL.Image 对象
self.images_count = {}
file_list = os.listdir(img_path)
print("正在读取源图像:")
pb = ProcessBar(len(file_list))
for file in file_list: # 遍历目录
img = Image.open(os.path.join(img_path, file)).convert('RGB')
img.thumbnail((pixel_size, pixel_size)) # 重设图片大小
color = self.main_color(img) # 计算主颜色
self.images[color] = img
self.images_count[color] = 0
pb.print_next()
# 每个图像最多使用的次数
self.max_img_use = 3 * self.target.size[0] * self.target.size[1] / len(self.images)
def gen_mosaic_image(self):
'''
使用初始化的设置生成像素图。
其具体做法是遍历目标图像,对每个像素点的颜色,从源图像
的主颜色中找到一个最接近的,然后将该图像当成像素点
'''
# 最后生成的图像的大小
size = (self.pixel_size * self.target.size[0], self.pixel_size * self.target.size[1])
self.mosaic_img = Image.new('RGBA', size)
# 开始生成图像
print("正在生成图像: ")
# 遍历每一个像素
pb = ProcessBar(self.target.size[0])
for x in range(self.target.size[0]):
for y in range(self.target.size[1]):
r, g, b, a = self.target.getpixel((x, y)) # 得到该像素的颜色
if a == 0: # 跳过透明区域
continue
min_score = 1000
min_color = None
for color in self.images: # 找到最接近的颜色
score = self.color_distance((r, g, b), color)
if score < min_score:
min_score = score
min_color = color
# 将图片贴上去
self.mosaic_img.paste(self.images[min_color], (x*self.pixel_size, y*self.pixel_size))
self.images_count[min_color] += 1 # 使用次数+1
# 超过了最大使用次数就删除
if self.images_count[min_color] > self.max_img_use:
self.images.pop(min_color)
pb.print_next()
print('正在保存图像,请稍候。')
self.mosaic_img.save(self.save_img, format='PNG')
return self.mosaic_img
def main_color(self, image):
'''
得到一张图片的主颜色,这里使用了偷懒的做法,
将图片resize到一个像素点大小,取该点的像素值
'''
img = image.resize((1, 1), Image.BICUBIC)
return img.getpixel((0, 0))
def color_distance(self, rgb_1, rgb_2):
'''
两个RGB颜色的相似度计算,使用LAB颜色空间
'''
R_1, G_1, B_1 = rgb_1
R_2, G_2, B_2 = rgb_2
rmean = (R_1 + R_2) / 2
R = R_1 - R_2
G = G_1 - G_2
B = B_1 - B_2
return math.sqrt((2+rmean/256)*(R**2)+4*(G**2)+(2+(255-rmean)/256)*(B**2))
if __name__ == '__main__':
current_path = os.path.dirname(os.path.abspath(__file__)) # 当前目录的完整路径
img_path = os.path.join(current_path, 'images/') # 存放源图像的目录
target = os.path.join(current_path, 'images/xinxin.png') # 目标图像
ma = MosaicImg(target, img_path, 70, scale_factor=0.1) # 初始化
img = ma.gen_mosaic_image()
短信接口 twilio
scrapy + fake_useragent 爬虫
# 做事就要做极致,要学便学无上法,最佳实践 ,不管他多难
pip 指定源
pip install pillow -i http://mirrors.aliyun.com/pypi/simple/ --extra-index-url https://pypi.python.org/simple --trusted-host mirrors.aliyun.com
清华:https://pypi.tuna.tsinghua.edu.cn/simple
阿里云:http://mirrors.aliyun.com/pypi/simple/
中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/
华中理工大学:http://pypi.hustunique.com/
山东理工大学:http://pypi.sdutlinux.org/
豆瓣:http://pypi.douban.com/simple/
DOS 时代游戏
https://dos.zczc.cz/
python 玩耍天地的更多相关文章
- 【itchat】用Python玩耍微信
[itchat] itchat是个基于网页版微信的python微信API.功能目前做到基本可以满足正常的消息收发,信息的获取等等.不过对于红包之类网页版微信不支持的功能,这个模块自然也就无法支持了. ...
- 如何用VSCode愉快的写Python
在学习Python的过程中,一直没有找到比较趁手的第三方编辑器,用的最多的还是Python自带的编辑器.由于本人用惯了宇宙第一IDE(Visual Studio),所以当Visual Studio C ...
- python与VScode
用VScode写python是非常方便的.vscode是一个功能非常强大的编辑器,下面介绍大致的使用方法: 下载安装python,配置环境变量. 下载安装VScode(vscode会自动连接pytho ...
- VSCode编辑器编写Python代码
如何用VSCode愉快的写Python https://code.visualstudio.com/ 在学习Python的过程中,一直没有找到比较趁手的第三方编辑器,用的最多的还是Python自带 ...
- Python之VSCode
在学习Python的过程中,一直没有找到比较趁手的第三方编辑器,用的最多的还是Python自带的编辑器.由于本人用惯了宇宙第一IDE(Visual Studio),所以当Visual Studio C ...
- sonn_game网站开发01:写在最前面
之前做的个人博客项目,日向博客现在已经进入后期完善阶段了.是时候开始打造一个新坑了. 然而改造个什么坑呢?构思了好几天,想了好多方案,都觉得没啥动手欲望.因为,我想做的是那种,自己能用得上,而且有一定 ...
- 理解 Python 的执行方式,与字节码 bytecode 玩耍 (下)
上次写到,Python 的执行方式是把代码编译成bytecode(字节码)指令,然后由虚拟机来执行这些 bytecode 而 bytecode 长成这个样子: b'|\x00\x00d\x01\x0 ...
- 理解 Python 的执行方式,与字节码 bytecode 玩耍 (上)
这里有个博客讲 Python 内部机制,已经有一些中文翻译. 可能因为我用的Python 3.5,例子跑起来有些不一样. 此外,我又查了其他一些参考资料,总结如下: Python 的执行方式 先看一个 ...
- Python之路,Day7 - Python基础7 面向对象
本节内容: 面向对象编程介绍 为什么要用面向对象进行开发? 面向对象的特性:封装.继承.多态 类.方法. 引子 你现在是一家游戏公司的开发人员,现在需要你开发一款叫做<人狗大战> ...
随机推荐
- [C#6] 8-异常增强
0. 目录 C#6 新增特性目录 1. 在catch和finally块中使用await 在C#5中引入一对关键字await/async,用来支持新的异步编程模型,使的C#的异步编程模型进一步的简化(A ...
- Linux安装Sqlite
下载SQLite源代码sqlite-3.6.23.1.tar.gz 复制sqlite-3.6.23.1.tar.gz到linux上的/usr/src目录 解压源代码 tar -xvzf sqlite- ...
- day09(垃圾回收机制)
1,复习 文件处理 1.操作文件的三步骤 -- 打开文件:硬盘的空间被操作系统持有 | 文件对象被应用程序持续 -- 操作文件:读写操作 -- 释放文件:释放操作系统对硬盘空间的持有 2.基础的读写 ...
- scala的多种集合的使用(6)之映射Map的操作方法
1.创建映射 1)创建不可变的映射 scala> val status = Map(1 -> "a",2 -> "b") status: sc ...
- 放下VS2010,拥抱VS2019
VS2019 再过几天就要正式发布了,我们还在使用 VS2010 进行软件开发.由于所处行业环境及项目类型,加之之前的代码积累,所以即使不用新的开发环境.新的语言技术也能比较好的完成工作.那究竟要不要 ...
- vue学习初探
一.环境的搭建安装 VS Code vue开发环境的搭建 理解vue的脚手架 合适的cnpm版本
- 免费高端出辕营,横空出世惊鬼神 Excel插件:ExcelPower_Helper 0.41初出茅庐
免费高端出辕营,横空出世惊鬼神 Excel插件:ExcelPower_Helper 0.41初出茅庐 隐鹤 倾心开发 2019.4.1 1. 引言 经过前后大约零零散散的一年的开发, ...
- open live writer 测试
什么是Hash表 1.定义 Hash(散列/哈希),就是把任意长度的输入(又叫做预映射, pre-image),通过散列算法,变换成固定长度的输出,该输出就是散列值.这种转换是一种压缩映射,也就是,散 ...
- nodejs 实现跨域
1.nodejs let http = require('http'); http.createServer((req,res) => { res.setHeader("Access- ...
- 解决IOS微信浏览器底部会出现向前向后返回按钮,返回不刷新的问题
<script type="text/javascript"> //解决IOS返回页面不刷新的问题 var isPageHide = false; window.add ...