1. 程式人生 > 實用技巧 >批量生成海報 以及二維碼

批量生成海報 以及二維碼

# -*- coding: utf-8 -*-
"""
Created on Thu Jul 23 11:52:36 2020

@author: Administrator
"""
from PIL import Image,ImageDraw,ImageFont
import random
import qrcode

def random_name():
    # 刪減部分,比較大眾化姓氏
    firstName = "趙錢孫李周吳鄭王馮陳褚衛蔣沈韓楊朱秦尤許何呂施張孔曹嚴華金魏陶姜戚謝鄒喻水雲蘇潘葛奚範彭郎魯韋昌馬苗鳳花方俞任袁柳鮑史唐費岑薛雷賀倪湯滕殷羅畢郝鄔安常樂於時傅卞齊康伍餘元卜顧孟平
" \ "黃和穆蕭尹姚邵湛汪祁毛禹狄米貝明臧計成戴宋茅龐熊紀舒屈項祝董粱杜阮席季麻強賈路婁危江童顏郭梅盛林刁鍾徐邱駱高夏蔡田胡凌霍萬柯盧莫房繆幹解應宗丁宣鄧鬱單杭洪包諸左石崔吉" \ "龔程邢滑裴陸榮翁荀羊甄家封芮儲靳邴鬆井富烏焦巴弓牧隗山谷車侯伊寧仇祖武符劉景詹束龍葉幸司韶黎喬蒼雙聞莘勞逄姬冉宰桂牛壽通邊燕冀尚農溫莊晏瞿茹習魚容向古戈終居衡步都耿滿弘國文東毆沃曾關紅遊蓋益桓公晉楚閆" # 百家姓全部姓氏 # firstName = "趙錢孫李周吳鄭王馮陳褚衛蔣沈韓楊朱秦尤許何呂施張孔曹嚴華金魏陶姜戚謝鄒喻柏水竇章雲蘇潘葛奚範彭郎魯韋昌馬苗鳳花方俞任袁柳酆鮑史唐費廉岑薛雷賀倪湯滕殷羅畢郝鄔安常樂於時傅皮卞齊康伍餘元卜顧孟平" \
# "黃和穆蕭尹姚邵湛汪祁毛禹狄米貝明臧計伏成戴談宋茅龐熊紀舒屈項祝董粱杜阮藍閔席季麻強賈路婁危江童顏郭梅盛林刁鍾徐邱駱高夏蔡田樊胡凌霍虞萬支柯昝管盧莫經房裘繆幹解應宗丁宣賁鄧鬱單杭洪包諸左石崔吉鈕" \ # "龔程嵇邢滑裴陸榮翁荀羊於惠甄麴家封芮羿儲靳汲邴糜鬆井段富巫烏焦巴弓牧隗山谷車侯宓蓬全郗班仰秋仲伊宮寧仇欒暴甘鈄厲戎祖武符劉景詹束龍葉幸司韶郜黎薊薄印宿白懷蒲邰從鄂索鹹籍賴卓藺屠蒙池喬陰欎胥能蒼" \ # "雙聞莘黨翟譚貢勞逄姬申扶堵冉宰酈雍舄璩桑桂濮牛壽通邊扈燕冀郟浦尚農溫別莊晏柴瞿閻充慕連茹習宦艾魚容向古易慎戈廖庾終暨居衡步都耿滿弘匡國文寇廣祿闕東毆殳沃利蔚越夔隆師鞏厙聶晁勾敖融冷訾辛闞那簡饒空" \
# "曾毋沙乜養鞠須豐巢關蒯相查後荊紅遊竺權逯蓋益桓公晉楚閆法汝鄢塗欽歸海帥緱亢況後有琴樑丘左丘商牟佘佴伯賞南宮墨哈譙笪年愛陽佟言福百家姓終" # 百家姓中雙姓氏 firstName2="万俟司馬上官歐陽夏侯諸葛聞人東方赫連皇甫尉遲公羊澹臺公冶宗政濮陽淳于單于太叔申屠公孫仲孫軒轅令狐鍾離宇文長孫慕容鮮于閭丘司徒司空亓官司寇仉督子顓孫端木巫馬公西漆雕樂正壤駟公良拓跋夾谷宰父穀梁段幹百里東郭南門呼延羊舌微生樑丘左丘東門西門南宮南宮" # 女孩名字 girl = '秀娟英華慧巧美娜靜淑惠珠翠雅芝玉萍紅娥玲芬芳燕彩春菊蘭鳳潔梅琳素雲蓮真環雪榮愛妹霞香月鶯媛豔瑞凡佳嘉瓊勤珍貞莉桂娣葉璧璐婭琦晶妍茜秋珊莎錦黛青倩婷姣婉嫻瑾穎露瑤怡嬋雁蓓紈儀荷丹蓉眉君琴蕊薇菁夢嵐苑婕馨瑗琰韻融園藝詠卿聰瀾純毓悅昭冰爽琬茗羽希寧欣飄育瀅馥筠柔竹靄凝曉歡霄楓芸菲寒伊亞宜可姬舒影荔枝思麗' # 男孩名字 boy = '偉剛勇毅俊峰強軍平保東文輝力明永健世廣志義興良海山仁波寧貴福生龍元全國勝學祥才發武新利清飛彬富順信子傑濤昌成康星光天達安巖中茂進林有堅和彪博誠先敬震振壯會思群豪心邦承樂紹功鬆善厚慶磊民友裕河哲江超浩亮政謙亨奇固之輪翰朗伯巨集言若鳴朋斌樑棟維啟克倫翔旭鵬澤晨辰士以建家致樹炎德行時泰盛雄琛鈞冠策騰楠榕風航弘' # name = '中笑貝凱歌易仁器義禮智信友上都卡被好無九加電金馬鈺玉忠孝' # 10%的機遇生成雙數姓氏 if random.choice(range(100))>10: firstName_name =firstName[random.choice(range(len(firstName)))] else: i = random.choice(range(len(firstName2))) firstName_name =firstName2[i:i+2] sex = random.choice(range(2)) name_1 = "" # 生成並返回一個名字 if sex > 0: girl_name = girl[random.choice(range(len(girl)))] if random.choice(range(2)) > 0: name_1 = name[random.choice(range(len(name)))] return firstName_name + name_1 + girl_name else: boy_name = boy[random.choice(range(len(boy)))] if random.choice(range(2)) > 0: name_1 = name[random.choice(range(len(name)))] return firstName_name + name_1 + boy_name def creat_qr(str_href,path): """ 選做:為每位同學的海報製作成二維碼 所需引數:海報存放的地址,以及生成的路徑 """ img = qrcode.make(str_href) img.save(path+".png") def add_text(name): """ 為畢業證上新增姓名 """ #開啟原始照片 path="poster.jpg" img=Image.open(path) # 設定字型 draw = ImageDraw.Draw(img) font_medium_type = 'C:\Windows\Fonts\STXINWEI.TTF' font = ImageFont.truetype(font_medium_type,50) # 設定字型 #讓字型在正確的位置居中顯示 font_width, font_height = draw.textsize(name, font) draw.text((210+(70 - font_width-font.getoffset(name)[0]) / 2, 290+(10 - font_height-font.getoffset(name)[1]) / 2), name, '#6699ff',font) #儲存照片 path="picture/"+name+".png" print(path) img.save(path) img.close() return def main(): """ 主函式 """ try: #準備資料:準備不重名的1000個數據 counts=1000 name_arr=[] n=0 while n < counts: name=random_name() if name not in name_arr: name_arr.append(name) n+=1 print("建立不重名的資料量為:",len(set(name_arr))) for i in range(counts): add_text(name_arr[i]) pass except: print("程式報錯,程式結束") if __name__ == "__main__": main()
View Code