Bazı dosyaları jpeg'den pdf'ye dönüştürmek istiyorum. Aşağıdaki komutu kullanıyorum.
$ convert image1.jpg image1.pdf
Ama 100 resmim var. Hepsini nasıl pdfs'e dönüştürmeliyim?
denedim
$ convert image*.jpg image*.pdf
Çalışmıyor.
Bazı dosyaları jpeg'den pdf'ye dönüştürmek istiyorum. Aşağıdaki komutu kullanıyorum.
$ convert image1.jpg image1.pdf
Ama 100 resmim var. Hepsini nasıl pdfs'e dönüştürmeliyim?
denedim
$ convert image*.jpg image*.pdf
Çalışmıyor.
Yanıtlar:
Bash:
for f in *.jpg; do
convert ./"$f" ./"${f%.jpg}.pdf"
done
-
, aksi takdirde.
mogrify
daha az yazıyor. Cevabımı gör.
Bunun için mogrify
komutu kullanabilirsiniz . Normalde dosyaları yerinde değiştirir, ancak formatları dönüştürürken yeni bir dosya yazar (sadece uzantıyı yeni formata uyacak şekilde değiştirerek). Böylece:
mogrify -format pdf -- *.jpg
(Enzotib'ler gibi ./*.jpg
, --
garip dosya adlarının anahtar olarak yorumlanmasını önler. Çoğu komut --
"bu noktada seçenek aramayı durdur" anlamına gelir.)
mogrify
yerine convert
. Bu 100 dosya için işe yarar, ancak globbing kullanmak *.jpg
binlerce dosyaya ölçeklenmez; Bu, komutu tek bir liner ilefind
kombine ederek yapılabilir .
*.jpg
ve *.png
tek dosya *.pdf
? Bunların numaralandırılmış dosyalar olduğunu (örn. 1.jpg 2.png 3.png 4.jpg
) Ve bu sıranın pdf çıktısında muhafaza edilmesi / muhafaza edilmesi gerektiğini unutmayın.
*.jpg
'içine s *.png
... birinci adımdaki ler' ve 2. adımda Cevabınız eşdeğer performans
daha hızlı ancak sıradışı sözdizimi:
parallel convert '{} {.}.pdf' ::: *.jpg
Paralel olarak çalışır ( https://www.gnu.org/software/parallel/ kullanılarak ). convert
Etkili paralelleşmeyi sınırlayacak herhangi bir çoklu iş parçacığı henüz fark etmedim. Bu sizin endişenizse, çok iş parçacığının oluşmamasını sağlayan bir yöntem için aşağıdaki açıklamaya bakın.
parallel
, ortam değişkenini ayarlayarak ( GNU gibi uygulama düzeyinde paralelleştirme kullanıyorsanız) devre dışı bırakılabilir MAGICK_THREAD_LIMIT=1
.
https://gitlab.mister-muffin.de/josch/img2pdf
ImageMagick'i içeren tüm önerilen çözümlerde, JPEG verileri tamamen kodu çözülmüş ve yeniden kodlanmıştır. Bu, üretim kaybına neden olduğu gibi, performansın "on ila yüz" katından daha kötü img2pdf
.
pip img2pdf
Bağımlılıklarınız olması koşuluyla kurulabilir (örneğin apt-get install python python-pil python-setuptools libjpeg-dev
veya 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 bu cevabı daha fazla oy hak ediyor. Aslında, convert
burada başarısız olur, img2pdf
böyle bir testi geçer ve hatta oluşturulan pdf'i ihtiyaçlarınıza göre ayarlamak için resim boyutunu, sayfa boyutunu vb. Ayarlamak için birçok seçenek içerir.
img2pdf
Ubuntu 16.04 düzenli depolarında mevcuttur, pip
burada manuel işlem yapılmasına gerek yoktur ve güncellemelerden faydalanabilirsiniz.
Yukarıdaki önerilerden en iyisini basit, etkili ve sağlam bir komut satırında birleştiren bir yöntem:
find /path/to/files -iname '*.jpg' -exec mogrify -format pdf {} +
A ile başlayan -
veya boşluk içeren dosya isimleriyle iyi çalışır . Kullanımına dikkat -iname
hangi harfe duyarsız sürümü -name
o üzerinde çalışacak böylece .JPG
sadece yanı sıra .jpg
.
Bu , bazı sistemlerde 'Argüman listesi çok uzun' hatasıyla sonuçlanabilecek joker karakterle find
top atmak yerine dosya listesini almak için kullanılır. @Enzotib bir yorumu işaret etse de , bir for döngüsünde globbing kullanma davranışı bir komutun argümanlarından farklıdır .*.jpg
Ayrıca, find
alt dizinleri de işleyecektir, oysa kabuk globbing, **/*jpg
zsh içindeki özyinelemeli globbing sözdizimi gibi kabuğa özgü özelliklere sahip olmadığınız sürece gerçekleşmeyecektir .
EDIT: @IlmariKaronenfind
tarafından komutu yeniden çalıştırma ve yalnızca ilk çalıştırmadan bu yana değişen dosyaları dönüştürme hakkında bir yorum okuduktan sonra düşündüğümün başka bir kullanışlı özelliği daha ekleyeceğimi düşündüm .
İlk geçişte touch
, dönüştürme tamamlandıktan sonra bir zaman damgası dosyası olabilir .
find /path/to/files -iname '*.jpg' -exec mogrify -format pdf {} +; touch timestamp
Ardından , son değişiklik zamanı zaman damgası dosyasından daha yeni olan dosyaların alt kümesinde işlem -newer timestamp
yapmak için find
ifadeye ekleyin . Her çalıştırmadan sonra zaman damgası dosyasını güncellemeye devam edin.
find /path/to/files -iname '*.jpg' -newer timestamp -exec mogrify -format pdf {} +; touch timestamp
Bu, bir Makefile'a başvurmaktan kaçınmanın kolay bir yoludur (zaten bir tane kullanmadıysanız) ve find
özlü kalırken çok yönlü bir ifadeye sahip olmasının mümkün olduğu her zaman kullanmaya değer olmasının iyi bir nedenidir .
Bunu convert
doğrudan yapabilirsin. Bu ImageMagicks Sitesinin altında Komut Satırı İşleme ile ilgili olarak bulunur .
convert *.jpg +adjoin page-%d.pdf
convert *.jpg -adjoin output.pdf
birleştirilmiş pdf için
Benzer bir şey için aşağıdaki makefile kullandım:
SVG = $(wildcard origs/*.svg)
PNG = $(patsubst origs/%.svg,%.png,$(SVG))
all: $(PNG)
%.png: origs/%.svg
convert -resize "64x" $< $@
clean:
rm $(PNG)
Şimdi sadece çalıştırabilirim make
ve etrafta yatan her svg dosyası için png dosyaları alıyorum.
Düzenle
İstendiği gibi:
origs/foo.svg
olur foo.png
)all: $(PNG)
"tümü" hedefinin tüm PNG'lere bağlı olduğunu tanımlar.%.png: origs/%.svg
tanımlar, $ X.png dosyası, origs / $ X.svg dosyasına bağlıdır ve arayarak oluşturulabilir convert ... $< $@
.
$<
bağımlılık ve $@
hedef isimmake
, yeniden yazmak , bunları ve yalnızca değiştirilen PDF'leri geri dönüştürür .
find
böylece bir Makefile'a başvurmak zorunda kalmazsınız.
Küçük bir senaryo hile yapardı. (Solaris 10'da ksh88 ile test edilmiştir)
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
Sonra find
betiği çalıştırmak için koşabilirsiniz :
find dir -name image\*.jpg -exec /bin/ksh script.ksh {} \;
Her iki unutmayın script.ksh
ve find
sana verdiğim komutu, işletim sistemi ve kullandığınız kabuk üzerinde depeding farklı sözdizimi olabilir.
pdfname=${1%.*}.pdf
dosyanın uzantısını ile değiştirir pdf
. Bu yöntem çok daha basittir ve dosya adı özel karakterler içeriyor olsa bile çalışır. İlgili bir notta, değişken ikamelerin çevresine çift tırnak işareti ekleyin.
MacOS yardımcı programıSIPS
MacOS (Sierra) altında, Apple'ın yerleşik komut satırı yardımcı programı sips
, Apple'ın tüm raster görüntü yardımcı programlarına kapsamlı erişim sağlar; Bu dönüştürülmesini, çıkıyor jpg
için pdf
.
Örneğin, varolan düşük çözünürlüklü / küçük boyutlu bir jpg
görüntüden 'cat.jpg'
(8401 bayt boyutunda), aşağıdaki komut satırı 'cat.pdf'
raster çözünürlükte değişiklik yapmadan ve dosya boyutunun minimum genişlemesini sağlar:
$ 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'nin PSD
raster görüntü formatına dönüştürme Benzer bir sips
deyim Adobe uyumlu *.psd
dosyalar oluşturur
$ 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
Ancak Adope psd
raster formatının kullanımına uygun olan 30 katlı dosya boyutu genişlemesine dikkat edin .
Kitap Üretimi Büyük ölçekli kitap üretimi yaparken, çoklu biçimlerde sunulan yüzlerce resim içeren, benim için uygun bir komut satırı deyimi, biçiminde ImageMagick
saf raster resim dosyaları oluşturmak için yardımcı programları kullanmıştır png
(tüm meta veriler ve renk profilleri soyulmuş aşımı), sonra kullanmak sips
renk profilleri ve / veya yorumların bir bütün birimini geri ve kullanımı sips
(son çıkış dosyaları oluşturmak için de en yaygın *.png
, *.psd
ya da *.pdf
) dosyalarını.
Ne yazık ki convert
, daha önce görüntüyü değiştirir, jpg
kullanmanız gereken orijinalin minimum kalite kaybına sahip olmak için img2pdf
, bu komutları kullanıyorum:
1) Bu, çözünürlük veya kalite kaybı olmadan pdf
her jpg
görüntüden bir dosya oluşturmak için :
ls -1 ./*jpg | xargs -L1 -I {} img2pdf {} -o {}.pdf
2) pdf
Sayfaları birebir birleştirmek için :
pdftk *.pdf cat output combined.pdf
3) Son olarak, pdfs'teki taramanın kalitesini değiştirmeyen bir OCRed metin katmanı ekledim, böylece aranabilirler:
pypdfocr combined.pdf
Dönüşüm sürecimi hızlandırmak için dönüşüm için imagemagick ve paralel olarak çözdüm:
ls *.JPEG |parallel convert -density 200 -resize 496X646 -quality 100 {} ../{.}.PDF
Birden fazla dosyayı dönüştürmenin en basit yollarından biri, linux terminalindeki dosya dizinine gidip şunu yazmaktır:
$ convert *.png mypdf.pdf
Belki sadece resim dosyalarını kullanıyorsanız, Çizgi Roman Arşivi'ni kullanmak istersiniz (.cbr, .cbz, .cbt, .cba, .cb7)
Bu, PDF'den çok daha esnektir.
Under Linux you can use software like Comix, Evince, Okular and QComicBook.
https://secure.wikimedia.org/wikipedia/en/wiki/Comic_book_archive