품질 손실없이 pdf에서 jpg로; gscan2pdf


51

pdf 파일을 사용하여 jpg 파일을 jpg 파일로 변환 할 때

convert -quality 100 file.pdf page_%04d.jpg

눈에 띄는 품질 손실이 있습니다.

그러나 다음을 수행하면 눈에 띄는 품질 손실이 없습니다.

gscan2pdf를 시작하고 파일-> 가져 오기를 선택한 다음 file.pdf를 선택하십시오. 그런 다음 gscan2pdf의 임시 디렉토리로 이동하십시오. 많은 pnm 파일이 있습니다 (pdf 파일의 모든 페이지마다 하나씩). 지금은

  for file in *.pnm; do            
  convert $file $file.jpg done

결과 jpg 파일은 원래 pdf (원하는 것)와 거의 동일한 품질입니다.

이제 내 질문은 눈에 띄는 품질 손실없이 pdf 파일을 jpg 파일로 변환하는 간단한 명령 줄 방법이 있는지 여부입니다. (위의 솔루션은 너무 복잡하고 시간이 많이 걸립니다).


질문에서 분명하지 않은 것은 PDF에서 텍스트 및 벡터 그래픽에 대해 이야기하는지 또는 포함 된 이미지를 추출해야하는지 여부입니다.
asoundmove

답변:


92

"품질 손실"의 의미가 확실하지 않습니다. 그것은 많은 다른 것을 의미 할 수 있습니다. 설명하기 위해 샘플을 게시 할 수 있습니까? 품질이 좋지 않은 버전과 품질이 낮은 버전에서 동일한 섹션을 잘라낸 경우 (추가 품질 손실을 피하기 위해 PNG로)

아마도 -density더 높은 dpi에서 변환을 수행하는 데 사용해야 할 수도 있습니다.

convert -density 300 file.pdf page_%04d.jpg

(앞에 추가 -units PixelsPerInch하거나 -units PixelsPerCentimeter필요한 경우 내 사본의 기본값은 ppi입니다.)

업데이트 : 지적했듯이 gscan2pdf(사용 방법)은 pdfimages( poppler의 ) 래퍼 일뿐 입니다. PDF를 입력으로 제공했을 때 pdfimages와 동일한 작업을 수행하지 않습니다 convert.

convert PDF를 가져 와서 일부 해상도로 렌더링 한 다음 결과 비트 맵을 소스 이미지로 사용합니다.

pdfimagesPDF를 통해 포함 된 비트 맵 이미지를 찾아 각각을 파일로 내 보냅니다. PDF의 텍스트 또는 벡터 드로잉 명령은 무시합니다.

결과적으로 일련의 비트 맵 주위를 감싸는 PDF 파일 인 pdfimages경우 원시 데이터를 원래 크기로 가져 오기 때문에이를 추출하는 것이 훨씬 좋습니다. PDF에는 원시 JPEG 데이터가 포함될 수 있으므로이 -j옵션 을 사용하려고 할 pdfimages수도 있습니다. 기본적 pdfimages으로 모든 것을 PNM 형식으로 변환하고 JPEG> PPM> JPEG를 변환하는 과정은 손실됩니다.

그래서 시도하십시오

pdfimages -j file.pdf page

PDF를 사용하는 비트 맵 형식에 따라 convertto .jpg단계 를 사용하여이를 수행하거나 수행하지 않아도됩니다 .

일련의 JPEG 이미지로 만든 PDF에서이 명령을 시도했습니다. 추출 된 JPEG는 소스 이미지와 바이트 단위로 동일했습니다. 그보다 더 높은 품질을 얻을 수는 없습니다.


+1 나는 당신의 문장 중 하나를 잘못 읽은 snobbery에 제출하지 않았고 실제로 pdfimages를 시험해 보았습니다. 아마도 몇 달 동안 사용한 가장 유용한 프로그램입니다! 모든 사람들이 시도해 볼 것을 권합니다!
ixtmixilix

