문제

PDF를 PNG 이미지(적어도 표지 이미지)로 변환하려고 합니다.pdftk를 사용하여 PDF의 첫 번째 페이지를 성공적으로 추출하고 있습니다.변환을 수행하기 위해 imagemagick을 사용하고 있습니다.

convert cover.pdf cover.png

이것은 작동하지만 불행하게도 Cover.png가 잘못 렌더링됩니다(PDF의 일부 알파 개체가 제대로 렌더링되지 않음).ImageMagick이 GhostScript를 사용하여 변환을 수행한다는 것을 알고 있으며 gs로 직접 수행하면 원하는 결과를 얻을 수 있지만 활용하고 싶은 다른 도구가 있으므로 변환 라이브러리를 사용하는 것이 좋습니다.

GhostScript의 이 명령은 원하는 이미지를 생성합니다.

gs -sDEVICE=pngalpha -sOutputFile=cover.png -r144 cover.pdf

GhostScript로 변환을 통해 인수를 전달할 수 있는 방법이 있는지 궁금합니다. 아니면 GhostScript를 직접 호출해야 합니까?

도움이 되었습니까?

해결책

두 개의 명령으로 하나의 명령 선을 사용할 수 있습니다 (gs, convert) 파이프를 통해 연결, 첫 번째 명령이 출력을 stdout에 쓸 수 있고 두 번째 명령이 stdin에서 입력을 읽을 수있는 경우.

  1. 운 좋게도 GS는 Stdout에 쓸 수 있습니다 (... -o %stdout ...).
  2. 운 좋게도 Convert는 Stdin에서 읽을 수 있습니다 (convert -background transparent - output.png).

문제 해결됨:

  • 특별한 이미지를 처리하는 알파 채널에 사용되는 GS
  • 투명한 배경을 만드는 데 사용되는 변환
  • 파이프는 디스크에 온도 파일을 쓰지 않도록 사용됩니다.

완전한 해결책 :

gs -sDEVICE=pngalpha       \
   -o %stdout              \
   -r144 cover.pdf         \
   |                       \
convert                    \
   -background transparent \
   -                       \
    cover.png

업데이트

PDF 페이지 당 별도의 PNG를 사용하려면 %d 통사론:

gs -sDEVICE=pngalpha -o file-%03d.png -r144 cover.pdf

