JPEG에서 PDF 형식으로 여러 이미지 파일 변환


50

jpeg에서 pdf로 일부 파일을 변환하고 싶습니다. 다음 명령을 사용하고 있습니다.

$ convert image1.jpg image1.pdf 

하지만 100 개의 이미지가 있습니다. 모든 파일을 해당 PDF로 변환하려면 어떻게해야합니까?

나는 시도했다

$ convert image*.jpg image*.pdf 

작동하지 않습니다.


답변:


62

bash에서 :

for f in *.jpg; do
  convert ./"$f" ./"${f%.jpg}.pdf"
done

1
"./"를 변환 인수 앞에 추가하는 특별한 이유는 무엇입니까? 일반적인 모범 사례입니까?
rahmu

4
@rahmu : 예, 파일 이름으로 시작 -하면 문제가 발생 하기 때문에 좋은 습관 입니다.
enzotib 2012 년

3
이것은 작동하지만 mogrify타이핑이 훨씬 적습니다. 내 대답을 참조하십시오.
CJM

+1 기술적으로 정확하고 bash 함정을 피하기 때문에 +1하지만 mogrify는 이미지를 일괄 변환하는 Imagemagick 방법이므로 -1입니다. 그래서 나에게서 투표하지 않습니다.
Benoit 2012 년

@ aculich : 당신의 downvote에 대해 감사하지만 잘못된 고려를했습니다. 왜 for 루프가 "인수가 너무 길다"오류를 일으키지 않는지보십시오. .
enzotib 2012 년

56

mogrify이 명령을 사용할 수 있습니다 . 일반적으로 파일을 제자리에서 수정하지만 형식을 변환 할 때 새 파일을 작성합니다 (새 형식과 일치하도록 확장명 만 변경). 그러므로:

mogrify -format pdf -- *.jpg

