首頁>技術>

1 效果

2 說明

=====

https://blog.csdn.net/xufive/article/details/104059396

2.2 修改:對原始碼的垂直對聯V進行適當修改,用matplotlib展示圖片。

3 程式碼

=====

3.1 第1步:匯入模組

import ioimport requestsfrom PIL import Imageimport matplotlib.pyplot as plt  #用來展示圖片

3.2 第2步:定義函式,獲取線上漢字樣式

def get_word(ch, quality):    """獲取單個漢字(字元)的圖片    ch          - 單個漢字或英文字母(僅支援大寫)    quality     - 單字解析度,H-640畫素,M-480畫素,L-320畫素    """    # 把請求到的資料轉換為Bytes位元組流    fp = io.BytesIO(requests.post(url='http://xufive.sdysit.com/tk', data={'ch':ch}).content)    im = Image.open(fp)    w, h = im.size    if quality == 'M':        w, h = int(w*0.75), int(0.75*h)    elif quality == 'L':        w, h = int(w*0.5), int(0.5*h)        return im.resize((w,h))

3.3 第3步:獲取對聯背景圖

def get_bg(quality):    """獲取春聯背景的圖片"""        return get_word('bg', quality)

3.4 第4步:寫春聯

def write_couplets(text, HorV='V', quality='L', out_file=None):    """生成春聯    text        - 春聯內容,以空格斷行    HorV        - H-橫排,V-豎排    quality     - 單字解析度,H-640畫素,M-480畫素,L-320畫素    out_file    - 輸出檔名    """        usize = {'H':(640,23), 'M':(480,18), 'L':(320,12)}    bg_im = get_bg(quality)    text_list = [list(item) for item in text.split()]    #行    rows = len(text_list)    #列,一般是2    cols = max([len(item) for item in text_list])        if HorV == 'V':        #40+cols是與下邊的距離,40+rows是與左邊的距離        ow, oh = 40+rows*usize[quality][0]+(rows-1)*10, 40+cols*usize[quality][0]    else:        ow, oh = 40+cols*usize[quality][0], 40+rows*usize[quality][0]+(rows-1)*10    #out_im = Image.new('RGBA', (ow, oh), '#f0f0f0')    #春聯的畫布的底色是黃色,大小    out_im = Image.new('RGBA', (ow+2000, oh), 'yellow')    for row in range(rows):        if HorV == 'V':            #row_im = Image.new('RGBA', (usize[quality][0], cols*usize[quality][0]), 'white')            row_im = Image.new('RGBA', (usize[quality][0], cols*usize[quality][0]), 'yellow')            #20是與上面的距離            #offset = (ow-(usize[quality][0]+10)*(row+1)-10, 20)            #+4000是與左邊的距離,左邊對聯            #+2000是與左邊距離,右邊對聯            offset = (ow-(usize[quality][0]+2000)*(row+1)+4000, 20)        else:            row_im = Image.new('RGBA', (cols*usize[quality][0], usize[quality][0]), 'white')            offset = (20, 20+(usize[quality][0]+10)*row)                  for col, ch in enumerate(text_list[row]):            if HorV == 'V':                pos = (0, col*usize[quality][0])                 else:                pos = (col*usize[quality][0],0)                        ch_im = get_word(ch, quality)            row_im.paste(bg_im, pos)            row_im.paste(ch_im, (pos[0]+usize[quality][1], pos[1]+usize[quality][1]), mask=ch_im)                    out_im.paste(row_im, offset)        if out_file:        out_im.convert('RGB').save(out_file)        #改進一下,用matplotlib顯示圖片    imgxx = plt.imread(out_file)    plt.imshow(imgxx)    plt.axis('off')    plt.show()    #用image顯示    #out_im.show()

3.5 第5步:改成終端輸入對聯文字

text=input('請輸入對聯:')#text = '普天同慶 歡度春節'#儲存和顯示圖片write_couplets(text, HorV='V', quality='M', out_file='chunlian.jpg')'''例如:注意上聯和下聯之間有一個空格爆竹聲聲辭舊歲 和風送暖迎新春'''

4 簡潔完整的程式碼:

import ioimport requestsfrom PIL import Imageimport matplotlib.pyplot as plt  def get_word(ch, quality):    fp = io.BytesIO(requests.post(url='http://xufive.sdysit.com/tk', data={'ch':ch}).content)    im = Image.open(fp)    w, h = im.size    if quality == 'M':        w, h = int(w*0.75), int(0.75*h)    elif quality == 'L':        w, h = int(w*0.5), int(0.5*h)        return im.resize((w,h))def get_bg(quality):    return get_word('bg', quality)def write_couplets(text, HorV='V', quality='L', out_file=None):    usize = {'H':(640,23), 'M':(480,18), 'L':(320,12)}    bg_im = get_bg(quality)    text_list = [list(item) for item in text.split()]    rows = len(text_list)    cols = max([len(item) for item in text_list])    if HorV == 'V':        ow, oh = 40+rows*usize[quality][0]+(rows-1)*10, 40+cols*usize[quality][0]    else:        ow, oh = 40+cols*usize[quality][0], 40+rows*usize[quality][0]+(rows-1)*10    out_im = Image.new('RGBA', (ow+2000, oh), 'yellow')    for row in range(rows):        if HorV == 'V':            row_im = Image.new('RGBA', (usize[quality][0], cols*usize[quality][0]), 'yellow')            offset = (ow-(usize[quality][0]+2000)*(row+1)+4000, 20)        else:            row_im = Image.new('RGBA', (cols*usize[quality][0], usize[quality][0]), 'white')            offset = (20, 20+(usize[quality][0]+10)*row)                  for col, ch in enumerate(text_list[row]):            if HorV == 'V':                pos = (0, col*usize[quality][0])                 else:                pos = (col*usize[quality][0],0)                        ch_im = get_word(ch, quality)            row_im.paste(bg_im, pos)            row_im.paste(ch_im, (pos[0]+usize[quality][1], pos[1]+usize[quality][1]), mask=ch_im)                    out_im.paste(row_im, offset)        if out_file:        out_im.convert('RGB').save(out_file)        imgxx = plt.imread(out_file)    plt.imshow(imgxx)    plt.axis('off')    plt.show()text=input('請輸入對聯:')write_couplets(text, HorV='V', quality='M', out_file='chunlian.jpg')

來寫春聯

12
最新評論
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • 當NET5遇上OpenTelemetry,會碰撞出怎樣的火花