2010-12-27 7 views
3

Django의 PIL (Python Image Library)에 심각한 문제가있어 많은 문제를 겪었으며 문제의 근본 원인을 파악하지 못했습니다.Django ImageField와 JPEG의

문제는 기본적으로 장고 관리자의 ImageField를 통해 JPEG 이미지를 업로드 할 수 없다는 것입니다. 그러나 문제는 libjpeg를 설치하는 것만 큼 간단하지 않습니다.

먼저 PIL (Buildout을 통해)을 설치하고 JPEG 지원을 사용할 수 없기 때문에 libjpeg를 설치하지 않았다는 것을 알게되었습니다.

서버를 직접 설치하지 않았기 때문에 설치되지 않았으며 소스에서 libjpeg 8을 컴파일했습니다. 이것은 내 /usr/local/lib/ 디렉토리에서 끝났습니다. Buildout 파일을 지우고 모든 것을 다시 빌드했습니다. 이번에 PIL이 컴파일되었을 때 나는 JPEG를 지원했다. 하지만 장고 관리자에게 가서 ImageField를 통해 JPEG를 업로드하려고했습니다. "유효한 이미지 업로드. 업로드 한 파일이 이미지 또는 손상된 이미지가 아닙니다."오류가 발생했습니다. 그냥 테스트로 나는 a를 Djano 셸을 열고 다음 실행 :

> import Image 
> i = Image.open("/absolute_path/file.jpg") 
> print i 
<JpegImagePlugin.JpegImageFile image mode=RGB size=940x375 at 0x7F908C529BD8> 

이 오류없이 실행 PIL은 JPEG의를 열 수 있음을 보여줍니다.

약간의 독서를 수행 한 후,이 스레드를 건너 : PHP는 libjpeg을 사용하고 장고 전에로드, 및 그 로딩하기 전에 6.2 libjpeg처럼 Is it possible to control which libraries apache uses?

보인다. 나는 6.2 libjpeg 사용되어야한다

COMMAND PID  USER FD TYPE DEVICE SIZE/OFF NODE NAME 
apache2 2561 www-data mem REG 202,1 146032 639276 /usr/lib/libjpeg.so.62.0.0 

그래서 내 생각은 다음과 같습니다 lsof를 사용할 때 쇼입니다. 그래서 내 /usr/local/lib 디렉토리에있는 libjpeg를 제거했습니다. PIL 설치 지침을 다시 읽은 후에, 나는 PIL이 필요로하는 libjpeg에 대한 dev/header 파일이 없을 수도 있다는 것을 깨달았습니다. 그래서 나는 또한 aptitude uninstaller ( sudo aptitude remove libjpeg62)를 사용하여 libjpeg를 제거했다. 그런 다음 PIL이 필요한 헤더 파일을 확보하기 위해 aptitude를 사용하여 libjpeg를 설치했습니다. ( sudo aptget install libjpeg62-dev).

여기에서 필자는 Buildout 디렉터리를 제거하고 Buildout을 다시 빌드하여 PIL을 다시 설치했습니다. 다시 한번, 저는 JPEG 지원을 받았고, 지금 libjpeg62를 사용하고 있습니다.

그래서 장고 관리자에서 테스트 해 보겠습니다. 아직 JPEG 지원이 없습니다. 그래서 일반적으로 JPEG 지원을 테스트하고 예외가 처리되지 않았는지, 어떤 종류의 오류가 발생하는지 확인하려고했습니다.

import Image 
i = Image.open("/absolute_path/file.jpg") 
v = i.verify() 

가 그럼 난 난 그냥 쉽게 출력을 볼 수있는 HTML보기로 통과 : 그래서 내 홈페이지보기에 내가 JPEG 이미지를 열려면 다음 코드를 추가했다. 이러한 변경 내용을 서버에 배포하고 다시 시작합니다. 정말 혼란 스러워요이 시점에서 그래서

{{ i }} - <JpegImagePlugin.JpegImageFile image mode=RGB size=940x375 at 0x7F908C529BD8> 
{{ v }} - None 

:

  1. 왜 내가 성공적으로있는 동안 관리자가 없습니다은 JPEG를 열 수 있습니다 나는 다음과 같은 출력을 오류를보고 얻을하지 놀란다?
  2. 내가 누락 된 부분이 있습니까? libjpeg에서 문제가되지 않습니까?
  3. libjpeg에 문제가 없는데 왜 문제없이 PNG를 업로드 할 수 있습니까?

도움이 될만한 점은 2 일 동안 디버깅을 해본 결과입니다.

설정 : 1. 랙 스페이스 클라우드 서버 2. 우분투 10.04 3. 장고 1.2.3 4. PIL 1.1.7 5. 6.2 libjpeg (적성을 통해 설치 (Buildout하지만 설치) (Buildout하지만 설치) 내가 진정한 문제가되고 결국 무엇을 모르겠습니다. 게시 후 나는이 5 분 해결할 것이라고

답변

5

이동 그림 (는 sudo는 aptget libjpeg62-DEV를 설치),하지만 나는 그것을 해결하는 방법입니다.

aptitude로 libjpeg를 설치 한 후 P 설치를 조사했습니다. Buildout보다는 Aptitude를 가진 일리노이. 내가하고 결국 무엇

했다 :
sudo apt-get install libjpeg62-dev 
sudo apt-get install python-imaging 

는 그럼 난 내 Buildout, 다시 지어 내 프로젝트에서 PIL을 제거하고 일했다. 이제 PIL과 libjpeg가 Aptitude를 통해 설치되었으므로 PIL이 libjpeg를 찾는 데 문제가있는 것으로 보입니다.

관련 문제