2009-11-14 1 views
1

PIL이 마음에 들지 않는 64 비트 Python 인스턴스에 문제가 있습니다. 필자는 (ImageMagick과 같은) 나를 위해 픽셀을 읽을 수있는 컴파일 된 이미지 편집기를 얻으려면 더 많은 방법을 소진하기 전에 아마도 컴파일 된 상대방과 비슷한 속도의 Python 솔루션을 생각해 볼 수 있습니다.PNG 픽셀의 알파를 읽는 중입니다. 순수한 파이썬을 통한 빠른 방법?

컴파일 된 친구가 항상 더 빨라질 것이라는 것을 알고 있지만, "단지"픽셀 그룹의 알파를 읽고 싶다면 이 빠르면 순수 파이썬 솔루션이 가능합니다. 상상해보십시오. 누구나 밝은 아이디어가 있습니까?

비록 내가 PyPNG를 시도했지만 이라는 숫자가 너무 느리다. 너무 느려서 어떤 마법 솔루션도 기대하지 않는다. 더 적은 것, 나는 물어야했다.

답장 보내 주셔서 감사합니다.

참고로, 내가 읽는 이미지는 평균 512 * 512에서 2048 * 2048까지이며, 픽셀 1에서 모든 픽셀까지 알 수 있습니다 (몇 백만 시간은 저장되지만 값을 저장할 수 있으므로 두 번 읽는 것이 완료되지 않습니다.

답변

2

PNG에서 데이터를 가져 오려면 압축을 풀고 압축을 풀어야합니다. 이것들은 당신의 어플리케이션을위한 파이썬에서 너무 느릴 수 있습니다. 한 가지 가능성은 PyPNG로 시작하여 필요없는 것을 제거하는 것입니다. 예를 들어, PNG에서 읽은 모든 데이터를 저장하고 있으며 느린 속도 중 일부는 메모리 할당으로 인한 것일 수 있습니다.

+0

네, 그게 내가 생각한 것입니다. 어둠 속에서 찌르다가 어쨌든 물어 봐야했습니다 :) 코멘트 주셔서 감사합니다! –

0

PyPNG가 너무 느리다 고 할 때, 얼마나 느린가요? 다른 말로하면, 얼마나 빨리 빠를 수 있을까요? PyPNG는 그 자체를 느리게 만들기 위해 어리석은 행동을하지는 않지만 파이썬으로 작성되었습니다.

행별로 이미지를 읽으려면 read()를 사용하고 [3 :: 4] 행을 사용하여 알파 채널을 추출해야합니다. 슬라이스 표기법을 사용하여 알파 채널을 추출하는 것은 전체 이미지를 읽는 것보다 느리지는 않습니다.

일부는 notes to the PyPNG documentation about its speed입니다.

+0

특히 : 압축 해제는 zlib 모듈을 사용합니다.이 모듈은 C로되어 있으며 빠릅니다. PyPNG는 전체 이미지를 메모리에 저장하지 않는 한 전체 이미지를 메모리에 저장하지 않습니다. 일반적으로 이미지는 행 스트림별로 이미지를 처리합니다. –

+1

필자는 이것을 사용해 왔지만 생각해 보았습니다. 결국 PIL이 임베디드 상황에서 어떻게 작동하는지 알아 냈습니다. 최종 결과는 PIL이 사용자 정의 컴파일 된 모듈을 사용하더라도 여전히 약간의 문제였습니다. 느린. 그것 자체가 느려지는 것이 아니라, 무엇을하는지 등등. 최종 사용자가 보는 것의 맥락에서 단순히 느려지는 것이지 "현실적으로"가능한 것이 아닙니다. 그래서, "PIL조차도 5 배 더 빨라진다면 좋을 것입니다"*라는 문맥에서, PyPNG는 경쟁 할 수 없습니다. 다시 말해, 나는 그 맥락에서 PyPNG를 비교할 것을 기대하지 않는다. 나는 단지 "충분히 빠르다"가 무엇인지 설명하고있다. :) –