나는 bmp 파일을 가지고 있습니다. 그것은 단지 붉은 광장입니다. 흰색 줄무늬를 만들기 위해 함수가있는 프로그램을 작성해야합니다. 내가해야 할 일 :파이썬에서 .bmp 파일로 작업하기 3
- bmp 파일을로드하십시오.
- bmp 파일을 읽고 평가하십시오.
- 코드 흰색으로 채색 할 파일의 특정 영역 좌표입니다.
- 출력 난 초보자 오전
의 파일
나는 bmp 파일을 가지고 있습니다. 그것은 단지 붉은 광장입니다. 흰색 줄무늬를 만들기 위해 함수가있는 프로그램을 작성해야합니다. 내가해야 할 일 :파이썬에서 .bmp 파일로 작업하기 3
의 파일
쉬운 방법은 PIL/Pillow과 같은 타사 이미지 처리 라이브러리를 사용하는 것입니다. 코드는 Image
모듈 문서의 예에서 몇 분 만에 알아낼 수있을만큼 간단합니다 ...
하지만 그렇게 할 수없는 경우 수동으로 수행하는 방법을 살펴 보겠습니다.
먼저 BMP는 텍스트 파일 형식이 아니며 이진 형식입니다. 즉, 바이너리 모드로 읽어야합니다. 그리고 읽을 텍스트 줄이 없기 때문에 "줄 단위로"읽을 수 없습니다. bytes
개체는 변경할 수 없기 때문에 bytearray
에 복사하여 작업 할 수 있습니다. 따라서 :
with open('spam.bmp', 'rb') as f:
data = bytearray(f.read())
다음으로 BMP 파일 형식을 구문 분석해야합니다. 연습의 요점은 직접 수행하는 방법을 알아내는 것이라고 가정하므로 Wikipedia's article에 대한 링크를 제공합니다.은 Microsoft 문서보다 더 잘 설명하며 거기에서 이동할 수 있습니다.
표준 라이브러리에있는 struct
모듈은 헤더 해석에 매우 유용합니다. data[offset]
, data[offset+1]
등을 읽고 32 비트 숫자로 다시 조합하는 것보다 struct.unpack_from('<L', data, offset)
인 32 비트 리틀 엔디안 번호를 읽는 것이 훨씬 쉽습니다.
BMP 압축에 대한 모든 옵션을 무시할 수 있습니다. 그렇지 않으면 할당이 너무 어려워 질 것입니다. 실제로 모든 헤더가 가장 일반적인 변형을 지정하고이를위한 코드 만 가정한다고 가정 할 수 있습니다. 그러나 선생님에게 그 의견에 대해 물어볼 수도 있습니다.
이제 BMP의 "픽셀 배열"부분을 찾았 으면 DIB 머리글에서 해석하는 방법을 알아 냈으므로 원하는 위치로 설정하여 픽셀을 흰색으로 설정할 수 있습니다 bytearray의 해당 색인에있는 값.당신이 흰색에 빨간색 픽셀을 변경 한 후에는 그것을 저장할 수 있습니다,
pos = pixel_array_offset + row_size * y + pixel_size * x
data[pos:pos+3] = 255, 255, 255
마지막 :
with open('eggs.bmp', 'wb') as f:
f.write(data)
감사합니다. 이것은 나를 많이 도왔다. bmp 파일을 처리하는 방법을 잘 모르겠습니다. 바이너리 파일 형식에 대해 좀 더 살펴볼 것입니다. – amin
는 당신이 해야하는 예를 들어, 한 간단 판명 할 수있다 PIL/Pillow와 같은 써드 파티 모듈을 사용하지 않고서도? – abarnert
은 분명히 그렇지 않습니다. 기본 코딩 만 사용합니다. 이것은 첫 해에 cp 과정을 따르는 것입니다. 가져 오기 이미지를 사용하려고했지만 허용되지 않습니다. – amin
[this] (http://www.python.org.br/wiki/ImagemTGA) Python 프로그램을 시작하십시오 –