jpeg에서 pdf로 일부 파일을 변환하고 싶습니다. 다음 명령을 사용하고 있습니다.
$ convert image1.jpg image1.pdf
하지만 100 개의 이미지가 있습니다. 모든 파일을 해당 PDF로 변환하려면 어떻게해야합니까?
나는 시도했다
$ convert image*.jpg image*.pdf
작동하지 않습니다.
jpeg에서 pdf로 일부 파일을 변환하고 싶습니다. 다음 명령을 사용하고 있습니다.
$ convert image1.jpg image1.pdf
하지만 100 개의 이미지가 있습니다. 모든 파일을 해당 PDF로 변환하려면 어떻게해야합니까?
나는 시도했다
$ convert image*.jpg image*.pdf
작동하지 않습니다.
답변:
bash에서 :
for f in *.jpg; do
convert ./"$f" ./"${f%.jpg}.pdf"
done
-
하면 문제가 발생 하기 때문에 좋은 습관 입니다.
mogrify
타이핑이 훨씬 적습니다. 내 대답을 참조하십시오.
mogrify
이 명령을 사용할 수 있습니다 . 일반적으로 파일을 제자리에서 수정하지만 형식을 변환 할 때 새 파일을 작성합니다 (새 형식과 일치하도록 확장명 만 변경). 그러므로:
mogrify -format pdf -- *.jpg
(enzotib 년대처럼 ./*.jpg
의 --
방지가에서 이상한 파일 이름은 스위치로 해석된다. 대부분의 명령 인식 --
"이 시점에서 옵션을 찾고 중지"를 의미 할 수 있습니다.)
mogrify
대신 사용하는 것이 좋습니다 convert
. 이것은 100 개의 파일에서 작동하지만 globbing을 사용 *.jpg
하면 수천 개의 파일로 확장되지 않습니다. 간단한 one-linerfind
에서 명령을와 결합하여 수행 할 수 있습니다 .
*.jpg
*.png
*.pdf
1.jpg 2.png 3.png 4.jpg
*.jpg
의를로 변환하고 *.png
2 단계에서 귀하의 답변과 동등한 성능을 수행합니다.
더 빠르지 만 특이한 구문 :
parallel convert '{} {.}.pdf' ::: *.jpg
https://www.gnu.org/software/parallel/을 사용하여 병렬로 실행합니다 . convert
아직 멀티 스레딩을 보지 못했지만 효과적인 병렬 처리가 제한됩니다. 이것이 우려되는 경우 멀티 스레딩이 발생하지 않도록하는 방법은 아래 주석을 참조하십시오.
parallel
환경 변수를 설정하여 ( GNU와 같은 응용 프로그램 수준 병렬화를 사용하는 경우) 비활성화 할 수 있습니다 MAGICK_THREAD_LIMIT=1
.
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
) 이 있는 경우 설치할 수 있습니다 .
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를 필요에 맞게 미세 조정하기 위해 사진 크기, 페이지 크기 등을 설정하는 많은 옵션도 포함됩니다.
img2pdf
Ubuntu 16.04 일반 리포지토리에서 사용할 수 있으며 수동 리포지토리를 사용할 필요가 없으며 pip
업데이트의 이점을 유지합니다.
위의 제안을 최대한 단순하고 효율적이며 강력한 명령 줄로 결합하는 방법은 다음과 같습니다.
find /path/to/files -iname '*.jpg' -exec mogrify -format pdf {} +
-
공백으로 시작 하거나 공백을 포함 하는 파일 이름으로 잘 작동 합니다. 의 사용에주의 -iname
인 대소 문자를 구별하지 버전 -name
이 켜져 작동 그래서 .JPG
단지뿐만 아니라 .jpg
.
이것은 일부 시스템에서 '인수 목록이 너무 깁니다'라는 오류가 발생할 수 find
있는 *.jpg
와일드 카드 로 쉘을 가져 오는 대신 파일 목록을 가져 오는 데 사용 됩니다 . @enzotib이 주석에서 지적한 것처럼 for 루프에서 globbing 을 사용하는 동작은 명령의 인수와 다릅니다 .
또한 find
하위 디렉토리를 처리하지만 **/*jpg
zsh 의 재귀 적 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
입니다. 간결하면서도 다양한 표현력이 있습니다.
convert
직접 할 수 있습니다 . 이것은 ImageMagicks 사이트 하단의 커맨드 라인 처리 에 관한 것 입니다.
convert *.jpg +adjoin page-%d.pdf
convert *.jpg -adjoin output.pdf
pdf 파일
비슷한 것을 위해 다음 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/foo.svg
됩니다 foo.png
)all: $(PNG)
대상 "모두"가 모든 PNG에 종속됨을 정의%.png: origs/%.svg
$ X.png 파일은 origs / $ X.svg에 의존하며를 호출하여 생성 할 수 있습니다 convert ... $< $@
.
$<
의존성과 $@
대상 이름입니다make
다시 입력 하면 변경된 PDF 만 다시 변환합니다 .
작은 스크립트가 트릭을 수행합니다. (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
. 이 방법은 파일 이름에 특수 문자가 포함되어 있어도 훨씬 간단하고 작동합니다. 관련 참고 사항에서 변수 대체에 큰 따옴표를 추가하십시오.
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
) 파일.
불행히도 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
변환 및 병렬 처리를 위해 imagemagick을 사용하여 변환 프로세스를 가속화했습니다.
ls *.JPEG |parallel convert -density 200 -resize 496X646 -quality 100 {} ../{.}.PDF
이미지 파일 만 사용하는 경우 Comic Book Archive (.cbr, .cbz, .cbt, .cba, .cb7) 를 사용하려는 것보다
이것은 PDF보다 훨씬 유연합니다.
Under Linux you can use software like Comix, Evince, Okular and QComicBook.
https://secure.wikimedia.org/wikipedia/en/wiki/Comic_book_archive