2016-08-12 1 views
1

파일 font_file.bdf가 있고 각 요소가 하나의 픽셀 인 numpy 배열로 포함 된 문자를 가져와야합니다.BDF 파일의 문자 배열 Nully 배열

다음은 '?'을 정의하는 해당 파일의 스 니펫입니다. 문자 :

STARTCHAR question 
ENCODING 63 
SWIDTH 1000 0 
DWIDTH 6 0 
BBX 5 7 0 0 
BITMAP 
70 
88 
08 
10 
20 
00 
20 
ENDCHAR 

데이터를 인코딩하는 방법을 이해하기 위해 .bdf 파일을 조사했습니다. 기본적으로 bit-depth가 1 인 비트 맵입니다. bdf 파일을 해석 할 수있는 필 모듈 PIL.BdfFontFile을 발견했습니다. 저장된 이미지는 다음과 같습니다

from PIL.BdfFontFile import BdfFontFile 

fp = open("font_file.bdf", "r") 
bdf_file = BdfFontFile(fp) 
bdf_file.compile() 
char = '?' 
_, __, bounding_box, image = bdf_file[ord(char)] 
image.save(char + ".png") 

: 나는 글꼴에서 문자의 각각에 대해 PIL 이미지를 얻을 그렇게처럼 작동하고 있는지를 저장할 수있는 동안이 모듈 A 실험 후 : Question Mark. 그 속성을 살펴봄으로써 의미가있는 비트 심도 1을가집니다. (이 거꾸로 보인다 이유를 잘 모르겠어요,하지만 여전히 필요한 경우 내가 NumPy와 함께 조작의 종류를 할 수 있습니다.)

나는 내가 NumPy와 배열로 변환하려고한다는 한 후 :

print numpy.array(image, dtype=numpy.int) 
나에게 더 이상 해당 문자를 나타내는 것으로 보인다 배열을 준

더 이상 :

좀 더이처럼 보였다 뭔가를 기대했다
[[1 1 1 1 1] 
[0 1 0 1 1] 
[1 1 1 1 1] 
[1 1 1 1 0] 
[1 0 1 0 1] 
[1 0 1 1 1] 
[0 1 1 1 1]] 

:

[[0 1 1 1 0] 
[1 0 0 0 1] 
[0 0 0 0 1] 
[0 0 0 1 0] 
[0 0 1 0 0] 
[0 0 0 0 0] 
[0 0 1 0 0]] 

최악의 경우, 필자는 PIL 이미지의 데이터를 numpy 배열로 변환하는 알고리즘을 직접 만들 수 있지만 PIL 이미지와 numpy 배열 간의 변환에 대한 내 과거 경험에 비해 쉬운 방법이 있어야한다고 생각합니다. (대개는 아주 간단합니다.)

PIP 이미지를 제대로 배열로 변환하거나 내 문제에 대한 다른 해결책을 얻는 방법에 대한 아이디어는 감사하겠습니다.

+0

그것 numpy 배열에? – Anonymous

+0

@jphollowed, 물음표처럼 보입니다 (문자의 픽셀이 흰색으로 표시되고 배경이 검정색 임에도 불구하고). 매우 작은 이미지이므로 볼 수 없지만 이미지가 첨부되어 있습니다. –

+0

아니요 여행 변수'image'는 인쇄물이 – Anonymous

답변

0

예기치 않은 동작은이 SO 질문에 설명 된 PIL의 버그 때문인 것으로 나타났습니다. Error Converting PIL B&W images to Numpy Arrays.

그래서 문제를 해결하기위한 핵심은 numpy 배열을 만들기 전에 이미지를 회색조로 변환하는 것이 었습니다. 다음과 같이

는 설명 형식으로 작은 NumPy와 변환을하고 나의 최종 솔루션이었다 : 나에게이 준

fp = open("font_file.bdf", "r") 
bdf_file = BdfFontFile(fp) 
bdf_file.compile() 
char = '?' 
_, __, bounding_box, image = bdf_file[ord(char)] 
print numpy.array(image.convert('L'))/255 

:`당신이 변환 시도하기 전에 같이 image` 무엇

[[0 1 1 1 0] 
[1 0 0 0 1] 
[0 0 0 0 1] 
[0 0 0 1 0] 
[0 0 1 0 0] 
[0 0 0 0 0] 
[0 0 1 0 0]]