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 이미지 처리 라 이브 러 리 를 실현 하여 체스 판 을 그 리 는 것 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 파 이 썬 체스 판 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많은 응원 바 랍 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Python의 None과 NULL의 차이점 상세 정보그래서 대상 = 속성 + 방법 (사실 방법도 하나의 속성, 데이터 속성과 구별되는 호출 가능한 속성 같은 속성과 방법을 가진 대상을 클래스, 즉 Classl로 분류할 수 있다.클래스는 하나의 청사진과 같아서 하나의 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.