@ixtmixilix, 궁금합니다. 무엇을 잘못 읽었습니까?
CJM

꽤 멋진! 내 하루를 해결했다. 감사합니다!
Geppettvs D' Constanzo

convert큰 PDF에는 비실용적입니다. 예를 들어 700 6 메가 픽셀 페이지의 책을 처리하는 데 45GB의 메모리가 필요했습니다. 그것보다 천 배나 길었다 pdfimages.
Camille Goudeseune

다른 방법으로, 이미지를 pdf로 변환하거나 더 나은 방법으로 이미지를 pdf로 랩핑하려면 img2pdf를 사용하십시오. gitlab.mister-muffin.de/josch/img2pdf(jpg 및 jpg2000을 pdf로 랩핑).
erik

4

학생의 대답에 따르면 pdfimages좋은 선택입니다. 내 경험 gsconvert올바른 dpi를 지정하든 관계없이 품질이 좋지 않은 제품으로 내 보냅니다.

그러나 pdf에 페이지 당 여러 개의 레이어 pdfimages가있는 경우 작동하지 않고 레이어를 별도의 이미지로 추출하는 경우 inskcape페이지를 내보내는 데 사용 하는 것이 가장 좋습니다 .

이것은 내가 사용하는 명령입니다.

pdftk combined_to_do.pdf burst output pg_%04d.pdf
ls ./pg*.pdf | xargs -L1 -I {}  inkscape {} -z --export-dpi=300 --export-area-drawing --export-png={}.png

첫 번째 명령은 모든 페이지를 분할합니다. 두 번째 명령은 페이지를 png 단위로 변환합니다. png를 유지하거나 jpeg로 변환 할 수 있습니다

ls ./p*.png | xargs -L1 -I {} convert {}  -quality 100 -density 300 {}.jpg

에 비해 pdfimages, gs그리고 ImageMagick이의 convert나는 찾을 inkscape의 품질에서 최고의 보냅니다.


3

@cjm의 응답은 정확하지만 GUI를 좋아하고 모든 PDF 페이지를 렌더링하지 않으려면 이미지를 얻으려면 gimp를 사용하십시오.

김프와 함께 PDF를 열면 모든 페이지가 렌더링 된 가져 오기 창이 나타납니다. 원하는 페이지를 선택하고 해상도를 600pix / inch로 설정하십시오 (많은 경우 300이 너무 선명하게 나타납니다). "파일 / 내보내기"를 사용하여 원하는 형식으로 저장

어쨌든, 명령 행에서 원하는 페이지를 선택하는 플래그가 있어야합니다.


2

gscan2pdf 소스 코드를 보면 pdfimages를 사용하는 것으로 나타났습니다. 따라서 pdfimages file.pdf page결과는 다음과 같습니다 page-001.ppm, page-002.ppm.


pdfimages는 실제로 일을합니다
Eduard Florinescu

2

귀하의 질문에서 분명하지 않은 것은 PDF의 텍스트 및 벡터 그래픽에 대해 이야기하는지 또는 PDF에 이미지가 포함되어 있는지 여부입니다.

gscan2pdf에 대한 내용을 읽은 결과, pdf 파일에 포함 된 그래픽 만 포함되어있는 것 같습니다.

convert본질적으로 내용이 무엇이든 상관없이 PDF를 "인쇄"합니다. @cjm이 제안한 것처럼 인쇄 밀도를 변경하고 싶을 수도 있습니다. 이것이 벡터 그래픽의 품질을 높이는 유일한 방법입니다.

대신 gscan2pdf와 같이 포함 된 이미지를 추출하는 것이 좋습니다. 밀도를 추측하면 일반적으로 품질이 떨어지거나 필요한 것보다 높은 품질을 얻을 수 있습니다 (디스크 공간 낭비). 대답은 pdf를 인쇄하는 대신 이미지를 추출하는 것입니다. 품질 손실없이 이미지를 추출하기 위해 기본적으로 사용을 권장하는 이 기사참조하십시오pdfimages .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.