1. 程式人生 > >python影象庫PIL畫質粒

python影象庫PIL畫質粒

匯入模組

from PIL import Image, ImageDraw
import math

建立一個影象

#設定輔助變數
PLASMID_LENGTH = 4361
SIZE = (500, 500)
CENTER = (250, 250)
#‘RGB’表示該影象採用紅綠藍配色方案,元組size取值(500, 500)
# 在RGB中,紅色(255,0,0),綠色(0,255,0),藍色(0,0,255)
# white可以為(255,255,255)或者‘#ffffff’,黑色(0,0,0)或‘#000000’
#表示影象的x和y的尺寸為多少畫素,‘white’設定背景色為白色
pBR322 = Image.new
('RGB', SIZE, 'white') #啟用繪圖工具 DRAW = ImageDraw.Draw(pBR322)

定義三個函式

def get_angle(bp, length=PLASMID_LENGTH):
    """質粒鹼基的位置轉換為角度"""
    return bp * 360 / length


def coord(angle, center, radius):
    """
    返回圓上點座標 (x,y) 
    座標說明:
    例如point(100,100),是距左邊框100畫素,距頂部100畫素的一個點
    box(100,100,150,150),距頂部和左側邊框各100畫素的50畫素寬的一個方形框
    """
#角度轉弧度 rad = math.radians(angle) x = int(center[0] + math.cos(rad) * radius) y = int(center[1] + math.sin(rad) * radius) return x, y def draw_arrow_tip(start, direction, color): """根據起始的角度位置畫一個三角形""" p1 = coord(start + direction, CENTER, 185) p2 = coord(start, CENTER, 160
) p3 = coord(start, CENTER, 210) DRAW.polygon((p1, p2, p3), fill=color)

繪製質粒


TET_START, TET_END = get_angle(88), get_angle(1276)
AMP_START, AMP_END = get_angle(3293), get_angle(4153)
ORI_START, ORI_END = get_angle(2519), get_angle(3133)


BOX = (50, 50, 450, 450)
#畫一個灰色的圓
DRAW.pieslice(BOX, 0, 360, fill='gray')

這裡寫圖片描述

#填充一個扇形,TET_START為起始角度, TET_END終止角度,0度角在時鐘的3:00位置
DRAW.pieslice(BOX, TET_START, TET_END, fill='blue')

這裡寫圖片描述

DRAW.pieslice(BOX, AMP_START, AMP_END, fill='orange')
DRAW.pieslice(BOX, ORI_START, ORI_END, fill='darkmagenta')

這裡寫圖片描述

#繪製一個白色圓
DRAW.pieslice((80, 80, 420, 420), 0, 360, fill='white')

這裡寫圖片描述

#新增箭頭
draw_arrow_tip(TET_END, 10, 'blue')
draw_arrow_tip(AMP_START, -10, 'orange')
draw_arrow_tip(ORI_START, -10, 'darkmagenta')

這裡寫圖片描述

新增文字
arial16 = ImageFont.truetype('arial.ttf',16)
DRAW.text((150, 130), "ori", fill=(0, 0, 0),font=arial16)
DRAW.text((340, 130), "amp", fill=(0, 0, 0),font=arial16)
DRAW.text((300, 380), "tet", fill=(0, 0, 0),font=arial16)

這裡寫圖片描述

儲存影象

#pBR322.save('plasmid_pBR322.png')
#pBR322.save('plasmid_pBR322.jpg')
pBR322.save('plasmid_pBR322.tif')