이렇게하면 PNG 파일이 이름을 지정합니다 page-000.png, page-001.png, ... ( %d-Counting은 0 기반입니다. file-000.png PDF의 1 페이지에 해당합니다. 001 2 페이지로 ...

또는 투명한 배경을 유지하려면 100 페이지 PDF를 위해

for i in {1..100}; do        \
                             \
  gs -sDEVICE=pngalpha       \
     -dFirstPage="${i}"      \
     -dLastPage="${i}"       \
     -o %stdout              \
     -r144 input.pdf         \
     |                       \
  convert                    \
     -background transparent \
     -                       \
      page-${i}.png ;        \
                             \
done

다른 팁

사용 가능한 모든 대안 중에서 PDF를 PNG로 변환 할 때 가장 정확한 결과를 얻을 수있는 Inkscape를 발견했습니다. 특히 소스 파일에 투명한 계층이있을 때, Imagemagick 및 기타 도구가 실패한 곳에서 Inkscape가 성공했습니다.

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

inkscape "$pdf" -z --export-dpi=600 --export-area-drawing --export-png="$pngfile"

그리고 여기에서는 스크립트로 구현됩니다.

#!/bin/bash

while [ $# -gt 0 ]; do

pdf=$1
echo "Converting "$pdf" ..."
pngfile=`echo "$pdf" | sed 's/\.\w*$/.png/'`
inkscape "$pdf" -z --export-dpi=600 --export-area-drawing --export-png="$pngfile"
echo "Converted to "$pngfile""
shift

done

echo "All jobs done. Exiting."

PDF를 이미지 파일로 변환하려면 다음 명령을 사용합니다.

PNG 용 gs -sDEVICE=png16m -dTextAlphaBits=4 -r300 -o a.png a.pdf

JPG 용 gs -sDEVICE=jpeg -dTextAlphaBits=4 -r300 -o a.jpg a.pdf

여러 페이지가있는 경우 이름을 추가하십시오 %03d gs -o a%03d.jpg a.pdf

각 옵션의 의미 :

  • sdevice = {jpeg, pngalpha, png16m ...} -filetype
  • -o- 출력 파일 (stdout to stdout)
  • -dtextalphabits = 4- 글꼴 antialiasing.
  • -R300-300 DPI

하나는 포함 된 명령 줄 유틸리티를 사용할 수 있습니다. poppler-utils 패키지:

sudo apt-get install poppler-utils
pdftoppm --help
pdftocairo --help

예시:

pdftocairo -png mypage.pdf mypage.png

일에 대한 대답을받을 수 없었습니다. 그런 다음 Ghostscript가 기본적으로 PNG를 지원할뿐만 아니라 심지어 여러 다른 "인코딩":

  • png256
  • png16
  • pnggray
  • pngmono
  • ...

나를 위해 작동하는 쉘 명령은 다음과 같습니다.

gs -dNOPAUSE -q -sDEVICE=pnggray -r500 -dBATCH -dFirstPage=2 -dLastPage=2 -sOutputFile=test.png test.pdf

Test.pdf의 2 페이지를 Test.png로 저장합니다. pnggray 인코딩 및 500 DPI.

여기에 있습니다 독일 토론 사용하여 해결되는 SVG 파일에 대한 이와 같은 문제에 대해

convert -background transparent

아마도 이것은 당신에게도 효과가 있습니다.

나는 내 솔루션을 추가하고, 그의 실이 오래되었다고 생각하겠습니다. 어쨌든 이것은 누군가를 도울 것입니다.

먼저 PDF를 생성해야합니다. 나는 사용한다 xelatex 그에 대한:

xelatex test.tex

지금, Imagemagick 그리고 그래픽 마법 왼쪽에서 오른쪽으로 두 개의 구문 분석 매개 변수를 두 가지 매개 변수가 먼저 실행됩니다. 최적의 처리를 위해이 시퀀스를 사용하게되었습니다.

gm convert -trim -transparent white -background transparent -density 1200x1200 -resize 25% test.pdf test.png

투명한 배경에 멋진 그래픽을 제공하며 실제로 페이지에있는 것까지 트림됩니다. 그만큼 -density 그리고 -resize 매개 변수, 세분화가 향상되고 전반적인 해상도를 증가시킵니다.

밀도가 감소 할 수 있는지 확인하는 것이 좋습니다. 변환 시간이 줄어 듭니다.

PDF의 경우 Imagemagick이 부정확 한 색상을주고 있었다. 나는 GraphicsMagick이 더 나은 일을했다는 것을 알았다.

$ gm convert -quality 100 -thumbnail x300 -flatten journal.pdf\[0\] cover.jpg

내 솔루션은 훨씬 간단하고 직접적입니다. 적어도 내 PC에서 그런 식으로 작동합니다 (다음 사양과 함께).

me@home: my.folder$ uname -a
Linux home 3.2.0-54-generic-pae #82-Ubuntu SMP Tue Sep 10 20:29:22 UTC 2013 i686 i686 i386 GNU/Linux

~와 함께

me@home: my.folder$ convert --version
Version: ImageMagick 6.6.9-7 2012-08-17 Q16 http://www.imagemagick.org
Copyright: Copyright (C) 1999-2011 ImageMagick Studio LLC
Features: OpenMP

그래서 여기 내가 내에서 달리는 것이 있습니다 file.pdf:

me@home: my.folder$ convert -density 300 -quality 100 file.pdf file.png

이 페이지에는 언급 할 대체 도구도 나열되어 있으므로 언급합니다 XPDF Linux/Windows/Mac 용으로 컴파일 된 명령 줄 도구가 있습니다. 투명성을 지원합니다. 상업용 용도로 무료입니다. 정말 터무니 없습니다 가격.

거대한 PDF 파일의 테스트에서 고스트 스크립트보다 7.5% 빠릅니다.

(또한 텍스트 및 HTML 변환기에 대한 PDF가 있습니다)

단일 페이지를 추출하십시오.

$ page = 4

gs -sDEVICE=pngalpha -dFirstPage="$page" -dLastPage="$page" -o thumb.png -r144 input.pdf

다른 도구를 사용하여 PDF의 첫 번째 페이지를 분리하지 않고도 ImageMagick을 사용할 수 있습니다.그냥 해

convert -density 288 cover.pdf[0] -resize 25% cover.png


여기서는 공칭 밀도를 400%(72*4=288) 늘린 다음 크기를 1/4(25%)만큼 조정합니다.이렇게 하면 결과 png의 품질이 훨씬 좋아집니다.

그러나 PDF가 CMYK인 경우 PNG는 이를 지원하지 않습니다.특히 투명도가 있는 경우에는 sRGB로 변환해야 합니다. Ghostscript는 알파가 포함된 CMYK를 처리할 수 없기 때문입니다.

convert -density 288 -colorspace sRGB -resize 25% cover.pdf[0] cover.png
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top