[server] Linux에서 빠른 pdf에서 jpg 로의 변환이 필요했습니다.

현재 ImageMagick을 사용하여 PDF를 JPEG 래스터 이미지로 변환하고 있습니다. 고통스럽고 느리고 많은 메모리를 사용합니다.

내가 사용한 명령은 다음과 같습니다.

convert -geometry 1024x768 -density 200 -colorspace RGB foo.pdf bar%02d.jpg

Ghostscript를 사용하기 때문에 속도가 느리다고 생각합니다.
그러나 Linux 박스에서 더 빠른 방법이 있어야합니다.

더 나은 해결책을 찾은 사람이 있습니까?



답변

convertGhostscript를 간접적으로 호출 하는 ImageMagick의 명령 대신 Ghostscript를 직접 사용 하는 것이 실제로 더 빠릅니다. 또한 전환 매개 변수를보다 강력하게 제어 할 수 있습니다. 시험

gs \
   -sDEVICE=jpeg   \
   -o bar_%03d.jpg \
   -dJPEGQ=95      \
   -r600x600       \
   -g4960x7016     \
   foo.pdf

어디

  • -o: 출력 경로 + 파일명을 결정한다 (그리고 사용량을 절약 -dBATCH -dNOPAUSE)
  • -dJPEGQ: JPEG 품질을 95 %로 설정
  • -r: 해상도를 600dpi로 설정
  • -g: 이미지 크기를 4960x7016px로 설정
  • -sDEVICE: 출력을 JPEG로 설정

이 명령은 여전히 ​​느리게 진행되어 예상보다 큰 파일을 생성합니다. 더 작은 파일 크기와 더 빠른 실행을 위해 이것을 시도하십시오 (아마도 convert명령 줄의 출력 품질에 가깝습니다 ).

gs \
   -sDEVICE=jpeg   \
   -o bar_%03d_200dpi_q80.jpg \
   -dJPEGQ=80      \
   -r200x200       \
   -g1653x2339     \
   foo.pdf

또는

gs \
   -sDEVICE=jpeg   \
   -o bar_%03d_default_a4.jpg \
   -sPAPERSIZE=a4 \
   foo.pdf

(72dpi 해상도를 제공하며 대부분의 화면과 대부분의 웹 응용 프로그램에 적합합니다.)


답변

BTW, ImageMagick이 너무 느린 이유 중 하나는 Ghostscript를 두 번 호출하기 때문입니다. PDF => PNG를 한 번에 변환하지 않지만 두 가지 단계를 사용합니다.

  • 먼저 Ghostscript를 사용하여 PDF => PostScript변환합니다.
  • 그런 다음 고스트 스크립트를 사용하여 PostScript => PNG변환합니다.

다음을 입력하여 ImageMagick의 “대리인”(Ghostscript와 같은 외부 프로그램 인 ImageMagick)에 대한 자세한 설정을 배울 수 있습니다.

convert -list delegate

(내 시스템에는 32 개의 다른 명령 목록이 있습니다.) 이제 PNG로 변환하는 데 사용되는 명령을 보려면 다음을 사용하십시오.

convert -list delegate | grep -i png

좋아, 이것은 리눅스를위한 것이었다. Windows를 사용하는 경우 다음을 시도하십시오.

convert -list delegate | findstr /i png

IM은 PS 또는 EPS 입력에서만 PNG를 생성합니다. 그렇다면 IM은 어떻게 PDF에서 (E) PS를 얻습니까? 쉬운:

convert -list delegate | findstr /i PDF
convert -list delegate | grep -i PDF

아! 그것은 Ghostscript를 사용하여 PDF => PS 변환을 한 다음 Ghostscript를 다시 사용하여 PS => PNG 변환을 만듭니다. 작동하지만 Ghostscript가 한 번에 PDF => PNG를 수행 할 수 있다는 것을 알고 있다면 가장 효율적인 방법은 아닙니다 . 그리고 더 빠릅니다. 그리고 훨씬 더 나은 품질로.

IM이 Ghostscript 대리자를 통한 이미지로의 PDF 변환을 처리하는 것에 대해 먼저 두 가지를 알아야합니다.

  1. 기본적으로 추가 매개 변수를 제공하지 않으면 Ghostscript는 72dpi 해상도의 이미지를 출력합니다. 가끔 여기 사람들이 추가하시기 바랍니다의 그 -density 600A와 convert고스트 스크립트는 이미지 출력을위한 600 dpi의 해상도를 사용하도록 지시 매개 변수입니다.
  2. 메신저의 우회는 먼저 고스트 스크립트를 두 번 호출하여 먼저 변환 PDF => PS한 다음 PS => PNG실수입니다. 당신이 있기 때문에 결코 승리하지 않고 첫 번째 단계에서 harldy 킵 품질,하지만 매우 자주 약간 느슨한. 원인:
    • PDF는 투명 필름을 처리 할 수 ​​있으며 PostScript에서는 불가능합니다.
    • PDF는 트루 타입 글꼴을 포함 할 수 있으며 PostScript에서는 할 수 없습니다. 등 pp.
      (반대 방향으로의 변환은 PS => PDF그렇게 중요하지 않습니다 ….)

그래서 Ghostscript를 사용하여 PDF를 한 번에 PNG (또는 JPEG)로 변환하는 것이 좋습니다. 그리고 Ghostscript의 최신 버전 8.71 (곧 출시 : 9.00)을 사용하십시오 …


답변

pdftoppmpoppler 패키지 의 프로그램 은 JPEG를 만들 수 gs있으며 위의 경우보다 두 배 빠릅니다 .

pdftoppm -jpeg -r 300 foo.pdf foo.jpg


답변

내 경험상 MuPDF 는 Ghostscript보다 훨씬 빠릅니다. gs에 많은 균열이없는 훨씬 새로운 프로젝트입니다. 사용 사례에 적합한 지 확인해보십시오!

mudraw -w 1024 -h 768 -r 200 -c rgb -o bar%d.png foo.pdf

이전 Linux 배포판이 있고 저장소에서 mupdf-tools를 설치 한 경우 mudraw여전히 호출 될 수 있습니다.pdfdraw

그런 다음 예를 들어 imagemagick을 사용하여 png를 jpeg로 변환해야합니다. 그러나 여전히 Ghostscript보다 빠릅니다.


답변