it-swarm.dev

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

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 파일로 변환하는 간단한 명령 줄 방법이 있는지 여부입니다. (위의 솔루션은 너무 복잡하고 시간이 많이 걸립니다).

56
student

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

더 높은 dpi로 변환하려면 -density를 사용해야합니다.

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

(필요한 경우 -units PixelsPerInch 또는 -units PixelsPerCentimeter를 앞에 추가 할 수 있습니다. 내 사본의 기본값은 ppi입니다.)

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

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

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

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

그래서 시도하십시오

pdfimages -j file.pdf page

convert에서 .jpg 단계 (PDF가 사용하고있는 비트 맵 형식에 따라 다름)로이를 수행하거나 수행하지 않아도됩니다.

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

101
cjm

학생의 대답에 따르면 pdfimages은 좋은 옵션입니다. 내 경험에 따르면 올바른 dpi를 지정했는지에 관계없이 gsconvert은 모두 낮은 품질로 내보내집니다.

그러나 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의 수출 품질이 최고입니다.

4

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

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

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

3
albfan

Gscan2pdf 소스 코드를 보면 pdfimages를 사용하는 것으로 나타났습니다. 그래서 pdfimages file.pdf pagepage-001.ppm, page-002.ppm 등.

2
student

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

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

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

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

2
asoundmove