Python技能包:f**k青年大學習

我們班級強制每個人都要進行青年大學習
看完以後要在羣裏發截圖(帶着自己的手機圖標和時間)
有時候碰到評級的還要求必須良好或優秀

形式主義什麼的都見鬼去吧

思路

如果要求發截屏:
使用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()

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章