Python PIL 이미지 처리 라 이브 러 리 구현 체스 판 그리 기

6401 단어 Python체스 판
웹 페이지 에서"python 체스 판 그리 기"를 검색 하 였 으 며,색인 결 과 는 모두 turtle 라 이브 러 리 를 호출 하여 바둑판 결 과 를 그립 니 다.python PIL 이미지 처리 라 이브 러 리 를 사용 하여 체스 판 을 그 리 는 공백 을 채 우기 위해 이 글 을 공유 합 니 다.
1 PIL 체스 판 프로 세 스 그리 기
1.1 사고방식
STEP 1:빈 그림 과 그림 대상 만 들 기
STEP 2:격자 그리 기
STEP 3:색상 채 우기
1.2 블록 분석
STEP 1:빈 그림 과 그림 대상 만 들 기

imageTemp = Image.new("RGB", size, bgcolor)
draw = ImageDraw.Draw(imageTemp)     #    imageTemp     
STEP 2:격자 그리 기
격자 그리 기 관건 은 Python PIL ImageDraw.Draw.line()방법 을 사용 하 는 것 입 니 다.
구체 적 으로 말 하면 본 고 는 평균 가로 직선 과 평균 세로 직선 을 각각 그 리 는 방법 을 채택 한다.
다음 예 는 평균 세로 직선 그리 기:

for i in range(7):
    for j in range(7):
        i = i + 1
        j = j + 1
        everage_line = size[0] / 8
        everage_line = everage_line * j
        start = (everage_line, 0)
        end = (everage_line, size[1])
        draw.line([start, end], fill=(0, 0, 0), width=3)
주:for 순환 으로 열 을 옮 겨 다 니 기
       i,j 가 분모 에 있 기 때문에 0 으로 가능 한 오 류 를 피하 기 때문에+1
       두 세로 선 사이 의 거 리 를 계산 하 다.
       start 시작 값 은"왼쪽","위"두 값 이 고 end 종료 값 은"오른쪽","아래"두 값 입 니 다.
       세로 줄 7 개 를 반복 해서 그립 니 다.
       선 색상 및 선 너비 등 을 설정 합 니 다.

STEP 3:색상 채 우기
주의해 야 할 것 은 채 워 진 색 은 인접 한 두 개의 색 이 일치 하지 않도록 해 야 한 다 는 것 이다.
색상 을 채 우 는 관건 은 Python PIL ImageDraw.Draw.rectangle()방법 을 사용 하 는 것 입 니 다.
구체 적 인 방법 은 첫 번 째,두 번 째 줄 을 채 우 고 이미지 복사 붙 여 넣 기 를 생 성 하 는 것 이다.
첫 번 째,두 번 째 줄 의 칸 을 채 울 때 사각형 의 시작 점 과 끝 점 수 치 를 채 워 서 인접 한 두 개의 색상 이 일치 하지 않도록 해 야 합 니 다.
다음 예 는 첫 번 째 줄 의 칸 채 우기(간격 채 우기)입 니 다. 

draw.rectangle((0, 0, 50, 50), fill = (0, 0, 0))
draw.rectangle((100, 0, 150, 50), fill = (0, 0, 0))
draw.rectangle((200, 0, 250, 50), fill = (0, 0, 0))
draw.rectangle((300, 0, 350, 50), fill = (0, 0, 0))
앞의 두 줄 의 칸 을 채 우 고 복사 붙 여 넣 기 부분 에 들 어 갑 니 다.
세 번 째,네 번 째 줄 에 대해 서 는 첫 번 째,두 번 째 줄 의 그림 을 직접 붙 여 넣 으 면 됩 니 다.

region = imageTemp.crop((0,0,400,100))
imageTemp.paste(region, (0, 100))
다섯 번 째 줄 에서 여덟 번 째 줄 까지 복사 붙 여 넣 기 를 진행 합 니 다.이번 에는 네 번 째 줄 의 그림 결 과 를 복사 합 니 다.

region = imageTemp.crop((0,0,400,200))
imageTemp.paste(region, (0, 200))
2 전체 코드
2.1 방법 1