(enzotib 년대처럼 ./*.jpg--방지가에서 이상한 파일 이름은 스위치로 해석된다. 대부분의 명령 인식 --"이 시점에서 옵션을 찾고 중지"를 의미 할 수 있습니다.)


+1, 내 대답은 bash에 대해서만 있었고 ImageMagick을 잘 모릅니다.
enzotib 2012 년

mogrify대신 사용하는 것이 좋습니다 convert. 이것은 100 개의 파일에서 작동하지만 globbing을 사용 *.jpg하면 수천 개의 파일로 확장되지 않습니다. 간단한 one-linerfind 에서 명령을와 결합하여 수행 할 수 있습니다 .
aculich

파일 과 파일을 모두 단일 로 변환하는 방법은 무엇입니까? 파일 번호가 매겨진 파일 (예 :) 이며 그 순서는 pdf 출력에서 ​​유지 / 보존되어야합니다. *.jpg*.png*.pdf1.jpg 2.png 3.png 4.jpg
natty에 대해 nutty

해결 방법으로 : 1 단계에서 모든 *.jpg의를로 변환하고 *.png2 단계에서 귀하의 답변과 동등한 성능을 수행합니다.
nutty about natty


24

더 빠르지 만 특이한 구문 :

parallel convert '{} {.}.pdf' ::: *.jpg

https://www.gnu.org/software/parallel/을 사용하여 병렬로 실행합니다 . convert아직 멀티 스레딩을 보지 못했지만 효과적인 병렬 처리가 제한됩니다. 이것이 우려되는 경우 멀티 스레딩이 발생하지 않도록하는 방법은 아래 주석을 참조하십시오.


1
이 방법은 승리로 가득합니다. 그것은 핵심 수를 자동으로 평가하고 많은 작업을 실행합니다!
meawoppl

1
이 방법이 가장 빠릅니다.
shivams

1
병렬은 힘, imagemagick과 결합 된 병렬은 초강력입니다. 나는 초능력을 좋아한다.
CousinCocaine

2
여기 파티에 약간 늦었지만 ImageMagick의 새로운 (이 답변이 작성되지 않았을 수도 있음) 버전은 멀티 스레드이며 병렬로 실행하면 심하게 상호 작용합니다. parallel환경 변수를 설정하여 ( GNU와 같은 응용 프로그램 수준 병렬화를 사용하는 경우) 비활성화 할 수 있습니다 MAGICK_THREAD_LIMIT=1.
zebediah49

이를 위해 ImageMagick을 사용하면 생성이 손실되고 성능이 저하됩니다. 이 페이지의 다른 곳에서 img2pdf는 이러한 문제를 피합니다.
Robert Fleming

16

https://gitlab.mister-muffin.de/josch/img2pdf

ImageMagick과 관련된 모든 제안 된 솔루션에서 JPEG 데이터는 완전히 디코딩되고 다시 인코딩됩니다. 이로 인해 발전 손실 및 성능은 "수백"배보다 나 빠진다 img2pdf.

pip img2pdf종속성 (예 : apt-get install python python-pil python-setuptools libjpeg-dev또는 yum install python python-pillow python-setuptools) 이 있는 경우 설치할 수 있습니다 .


3
맞습니다. 왕복이와 같은 명령으로 JPEG 파일을 변경하는지 테스트 할 수 있습니다 convert some.jpg -format pdf -compress jpeg generated.pdf ; pdfimages -j generated.pdf generated.pdf ; diff -sq some.jpg generated.pdf-000.jpg. IMHO이 답변은 더 많은 공증을받을 가치가 있습니다. 실제로, convert여기 에 실패하고, img2pdf그러한 테스트를 통과하고, 생성 된 PDF를 필요에 맞게 미세 조정하기 위해 사진 크기, 페이지 크기 등을 설정하는 많은 옵션도 포함됩니다.
Stéphane Gourichon

3
img2pdfUbuntu 16.04 일반 리포지토리에서 사용할 수 있으며 수동 리포지토리를 사용할 필요가 없으며 pip업데이트의 이점을 유지합니다.
Stéphane Gourichon

1
질문을 받았을 때 (응답을 받았을 때) img2pdf가 존재하지 않았습니다. 그러나 오늘날 img2pdf는 분명히 더 나은 대답입니다.
kmkaplan

13

위의 제안을 최대한 단순하고 효율적이며 강력한 명령 줄로 결합하는 방법은 다음과 같습니다.

find /path/to/files -iname '*.jpg' -exec mogrify -format pdf {} +

-공백으로 시작 하거나 공백을 포함 하는 파일 이름으로 잘 작동 합니다. 의 사용에주의 -iname대소 문자를 구별하지 버전 -name이 켜져 작동 그래서 .JPG단지뿐만 아니라 .jpg.

이것은 일부 시스템에서 '인수 목록이 너무 깁니다'라는 오류가 발생할 수 find있는 *.jpg와일드 카드 로 쉘을 가져 오는 대신 파일 목록을 가져 오는 데 사용 됩니다 . @enzotib이 주석에서 지적한 것처럼 for 루프에서 globbing 을 사용하는 동작은 명령의 인수와 다릅니다 .

또한 find하위 디렉토리를 처리하지만 **/*jpgzsh 의 재귀 적 globbing 구문 과 같은 쉘 특정 기능을 사용하지 않는 한 쉘 globbing은 수행하지 않습니다 .

편집 : 나는 명령을 다시 실행하고 첫 번째 실행 이후 변경된 파일 만 변환 find하는 것에 대한 @IlmariKaronen 의 의견을 읽은 후에 생각한 다른 유용한 기능을 추가 할 것이라고 생각했습니다 .

첫 번째 패스 touch에서는 변환이 완료된 후 타임 스탬프 파일 을 사용할 수 있습니다 .

find /path/to/files -iname '*.jpg' -exec mogrify -format pdf {} +; touch timestamp

그런 다음 표현식에 추가 -newer timestamp하여 find마지막으로 수정 한 시간이 타임 스탬프 파일보다 새로운 파일의 하위 집합에서 작동합니다. 각 실행 후에 타임 스탬프 파일을 계속 업데이트하십시오.

find /path/to/files -iname '*.jpg' -newer timestamp -exec mogrify -format pdf {} +; touch timestamp

이것은 Makefile에 의지하지 않아도되는 쉬운 방법이며 (이미 사용하지 않는 한) 가능한 한 언제라도 사용할 가치가있는 또 다른 이유 find입니다. 간결하면서도 다양한 표현력이 있습니다.


이를 위해 ImageMagick을 사용하면 생성이 손실되고 성능이 저하됩니다. 이 페이지의 다른 곳에서 img2pdf는 이러한 문제를 피합니다.
Robert Fleming

8

convert직접 할 수 있습니다 . 이것은 ImageMagicks 사이트 하단의 커맨드 라인 처리 에 관한 것 입니다.

convert *.jpg +adjoin page-%d.pdf

4
또는 convert *.jpg -adjoin output.pdfpdf 파일
ninjagecko

2
이를 위해 ImageMagick을 사용하면 생성이 손실되고 성능이 저하됩니다. 이 페이지의 다른 곳에서 img2pdf는 이러한 문제를 피합니다.
Robert Fleming

7

비슷한 것을 위해 다음 makefile을 사용했습니다.

SVG = $(wildcard origs/*.svg)
PNG = $(patsubst origs/%.svg,%.png,$(SVG))

all: $(PNG)

%.png: origs/%.svg
    convert -resize "64x" $< $@


clean: 
    rm $(PNG)

이제 그냥 실행할 수 make있고 주위에있는 모든 svg 파일에 대해 png 파일을 얻습니다.

편집하다

요청한대로 :

  • 와일드 카드는 origs /의 모든 svgs 목록을 생성합니다
  • pathsubst는이 목록을 가져 와서 png 파일 이름 목록을 생성합니다 (다른 폴더 및 확장자. 예 : origs/foo.svg됩니다 foo.png)
  • 규칙 1 : all: $(PNG)대상 "모두"가 모든 PNG에 종속됨을 정의
  • 규칙 2 : %.png: origs/%.svg$ X.png 파일은 origs / $ X.svg에 의존하며를 호출하여 생성 할 수 있습니다 convert ... $< $@.
    • $< 의존성과
    • $@ 대상 이름입니다
  • 규칙 3은 정리를위한 것입니다

2
일회성 작업의 경우 Makefile을 만드는 것은 아마도 너무 많은 일이지만, 일부 PDF를 변경하려는 경우 make다시 입력 하면 변경된 PDF 다시 변환합니다 .
Ilmari Karonen

와일드 카드, origs, patsubst가 무엇인지, $와 %가 어떻게 해석되고 $ <$ @인지 설명 하시겠습니까? 나머지는 이해하기 쉽습니다. :)
사용자가 알 수 없음

에 의존하는 것은 make지나치게 복잡해 때 조금 보인다 간단한 한 줄이 트릭을 할 것입니다.
aculich

@IlmariKaronen 나는 Makefile이 과도하다는 것에 동의하지만 후속 실행에서 수정 된 파일의 하위 집합 만 다시 변환하는 것이 좋습니다. 나는 그렇게 할 수 있는 방법으로 내 대답 을 업데이트 find했으므로 Makefile에 의지 할 필요가 없습니다.
aculich

0

작은 스크립트가 트릭을 수행합니다. (Solaris 10에서 ksh88로 테스트)

script.ksh

#!/bin/ksh

[[ $# != 1 ]] && exit 255 # test for nr of args

pdfname=$(sed -e 's/\(.*\)\.jpg/\1\.pdf/' <(echo $"1")) #replace *.jpg with *.pdf
convert "$1" $pdfname

그런 다음 find스크립트를 실행 하기 위해 실행할 수 있습니다 .

find dir -name image\*.jpg -exec /bin/ksh script.ksh {} \;

모두 참고 script.ksh하고 find내가 준 명령, OS와 사용중인 쉘에 depeding 다른 구문이있을 수 있습니다.


pdfname=${1%.*}.pdf파일의 확장자를로 바꿉니다 pdf. 이 방법은 파일 이름에 특수 문자가 포함되어 있어도 훨씬 간단하고 작동합니다. 관련 참고 사항에서 변수 대체에 큰 따옴표를 추가하십시오.
Gilles 'SO- 악한 중지'

간단한 단일 명령 줄을 사용 하여 별도의 스크립트를 작성할 필요가 없습니다 .
aculich

0

MacOS 유틸리티SIPS   MacOS (Sierra)에서 Apple의 내장 명령 줄 유틸리티 sips는 모든 Apple의 래스터 이미지 유틸리티에 대한 포괄적 인 액세스를 제공합니다. 이것으로의 변환이 포함 jpg됩니다 pdf.

예를 들어, 기존의 저해상도 / 작은 크기의 jpg이미지 'cat.jpg'(크기 8401 바이트)에서 다음 명령 줄은 'cat.pdf'래스터 해상도를 변경하지 않고 파일 크기를 최소로 확장 하여을 만듭니다 .

$ sips -s format pdf cat.jpg --out 'cat.pdf' 1>/dev/null 2>&1
$ ls -l cat.*
-rw-r--r--@ 1 <user redacted> <group redacted>  8401 Jun 18 07:06 cat.jpg
-rw-r--r--+ 1 <user redacted> <group redacted> 10193 Jun 18 07:22 cat.pdf

Adobe의 PSD래스터 이미지 형식으로 변환   유사한 sips관용구가 Adobe 호환 *.psd파일을 만듭니다.

$ sips -s format psd cat.jpg --out 'cat.psd' 1>/dev/null 2>&1
$ ls -l cat.jpg cat.psd
-rw-r--r--@ 1 Administration  staff    8401 Jun 18 07:06 cat.jpg
-rw-r--r--+ 1 Administration  staff  350252 Jun 18 07:37 cat.psd

그러나 Adope psd래스터 형식 사용에 따른 30 배 파일 크기 확장에 유의하십시오 .

책 제작   여러 형식으로 제공되는 수백 개의 이미지가 포함 된 대규모 책 제작을 수행 할 때 편리한 명령 줄 관용구는 ImageMagick유틸리티를 사용하여 png형식으로 순수한 래스터 이미지 파일을 만들었습니다 (모든 메타 데이터 및 컬러 프로파일 스트립 아웃)을 누른 후 sips컬러 프로파일 및 / 또는 코멘트 균일 세트를 복원 및 사용 sips(최종 출력 파일을 생성하는 것이 가장 일반적으로 *.png, *.psd*.pdf) 파일.


0

불행히도 convert이미지를 변경하여 jpg사용해야 하는 원본의 품질 손실을 최소화하십시오 img2pdf.이 명령을 사용합니다.

1) 이렇게 하면 해상도 나 품질의 손실없이 pdf모든 jpg이미지 에서 파일 을 만들 수 있습니다.

ls -1 ./*jpg | xargs -L1 -I {} img2pdf {} -o {}.pdf

2) pdf페이지를 하나로 연결합니다 .

pdftk *.pdf cat output combined.pdf

3) 마지막으로 검색 가능한 PDF 파일의 스캔 품질을 변경하지 않는 OCR 텍스트 레이어를 추가합니다.

pypdfocr combined.pdf  

0

변환 및 병렬 처리를 위해 imagemagick을 사용하여 변환 프로세스를 가속화했습니다.

ls *.JPEG |parallel convert -density 200 -resize 496X646 -quality 100 {}  ../{.}.PDF

0

여러 파일을 변환하는 가장 간단한 방법 중 하나는 Linux 터미널의 파일 디렉토리로 이동하여 다음을 입력하는 것입니다.

$ convert *.png mypdf.pdf

-1

이미지 파일 만 사용하는 경우 Comic Book Archive (.cbr, .cbz, .cbt, .cba, .cb7) 를 사용하려는 것보다

  • 7Z를 사용하는 경우 파일 확장자 (접미사)의 이름을 .cb7로 바꾸십시오.
  • ACE를 사용하는 경우 파일 확장자 (접미사)의 이름을 .cba로 바꿉니다.
  • RAR을 사용하는 경우 파일 확장자 (접미사)의 이름을 .cbr로 바꾸십시오.
  • TAR을 사용하는 경우 파일 확장자 (접미사)의 이름을 .cbt로 바꾸십시오.
  • ZIP을 사용하는 경우 파일 확장자 (접미사)의 이름을 .cbz로 바꾸십시오.

이것은 PDF보다 훨씬 유연합니다.

Under Linux you can use software like Comix, Evince, Okular and QComicBook.

https://secure.wikimedia.org/wikipedia/en/wiki/Comic_book_archive


1
OP의 질문과 관련이 없기 때문에 하향 투표했습니다.
toogley
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.