雜
我們班級強制每個人都要進行青年大學習
看完以後要在羣裏發截圖(帶着自己的手機圖標和時間)
有時候碰到評級的還要求必須良好或優秀
…
形式主義什麼的都見鬼去吧
思路
如果要求發截屏:
使用PIL庫
我有一張手機截屏
他有一張青年大學習的截屏
換個頭就是我的了hhh
關於後臺數據的記錄:
寫個爬蟲把數據提交過去
好吧本來準備寫的,但是考慮到不同地區數據都不一樣,有寫代碼的幾個小時都夠看上百次青年大學習了,遂放棄。GayHub上有項目的,感興趣的可以參與一下,我們班交截圖就行了,所以懶得寫了。
文件結構解析
my_screenshot
存放一張你的手機截屏
other_screenshot
存放別人看完青年大學習的截圖
my_qndxx
是最後生成的換頭怪的存放目錄
CONSTANT.cfg
是配置文件
如果對拼湊的結果不滿意的話可以修改截取的高度
因爲每個人的屏幕設置都不一樣所以可能需要修改
第一個60是從你的截圖上60像素的位置切分,取頭部
第二個55是從別人的截圖上55像素的位置切分,取身體
想把切分位置往上改的話可以減小,反之增加
第三個參數是最後保存的文件名
資源
打包好的exe
鏈接:https://pan.baidu.com/s/1kLA_20kfsIbx7l-dWz3zWw
提取碼:mqjz
代碼
#!/usr/bin/python
# -*- coding: UTF-8 -*-
"""
@author: 無名Joker
@time:2020/03/10
Purpose: 青年大學習截圖生成器
Arguments: 自己的任意手機截圖、別人的一張學習完的截圖
自己截屏的頭部高度、別人截屏的頭部高度
Outputs: 先提取自己手機的頭部,再提取別人截屏的身體
最後粘起來
"""
import os
from PIL import Image
from configparser import ConfigParser
# 初始化配置文件
def init_constants():
config_parser = ConfigParser()
config_parser.read('CONSTANTS.cfg')
config = config_parser['default']
# 自己的頭部高度,別人的頭部高度,最後保存文件的名字
MY_HEAD_HEIGHT = int(config['MY_HEAD_HEIGHT'])
OTHER_HEAD_HEIGHT = int(config['OTHER_HEAD_HEIGHT'])
SAVE_FILE_NAME = str(config['SAVE_FILE_NAME'])
return MY_HEAD_HEIGHT, OTHER_HEAD_HEIGHT, SAVE_FILE_NAME
# 輸入自己的手機截圖和要截取其頭部的高度
# 得到一張背景
def photo_to_background(my_screenshot):
# 寬高
my_screenshot_weight, my_screenshot_height = my_screenshot.size
my_screenshot = my_screenshot.convert('RGB')
my_bkgrd_rgb = my_screenshot.getpixel((0, 0))
for y in range(my_screenshot_height):
for x in range(my_screenshot_weight):
# 依次得到每個點的RGB值
current_rgb = my_screenshot.getpixel((x, y))
# 提取頭部的圖標、時間等
if y <= MY_HEAD_HEIGHT:
if current_rgb == my_bkgrd_rgb:
my_screenshot.putpixel((x, y), BKGRD_RGB)
else:
my_screenshot.putpixel((x, y), BKGRD_RGB)
return my_screenshot
# 輸入別人的青年大學習截圖和頭部高度
# 得到一張貼紙
def screenshot_to_decal(other_screenshot):
# 寬高
screenshot_weight, screenshot_height = other_screenshot.size
# 要裁剪的矩形區域
box = (0, OTHER_HEAD_HEIGHT, screenshot_weight, screenshot_height)
my_decal = other_screenshot.crop(box)
return my_decal
# 輸入貼紙和背景進行粘貼
def paste_decal(decal, background):
# 背景寬高
background_weight, background_height = background.size
# 重設貼紙寬高使其適應背景
decal = decal.resize((background_weight, background_height - MY_HEAD_HEIGHT))
background.paste(decal, (0, MY_HEAD_HEIGHT))
return background
if __name__ == '__main__':
global MY_HEAD_HEIGHT, OTHER_HEAD_HEIGHT, SAVE_FILE_NAME
MY_HEAD_HEIGHT, OTHER_HEAD_HEIGHT, SAVE_FILE_NAME = init_constants()
# 灰 背景色的RGB
global BKGRD_RGB
BKGRD_RGB = (237, 237, 237)
# 得到一張手機截圖
my_screenshot_name = os.listdir("my_screenshot")[0]
my_screenshot = Image.open("my_screenshot/" + my_screenshot_name)
my_background = photo_to_background(my_screenshot)
# my_background.save("my_screenshot/wuming.jpg")
# 得到背景之後就可以關閉原截圖了
my_screenshot.close()
other_screenshot_name = os.listdir("other_screenshot")[0]
other_screenshot = Image.open("other_screenshot/" + other_screenshot_name)
my_decal = screenshot_to_decal(other_screenshot)
# my_decal.save("other_screenshot/wuming.jpg")
other_screenshot.close()
my_qndxx = paste_decal(my_decal, my_background)
my_qndxx.save("my_qndxx/" + SAVE_FILE_NAME)
my_decal.close()
my_background.close()
my_qndxx.close()