# coding=utf-8
from PIL import Image, ImageDraw
 
#     、  
size = (400, 400)
bgcolor = (255, 255, 255)
 
#            
imageTemp = Image.new("RGB", size, bgcolor)
draw = ImageDraw.Draw(imageTemp)
 
#        
for i in range(7):
    for j in range(7):
        i = i + 1
        j = j + 1
        everage_line = size[0] / 8
        everage_line = everage_line * j
        start = (everage_line, 0)
        end = (everage_line, size[1])
        draw.line([start, end], fill=(0, 0, 0), width=3)
 
#        
for i in range(7):
    for j in range(7):
        i = i + 1
        j = j + 1
        everage_line = size[0] / 8
        everage_line = everage_line * i
        start = (0, everage_line)
        end = (size[0], everage_line)
        draw.line([start, end], fill=(0, 0, 0), width=3)
 
#       
#        
draw.rectangle((0, 0, 50, 50), fill = (0, 0, 0))
draw.rectangle((100, 0, 150, 50), fill = (0, 0, 0))
draw.rectangle((200, 0, 250, 50), fill = (0, 0, 0))
draw.rectangle((300, 0, 350, 50), fill = (0, 0, 0))
#        
draw.rectangle((50, 50, 100, 100), fill = (0, 0, 0))
draw.rectangle((150, 50, 200, 100), fill = (0, 0, 0))
draw.rectangle((250, 50, 300, 100), fill = (0, 0, 0))
draw.rectangle((350, 50, 400, 100), fill = (0, 0, 0))
 
#     
#          
region = imageTemp.crop((0,0,400,100))
imageTemp.paste(region, (0, 100))
#          
region = imageTemp.crop((0,0,400,200))
imageTemp.paste(region, (0, 200))
 
#   
imageTemp.show()
2.2 방법 2

from PIL import Image, ImageDraw
 
imageTemp = Image.new('RGB', (400, 400), 0)
draw = ImageDraw.Draw(imageTemp)
h,w = imageTemp.size
 
for x in range(7):
    for y in range(7):
        x = x + 1
        y = y + 1
        x_zuobiao = w/8
        x_zuobiao = x_zuobiao*x
        start = (x_zuobiao, 0)
        end = (x_zuobiao, h)
        draw.line([start, end], fill=(256, 256, 256), width=3)
 
for x in range(7):
    for y in range(7):
        x = x + 1
        y = y + 1
        y_zuobiao = h/8
        y_zuobiao = y_zuobiao * y
        start = (0, y_zuobiao)
        end = (w, y_zuobiao)
        draw.line([start, end], fill=(256, 256, 256), width=3)
 
x = 0
y = 0
z = 50
t = 50
for i in range(4):
    for i in range(2):
        for j in range(4):
            if(y<450):
                draw.rectangle((x, y, z, t), fill=(255, 255, 255))
                x = x + 100
                z = z + 100
        for i in range(4):
            x = x - 100
            z = z - 100
        x = x + 50
        y = y + 50
        z = z + 50
        t = t + 50
    x = x - 100
    z = z - 100
 
imageTemp.show()
2.3 방법 3(간소화 판)

from PIL import Image, ImageDraw
 
imageTemp=Image.new('RGB',(400,400),0)
draw = ImageDraw.Draw(imageTemp)
h,w = imageTemp.size
 
x=0; y=0;z=50;t=50
for a in range(4):
    for i in range(2):
        for j in range(4):
            if(y<450):
                draw.rectangle((x, y, z, t), fill = (255, 255, 255))
                x=x+100
                z=z+100
        x = 0;z = 50;x=x+50;y=y+50;z=z+50;t=t+50
    x=0;z=50
 
imageTemp.show()
3 결과 전시

파 이 썬 이 PIL 이미지 처리 라 이브 러 리 를 실현 하여 체스 판 을 그 리 는 것 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 파 이 썬 체스 판 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많은 응원 바 랍 니 다!

좋은 웹페이지 즐겨찾기