51Testing
怬
µçÄÔ°æ

ÓÃPythonд´ºÁª£ºÊãд×îÕæ³ÏµÄ×£¸£ºÍ×îÃÀºÃµÄÆíÔ¸

2020-1-23 09:26×÷ÕߣºwebmasterÀ´Ô´£ºÍøÂçתÔØ

1. Ç°ÑÔ
´ºÁªÊÇÖйú´«Í³ÎÄ»¯ÖÐ×î¾ßÄÚº­µÄÔªËØÖ®Ò»£¬ËüÒÔ¶ÔÕ̹¤Õû¡¢¼ò½à¾«ÇɵÄÎÄ×ÖÃè»æÃÀºÃÐÎÏó£¬Êã·¢ÃÀºÃÔ¸Íû£¬ÊÇÖйúÌØÓеÄÎÄѧÐÎʽ£¬ÊÇ»ªÈËÃǹýÄêµÄÖØҪϰËס£Ã¿·ê´º½ÚÆڼ䣬ÎÞÂÛ³ÇÊл¹ÊÇÅ©´å£¬¼Ò¼Ò»§»§¶¼Òª¾«Ñ¡Ò»¸±´óºì´ºÁªÌùÓÚÃÅÉÏ£¬´Ç¾ÉӭУ¬ÒÔÔö¼Ó½ÚÈÕµÄϲÇìÆø·Õ¡£¾Ý¿¼Ö¤£¬ÕâһϰË×ÆðÓÚËδú£¬Ê¢ÓÚÃ÷´ú¡£ÓоݿɲéµÄ×îÔçµÄ´ºÁªÊÇ¡°ÈýÑôʼ²¼£¬ËÄÐò³õ¿ª¡±£¬Ê¼¼ûÓÚĪ¸ß¿ß²Ø¾­¶´³öÍÁµÄÎÄÎïÖУ¬×«ÁªÈËΪÌÆÈËÁõÇð×Ó£¬×÷ÓÚ¿ªÔªÊ®Ò»Ä꣨¹«Ôª723Ä꣩¡£
ÎÒÃÇÕâ¸öʱ´úµÄ³ÌÐòÔ±£¬´ó¶àÖ»ÊÇ´ÖͨÎÄÄ«£¬Ã«±Ê×ÖÒ²»ù±¾²»Ôõô»áд¡£È»¶ø£¬¶ÔÓÚÃÀºÃÉú»îµÄÏòÍù£¬ÎÒÃÇÒ»µã¶¼²»±ÈÎÄÈËÄ«¿ÍÉÙ¡£½èÖúÓÚ´úÂ룬ÎÒÃÇͬÑù¿ÉÒÔд³öƯÁÁµÄ´ºÁª£¬Í¬Ñù¿ÉÒÔÏò¼ÒÈËÁÚ¾ÓÅóÓÑͬÊÂËÍÉÏÎÒÃÇ×îÕæ³ÏµÄ×£¸£ºÍ×îÃÀºÃµÄÆíÔ¸¡£
ÏÂÃ棬ÎҾ͸ø´ó¼ÒչʾһÏ£¬ÈçºÎÓÃPythonд´ºÁª£¬È«²¿´úÂë´óÔ¼70ÐС£´úÂëÖÐÓõ½µÄ×ÖÄ£¾ùÀ´Ô´ÓÚÍøÂ磬¹²¼Æ1550¸ö³£Óúº×Ö¡£ÈçÓÐÇÖȨ£¬ÎÒ»áÁ¢¼´Í£Ö¹·þÎñ²¢É¾³ý¡£
2. ´úÂëÖÐÐèÒªµ¼ÈëµÄÄ£¿é

import io
from PIL import Image
import numpy as np
import requests
3. ÏÂÔØ×ÖÄ£

def get_word(ch, quality):
    """»ñÈ¡µ¥¸öºº×Ö£¨×Ö·û£©µÄͼƬ
    ch          - µ¥¸öºº×Ö»òÓ¢ÎÄ×Öĸ£¨½öÖ§³Ö´óд£©
    quality     - µ¥×Ö·Ö±æÂÊ£¬H-640ÏñËØ£¬M-480ÏñËØ£¬L-320ÏñËØ
    """
    
    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))
4. ÏÂÔØÁú·ï³ÊÏé±³¾°µ×ͼ

def get_bg(quality):
    """»ñÈ¡´ºÁª±³¾°µÄͼƬ"""
    
    return get_word('bg', quality)
5. Éú³É´ºÁª

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)
    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, oh), '#f0f0f0')
    
    for row in range(rows):
        if HorV == 'V':
            row_im = Image.new('RGBA', (usize[quality][0], cols*usize[quality][0]), 'white')
            offset = (ow-(usize[quality][0]+10)*(row+1)-10, 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)
    out_im.show()
6. ²âÊÔÑùÀý
6.1 ÆÕÌìͬÇì »¶¶È´º½Ú

text = 'ÆÕÌìͬÇì »¶¶È´º½Ú'
write_couplets(text, HorV='V', quality='M', out_file='ÆÕÌìͬÇì.jpg')
6.2 Ä꾡Ëê³ýËêÔÂÈç¸è ¶¬È¥´ºÀ´´º¹âËÆ»­

text = 'Ä꾡Ëê³ýËêÔÂÈç¸è ¶¬È¥´ºÀ´´º¹âËÆ»­'
write_couplets(text, HorV='V', quality='M', out_file='ËêÔÂÈç¸è.jpg')
6.3 ÈËÊÀ¼ä×ÝÓаٽ¿Ç§ºì Ψ¶ÀÄãÊÇÎÒÇéÖ®ËùÖÓ

text = 'ÈËÊÀ¼ä×ÝÓаٽ¿Ç§ºì Ψ¶ÀÄãÊÇÎÒÇéÖ®ËùÖÓ'
write_couplets(text, HorV='H', quality='M', out_file='ÇéÖ®ËùÖÓ.jpg')
    ±¾ÎÄÄÚÈݲ»ÓÃÓÚÉÌҵĿµÄ£¬ÈçÉ漰֪ʶ²úȨÎÊÌ⣬ÇëȨÀûÈËÁªÏµ²©Îª·åС±à(021-64471599-8017)£¬ÎÒÃǽ«Á¢¼´´¦Àí¡£
Èí¼þ¿ª·¢ Python
µ±Ç°Ã»ÓÐÆÀÂÛµã»÷·¢±íÆÀÂÛ

Ïà¹ØÔĶÁ