2012-10-12 4 views

답변

2

두 번째 질문부터 시작하겠습니다. 기본적으로 팔레트가있는 BMP 파일을로드 할 때 PIL은 해당 팔레트가 값이 모두 같지 않은 적어도 하나의 rgb 트리플을 포함하는지 확인합니다. 모든 트리플이 같으면 그레이 스케일 이미지로 간주되고 팔레트는 생성되지 않으므로 im.palette은 항상이 상황에서 비어 있습니다.

첫 번째 질문의 경우 "이유"를 알고 싶지 않지만 문제를 해결하는 방법은 궁금 할 것입니다. 그렇지 않으면 읽기 전용 이미지를 얻는 단순한 이유는 PIL의 내부 세부 사항 때문입니다. 그레이 스케일 bmp는 메모리 매핑되어 있으며 PIL은 읽기 전용 모드 만 지원합니다 (Windows 문제를 처리하기 위해 독점적으로 수행되는 것처럼 보임). 문제에 대한 "수정"은 간단하지만 완전히 좋지는 않습니다. 이미지를 일부 모드로 변환하면 더 이상 읽기 전용이 아닙니다. 'L'(귀하의 경우 현재 모드)으로 변환 할 수도 있습니다.

필자는 PIL로 이미지를 처리해야 할 때 일반적으로 특정 모드에서 이미지를 처리해야하므로 항상 img.convert(X)을 입력해야합니다. 여기서 X은 내가 원하는 모드입니다.

+0

본인이 처음 여기에 등장했을 때이 문제를 확인했습니다. 직접 믿을 수 없었습니다. 실행 가능한 해결 방법을 마련하는 것을 축하드립니다. –

+0

@MarkRansom 결국 (이 질문과 관련없는) niceness에게 감사드립니다. – mmgp

0

나는 ValueError: image is readonly과 8 비트 그레이 스케일 bmp에서 같은 문제가있다. 픽셀 맵에서 직접 조작하는 것보다 느리지 만 image.putpixel((x, y), value)을 통해 단일 픽셀 값을 변경할 수 있습니다.

관련 문제