<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
之前在csdn上看見用python寫春聯的,這次突發奇想用python製作一張桌布,其元素包括背景、文字、圖片。
知識點 用PIL建立一張純色背景Image.new;圖片上新增文字ImageDraw,cv2只能顯示英文;轉換圖片的透明度;圖片上疊加圖片;jpg與png的區別。
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:WindowsFontssimhei.ttf', 30) # 設定字型,系統內建,也可下載,如自由字型 font = ImageFont.truetype(r'C:UsersAdministratorAppDataLocalMicrosoftWindowsFonts千圖小兔體.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生成桌布內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45