2013-11-29 3 views
6

나는 bmp 파일을 가지고 있습니다. 그것은 단지 붉은 광장입니다. 흰색 줄무늬를 만들기 위해 함수가있는 프로그램을 작성해야합니다. 내가해야 할 일 :파이썬에서 .bmp 파일로 작업하기 3

  • bmp 파일을로드하십시오.
  • bmp 파일을 읽고 평가하십시오.
  • 코드 흰색으로 채색 할 파일의 특정 영역 좌표입니다.
  • 출력 난 초보자 오전

의 파일

  • 디스플레이를 최종 제품 파일을 닫고 읽는 데 문제가 또는 원래 BMP 파일을 표시하고, 내부 만 편집 내용을 보자. 그것은 txt 파일과 "readline()"을 여는 것과 비슷하지 않습니다. 또한, 내가 복사 할 때 PyDV 프로젝트 py 폴더에있는 이클립스에서 src 폴더에 붙여 넣기, 그것은 일식에 표시되지 않습니다, 그래서 컴퓨터가 파일을 인식하는 방법을 모르겠어요. 나는 여기에 글을 올리기 전에 그것에 대해 읽고 싶다. 그러나 내가 검색해야 할 것이 확실하지 않기 때문에 나는 많은 검색 결과를 얻는 것 같지 않다.

  • +1

    는 당신이 해야하는 예를 들어, 한 간단 판명 할 수있다 PIL/Pillow와 같은 써드 파티 모듈을 사용하지 않고서도? – abarnert

    +0

    은 분명히 그렇지 않습니다. 기본 코딩 만 사용합니다. 이것은 첫 해에 cp 과정을 따르는 것입니다. 가져 오기 이미지를 사용하려고했지만 허용되지 않습니다. – amin

    +1

    [this] (http://www.python.org.br/wiki/ImagemTGA) Python 프로그램을 시작하십시오 –

    답변

    16

    쉬운 방법은 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) 
    
    +0

    감사합니다. 이것은 나를 많이 도왔다. bmp 파일을 처리하는 방법을 잘 모르겠습니다. 바이너리 파일 형식에 대해 좀 더 살펴볼 것입니다. – amin

    관련 문제