對於一個沒有任何藝術細胞的人,寫公衆號最頭疼的無異於文章封面了. 要麼選很差圖,選好圖了呢,公衆號這個2.35:1的詭異比例還會涉及到裁剪的問題...html
因此或許你已經發現了,個人文章封面很簡單. 純色圖片避免了裁剪的問題,成爲那些飈設計感和美感的妖豔貨色中的一股清流python
可是隻是純色的圖片,貌似沒有靈魂.git
今天要作的事情就是給個人清流般的封面注入靈魂.github
下面是一個不規範的類圖示例,請你們不要學習.web
其實思路很簡單算法
所謂的解碼就更簡單了,衆所周知MD5算法是不可逆的...再加上當初我是隨機取的三個字節,因此想經過顏色來解碼是不可能的.數據庫
可是!!! 我有一個絕妙的辦法...由於以前相關信息已經存到了數據庫裏,因此咱們直接在數據庫裏檢索顏色的RGB值就能夠了.(我簡直不要太機智)數組
注意,乾貨來了!!!微信
輸入內容處理想對比較簡單dom
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下經常使用的圖像處理模塊:
❝pillow是PIL的一個分支,而pillow-simd是pillow的一個分支.由於我也是第一次接觸圖像處理. 我發現很神奇的是 pillow的文檔和pillow-simd的文檔居然是一個. 可是在安裝的時候 又是兩個包...沒有搞明白怎麼回事. 若是有大神知道的話,麻煩留言解惑.
❞
此次我採用的是Pillow,緣由很簡單,殺雞焉用牛刀. 只是須要生成一個純色的小圖片而已. 安裝很簡單,若是使用Anaconda的話,它已經集成了pillow包. 若是使用的是純python3的環境,pip install pillow
就能夠了.
在引入包的時候須要注意. 雖然咱們用的是pillow,可是它的包名依舊是PIL. 因此在引入包的時候須要注意.
from PIL import Image
此次使用的是最基礎的方法. 主要就是建立圖像. 相關方法的具體文檔,請查閱這裏
PIL.Image.open(fp, mode='r')
PIL.Image.new(mode, size, color=0)
Image.save(fp, format=None, **params)
Image.show(title=None, command=None)
Image.close()
這裏要說的是,既然有open方法也有close方法. 這個Image對象也是支持with上下文管理器的.
因此打開一個圖像的時候能夠直接使用with...as...
語法
「打開一個圖片文件並顯示」
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是一款開源的,高性能的非關係型數據庫. 也就是傳說中的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的界面.
再下一步的計劃是改爲在線版而且跟微信公衆號對接.
實現上傳封面圖後每一個關注了公衆號的用戶均可以看到封面背後的"優雅且富有詩韻"的文字...