数据库怎么用Java做封面_一个毫无用处的公众号封面生成器

一个毫无用处的公众号封面生成器

对于一个没有任何艺术细胞的人,写公众号最头疼的无异于文章封面了. 要么选不好图,选好图了呢,公众号这个2.35:1的诡异比例还会涉及到裁剪的问题...

所以或许你已经发现了,我的文章封面很简单. 纯色图片避免了裁剪的问题,成为那些飚设计感和美感的妖艳货色中的一股清流

但是只是纯色的图片,貌似没有灵魂.

今天要做的事情就是给我的清流般的封面注入灵魂.

一个极其不规范的类图

下面是一个不规范的类图示例,请大家不要学习.

68402f166bbbb5a4ebf1bc8b6387ea40.png封面生成

9a22ca069042a060cc8c3f9d2749f3d8.png解码模块

思路总结

其实思路很简单

获取一段文字,解码为UTF-8的二进制串

将解码后的二进制串进行md5摘要,获得一个128位的digest

通过random.randomint()方法在这个128位的二进制串上 随机选取3个字节做RGB颜色.

生成一个253*100的图片保存到本地.同时将相关信息存入mongoDB数据库.

所谓的解码就更简单了,众所周知MD5算法是不可逆的...再加上当初我是随机取的三个字节,所以想通过颜色来解码是不可能的.

但是!!! 我有一个绝妙的办法...因为之前相关信息已经存到了数据库里,所以我们直接在数据库里检索颜色的RGB值就可以了.(我简直不要太机智)

知识点总结

注意,干货来了!!!

输入内容的处理

输入内容处理想对比较简单

def encode(self):

return hashlib.md5(self.raw_input_str.encode('utf-8')).hexdigest()

def color_generator(self, raw_digest):

r_index = random.randint(0, 30)

g_index = random.randint(0, 30)

b_index = random.randint(0, 30)

r_color = int(raw_digest[r_index:r_index + 2], base=16)

g_color = int(raw_digest[g_index:g_index + 2], base=16)

b_color = int(raw_digest[b_index:b_index + 2], base=16)

return r_color, g_color, b_color

先使用hashlib下的方法m5()方法和hexdigest()方法获取哈希值.

然后随机一下取出3个字节,分别做R G B颜色就可以了.

图像处理

之前约等于没有接触过图像处理这一块,所以特地去查了一下python下常用的图像处理模块:

NumPy : 这个库是科学计算的一个基础库,主要用来处理N维数组对象以及一些基础数学计算,比如傅里叶变换,线性代数等. 算是一个图片处理的中间库

OpenCV : 一个专业的计算机视觉库. 可以用于图像视频等的处理,比如人脸识别之类...

PIL: Python自带的图像处理库,由于年久失修,目前处于门可罗雀的状态

Pillow: PIL的志愿者版本,由于PIL已经很久没有维护,功能简单而且只支持到python2.x. 所以志愿者们在PIL的基础上开发出了pillow,支持更多的功能且支持python3

Pillow-SIMD: PIL究极进化版,速度更快,功能更强. SIMD指的是single instruction multiple data(单指令,多数据),是一种对海量数据进行相同操作的算法. 据说速度可以媲美OpenCV

pillow是PIL的一个分支,而pillow-simd是pillow的一个分支.因为我也是第一次接触图像处理. 我发现很神奇的是 pillow的文档和pillow-simd的文档竟然是一个. 但是在安装的时候 又是两个包...没有搞明白怎么回事. 如果有大神知道的话,麻烦留言解惑.

pillow模块的基本使用

这次我采用的是Pillow,原因很简单,杀鸡焉用牛刀. 只是需要生成一个纯色的小图片而已. 安装很简单,如果使用Anaconda的话,它已经集成了pillow包. 如果使用的是纯python3的环境,pip install pillow就可以了.

在引入包的时候需要注意. 虽然我们用的是pillow,但是它的包名依旧是PIL. 所以在引入包的时候需要注意.

from PIL import Image

这次使用的是最基础的方法. 主要就是创建图像. 相关方法的具体文档,请查阅这里

PIL.Image.open(fp, mode='r')

「作用:」 打开一个图像文件.

「参数:」

fp:文件句柄或者文件路径

mode: 和文件操作时候的mode一样,r表示只读,w表示只写. w+表示读写

「返回值:」 Image对象

PIL.Image.new(mode, size, color=0)

「作用:」 创建一个Image对象.

「参数:」

mode:图像模式,具体参考文档.

size:图像大小

color:颜色

「返回值:」 Image对象

Image.save(fp, format=None, **params)

「作用:」 保存图像到文件

Image.show(title=None, command=None)

「作用:」 调用本地看图软件打开图像

Image.close()

这里要说的是,既然有open方法也有close方法. 这个Image对象也是支持with上下文管理器的.

所以打开一个图像的时候可以直接使用with...as...语法

pillow模块的简单示例

「打开一个图片文件并显示」

def show_img()

with Image.open(self.file_path) as img:

img.show()

return img

「生成一个新的纯色图片并保存到文件」

def new_a_image():

img = Image.new('RGB',(253,100),(240,233,204))

img.save('demo.jpg')

「获取某个像素点的RGB值」

def get_color_from_file(self):

with Image.open(self.file_path) as img:

color = img.getpixel((100, 100))

return color

mongoDB数据库基本操作

MongoDB是一款开源的,高性能的非关系型数据库. 也就是传说中的NoSQL数据库中的热门款. 主要以key-value为作为存储结构.

具体的介绍可以参见这篇博文: Mongodb介绍

这里简单介绍一下mongoDB的操作.

MongoDB的安装和Robo 3T的安装使用等,已经写进了我的小本本. 有空再来写. 今天先简单介绍一下mongoDB的基本操作.

在python中,我们是使用「pymongo」这个模块来操作MongoDB数据库的.

基本使用很简单,放一小段代码一看就懂.

import pymongo

MONGO_URL = 'localhost'

MONGO_DB = 'wmcoding_cover'

MONGO_TABLE = 'cover'

# 声明连接客户端

client = pymongo.MongoClient(MONGO_URL, connect=False)

# 声明要操作的数据库

db = client[MONGO_DB]

# 保存数据到mongoDB. 直接使用insert_one()方法就可以了

def save_to_mongo(self, digest, color, feeling, file_path):

res = {

'digest': digest,

'color': color,

'dscp': feeling,

'path': file_path

}

if db[MONGO_TABLE].insert_one(res):

print('cover save to database successful!')

return True

return False

# 同样检索的话,使用find_one()方法,获取一条记录. 该记录会以列表的形式展现

def decode(self):

if self.file_path:

self.color = self.get_color_from_file()

res = db[MONGO_TABLE].find_one({'color': list(self.color)})

return res['dscp']

更多关于mongoDB的操作可以参见崔大佬的文章:Python操作MongoDB看这一篇就够了

代码已经上传到了github,感兴趣的可以拿来看一看. Cover Generator

后话

现在这个版本比较简陋.

下一步的计划是给它加个GUI的界面.

再下一步的计划是改成在线版并且跟微信公众号对接.

实现上传封面图后每个关注了公众号的用户都可以看到封面背后的"优雅且富有诗韵"的文字...

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值