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*.pdf1.jpg 2.png 3.png 4.jpg
*.jpg의를로 변환하고 *.png2 단계에서 귀하의 답변과 동등한 성능을 수행합니다.
더 빠르지 만 특이한 구문 :
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를 필요에 맞게 미세 조정하기 위해 사진 크기, 페이지 크기 등을 설정하는 많은 옵션도 포함됩니다.
img2pdfUbuntu 16.04 일반 리포지토리에서 사용할 수 있으며 수동 리포지토리를 사용할 필요가 없으며 pip업데이트의 이점을 유지합니다.
위의 제안을 최대한 단순하고 효율적이며 강력한 명령 줄로 결합하는 방법은 다음과 같습니다.
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입니다. 간결하면서도 다양한 표현력이 있습니다.
convert직접 할 수 있습니다 . 이것은 ImageMagicks 사이트 하단의 커맨드 라인 처리 에 관한 것 입니다.
convert *.jpg +adjoin page-%d.pdf
convert *.jpg -adjoin output.pdfpdf 파일
비슷한 것을 위해 다음 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