中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么用python代碼生成一張壁紙

發布時間:2022-02-09 16:24:54 來源:億速云 閱讀:223 作者:iii 欄目:開發技術

這篇文章主要介紹了怎么用python代碼生成一張壁紙的相關知識,內容詳細易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇怎么用python代碼生成一張壁紙文章都會有所收獲,下面我們一起來看看吧。

代碼

import os
from PIL import ImageFont, ImageDraw, Image
import cv2
import random

def white2transparent(img):
    """
    將白色部分設置為透明
    :param img: 需要修改的圖片
    :return: 修改后的圖片
    """
    # Image讀取形式----------------------------------------------
    # img = img.convert('RGBA')
    # img = img.convert("RGBA")  # 轉換格式,確保像素包含alpha通道
    # 加一個判斷,不是四通道就推出
    # width, height = img.size  # 長度和寬度
    # for i in range(0, width):  # 遍歷所有長度的點
    #     for j in range(0, height):  # 遍歷所有寬度的點
    #         data = img.getpixel((i, j))  # 獲取一個像素
    #         if (data.count(0) == 4):  # RGBA都是255,改成透明色
    #             img.putpixel((i, j), (255, 255, 255, 255))
    # return img
    # CV2讀取形式----------------------------------------------
    width, height = img.shape[:2]  # 長度和寬度
    for i in range(0, width):  # 遍歷所有長度的點
        for j in range(0, height):  # 遍歷所有寬度的點
            if (img[i, j, 0], img[i, j, 1], img[i, j, 2]) == (255, 255, 255):
                img[i, j, 3] = 0
    return img


def merge_img(bg_img, target_img, x1, y1):
    """
    將圖片與背景圖片融合
    :param bg_img: 背景圖片,要求4通道
    :param target_img: 目標圖片,要求四通道
    :param x1: target_img在bg_img的坐標,如果需要調節圖片大小,請在函數外resize
    :param y1:
    :return:
    """

    # 判斷jpg圖像是否已經為4通道
    if bg_img.shape[2] == 3 or target_img.shape[2] == 3:
        print("merge image error, image must 4 channels.")
        return

    '''
    當疊加圖像時,可能因為疊加位置設置不當,導致png圖像的邊界超過背景jpg圖像,而程序報錯
    這里設定一系列疊加位置的限制,可以滿足png圖像超出jpg圖像范圍時,依然可以正常疊加
    '''
    x2 = x1 + target_img.shape[1]
    y2 = y1 + target_img.shape[0]

    xx1 = 0
    yy1 = 0
    xx2 = target_img.shape[1]
    yy2 = target_img.shape[0]

    if x1 >= bg_img.shape[1]:
        x1 -= bg_img.shape[1]
    if y1 >= bg_img.shape[0]:
        y1 -= bg_img.shape[0]

    if x2 >= bg_img.shape[1]:
        xx2 = target_img.shape[1] - (x2 - bg_img.shape[1])
        x2 = bg_img.shape[1]
    if y2 >= bg_img.shape[0]:
        yy2 = target_img.shape[0] - (y2 - bg_img.shape[0])
        y2 = bg_img.shape[0]

    # 獲取要覆蓋圖像的alpha值,將像素值除以255,使值保持在0-1之間
    alpha_target = target_img[yy1:yy2, xx1:xx2, 3] / 255.0
    alpha_bg = 1 - alpha_target

    # 開始疊加
    for c in range(0, 3):
        bg_img[y1:y2, x1:x2, c] = ((alpha_bg * bg_img[y1:y2, x1:x2, c]) + (alpha_target * target_img[yy1:yy2, xx1:xx2, c]))

    return bg_img


def set_wallpaper(phone_model, content_list, out_file=None):
    """
        phone_model     - 手機型號
        content_list    - 內容
        out_file        - 輸出文件

    """
    resolution = (0, 0)  # 分辨率
    if phone_model == 'iphone se2':
        resolution = (750, 1334)

    # 設置背景
    if resolution != (0, 0):
        bg_img = Image.new('RGBA', resolution, '#fbedb2')
        # bg_im = cv2.cvtColor(np.asarray(bg_im), cv2.COLOR_RGB2BGR)
    else:
        print("don't have this version" )
        return

    # 添加語句
    # font = cv2.FONT_HERSHEY_DUPLEX  # cv2設置字體
    draw_text = ImageDraw.Draw(bg_img)
    # font = ImageFont.truetype('C:\Windows\Fonts\simhei.ttf', 30) # 設置字體,系統內置,也可下載,如自由字體
    font = ImageFont.truetype(r'C:\Users\Administrator\AppData\Local\Microsoft\Windows\Fonts\千圖小兔體.ttf', 30)
    i = 0
    for content in content_list:
        # cv2.putText(bg_im, content, (100, 100), font, 5, (254, 67, 101))  # cv2.putText() 只能顯示英文字符,中文會出現亂碼問題,
        offset = 120 * i
        draw_text.text((100, 120 + offset), content, font=font, fill=(0, 0, 0))
        i += 1
    # 將包含字體的讀取為cv2形式,以便添加圖片
    bg_img.save('./background.png')
    bg_img = cv2.imread('./background.png', cv2.IMREAD_UNCHANGED)
    os.remove('./background.png')

    # 添加圖標
    icon_img = cv2.imread('gold.png', cv2.IMREAD_UNCHANGED)
    white2transparent(icon_img)
    for j in range(1, len(content_list)+1):
        offset = 120 * j
        bg_img = merge_img(bg_img, icon_img, 66, offset)

    # 添加裝飾
    decorate_milktea_img = cv2.imread('milktea.png', cv2.IMREAD_UNCHANGED)
    decorate_fruit_img = cv2.imread('fruit.png', cv2.IMREAD_UNCHANGED)
    decorate_img_list = [decorate_milktea_img, decorate_fruit_img]
    for decorate_img in decorate_img_list:
        white2transparent(decorate_img)
        random_pos_x = random.randint(0,resolution[0]-300)
        random_pos_y = random.randint(740, resolution[1]-200)  # 范圍內的隨機數
        bg_img = merge_img(bg_img, decorate_img, random_pos_x, random_pos_y)

    # 保存圖片
    if out_file:
        cv2.imwrite('./wallpaper.png', bg_img)

    cv2.imshow('bgim', bg_img)
    cv2.waitKey(0)
    cv2.destroyAllWindows()


if __name__ == '__main__':
    content_list = [
        '天天開心',
        '心想事成'
    ]
    set_wallpaper('iphone se2', content_list, './wallpaper.png')

效果

怎么用python代碼生成一張壁紙

關于“怎么用python代碼生成一張壁紙”這篇文章的內容就介紹到這里,感謝各位的閱讀!相信大家對“怎么用python代碼生成一張壁紙”知識都有一定的了解,大家如果還想學習更多知識,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

牡丹江市| 和顺县| 马龙县| 来安县| 耒阳市| 西峡县| 理塘县| 青冈县| 华宁县| 盘锦市| 龙山县| 称多县| 云霄县| 兴山县| 工布江达县| 威信县| 类乌齐县| 柯坪县| 沁水县| 桦南县| 秭归县| 三亚市| 阜阳市| 枣庄市| 长乐市| 营口市| 隆尧县| 清徐县| 区。| 莱芜市| 东光县| 马尔康县| 长葛市| 涟水县| 甘泉县| 花垣县| 临漳县| 大竹县| 木兰县| 梓潼县| 云林县|