웹 사이트에서 pdf 파일의 미리보기 이미지를 제공하도록 sorl-thumbnail django 앱을 설정하려고합니다. Windows Server 2008 R2에서 Appache web 섬기는 사람.graphicsmagick backend가 포함 된 sorl-thumbnail Windows7에서 pdf/image 변환 오류가 발생했습니다.
jpeg 이미지의 축소판 생성을 위해 PIL 백엔드에서 사용할 수있는 sorl 축소판 기능이 있습니다. 정상적으로 작동합니다.
PIL은 pdf 파일을 읽을 수 없으므로 graphicsmagick 백엔드로 전환하고 싶었습니다. graphicsmagick/ghostscript 조합을 설치하고 테스트했습니다. 명령 줄에서
gm convert foo.pdf -resize 400x400 bar.jpg
예상되는 jpg 축소판을 생성합니다. 또한 jpg 썸네일 생성을 위해 jpg에서 작동합니다.
그러나 sorl-thumbnail에서 호출하면 ghostscript가 충돌합니다. 장고 파이썬 쉘 (파이썬 manage.py 쉘) 나는 (FF)를 FieldFile 인스턴스에 통과 sorl docs과 설명 낮은 수준의 명령을 사용에서 는 foo.pdf를 가리키는 다음과 같은 오류 얻을 :
In [8]: im = get_thumbnail(ff, '400x400', quality=95)
**** Warning: stream operator isn't terminated by valid EOL.
**** Warning: stream Length incorrect.
**** Warning: An error occurred while reading an XREF table.
**** The file has been damaged. This may have been caused
**** by a problem while converting or transfering the file.
**** Ghostscript will attempt to recover the data.
**** Error: Trailer is not found.
GPL Ghostscript 9.07: Unrecoverable error, exit code 1
을 ff가 명령 줄에서 gm convert를 사용할 때 잘 변환되는 동일한 파일을 가리키고 있음에 유의하십시오.
나는 ImageFieldFile 인스턴스 (IFF)를 통과하고 다음과 같은 오류 얻을도 시도했다 :의 기본 PIL 백엔드를 사용하는 sorl 설정을 다시 변경
In [5]: im = get_thumbnail(iff, '400x400', quality=95)
identify.exe: Corrupt JPEG data: 1 extraneous bytes before marker 0xdb `c:\users\thin\appdata\local\temp\tmpxs7m5p' @ warning/jpeg.c/JPEGWarningHandler/348.
identify.exe: Corrupt JPEG data: 1 extraneous bytes before marker 0xc4 `c:\users\thin\appdata\local\temp\tmpxs7m5p' @ warning/jpeg.c/JPEGWarningHandler/348.
identify.exe: Corrupt JPEG data: 1 extraneous bytes before marker 0xda `c:\users\thin\appdata\local\temp\tmpxs7m5p' @ warning/jpeg.c/JPEGWarningHandler/348.
Invalid Parameter - -auto-orient
및 JPG 변환에 JPG에 대한 명령을 반복 썸네일 이미지는 오류/경고없이 생성되고 캐시를 통해 사용할 수 있습니다.
sorl이 소스 파일을 gm에 전달하기 전에 임시 파일로 복사하고있는 것으로 보이며이 복사 작업에서 문제가 발생했다고 보입니다.
난의 소스에서 복사 작업으로 믿는 것을 발견했습니다 sorl_thumbnail-11.12-py2.7.egg \ sorl \ 썸네일 \ 엔진 \ convert_engine.py 라인 47-55 :
class Engine(EngineBase):
...
def get_image(self, source):
"""
Returns the backend image objects from a ImageFile instance
"""
handle, tmp = mkstemp()
with open(tmp, 'w') as fp:
fp.write(source.read())
os.close(handle)
return {'source': tmp, 'options': SortedDict(), 'size': None}
여기에 문제가있을 수 있습니까? 나는 그것을 보지 못합니다!
이 문제를 극복하는 방법에 대한 제안은 크게 감사하겠습니다. memcached와 ghostscript 9.07에서 django 1.4, sorl-thumbnail 11.12를 사용하고 있습니다.