ฉันต้องการแปลงไฟล์บางส่วนจาก 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
มันไม่ทำงาน
คำตอบ:
ในทุบตี:
for f in *.jpg; do
convert ./"$f" ./"${f%.jpg}.pdf"
done
-
ปัญหาเป็นอย่างอื่น
mogrify
พิมพ์ได้น้อยกว่ามาก ดูคำตอบของฉัน
คุณสามารถใช้mogrify
คำสั่งนี้ โดยปกติจะแก้ไขไฟล์ในสถานที่ แต่เมื่อแปลงรูปแบบจะเขียนไฟล์ใหม่ (เพียงแค่เปลี่ยนนามสกุลให้ตรงกับรูปแบบใหม่) ดังนั้น:
mogrify -format pdf -- *.jpg
(เช่นเดียวกับของ enzotib ./*.jpg
สิ่งที่--
ป้องกันไม่ให้ชื่อไฟล์แปลก ๆ ถูกตีความว่าเป็นสวิตช์คำสั่งส่วนใหญ่จำได้--
ว่าหมายถึง "หยุดมองหาตัวเลือก ณ จุดนี้")
*.jpg
และ*.png
ไฟล์ไปคนเดียว*.pdf
? โปรดทราบว่าพวกเขาเป็นไฟล์ที่มีหมายเลข (เช่น1.jpg 2.png 3.png 4.jpg
) และคำสั่งนั้นควรได้รับการเก็บรักษา / สงวนไว้ในเอาต์พุต pdf
*.jpg
เป็น*.png
ขั้นตอนที่หนึ่งและดำเนินการเทียบเท่าคำตอบของคุณในขั้นตอนที่ 2 ...
ไวยากรณ์เร็วขึ้น แต่ผิดปกติ:
parallel convert '{} {.}.pdf' ::: *.jpg
ทำงานแบบขนาน (โดยใช้https://www.gnu.org/software/parallel/ ) ฉันยังไม่ได้สังเกตเห็นว่ามีหลายเธรดในconvert
ซึ่งจะ จำกัด การขนานที่มีประสิทธิภาพ หากนั่นเป็นข้อกังวลของคุณโปรดดูในความคิดเห็นด้านล่างสำหรับวิธีการเพื่อให้แน่ใจว่าจะไม่เกิดเธรดหลายเธรด
parallel
) MAGICK_THREAD_LIMIT=1
โดยการตั้งค่าตัวแปรสภาพแวดล้อม
https://gitlab.mister-muffin.de/josch/img2pdf
ในโซลูชันที่นำเสนอทั้งหมดที่เกี่ยวข้องกับ ImageMagick ข้อมูล JPEG จะถูกถอดรหัสและเข้ารหัสใหม่ทั้งหมด ซึ่งจะส่งผลในการสูญเสียรุ่นเช่นเดียวกับผลงาน "10-100" 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 ในความคิดเห็นพฤติกรรมของการใช้globbing ในสำหรับวงจะแตกต่างกว่าข้อโต้แย้งคำสั่งของ
นอกจากนี้find
จะจัดการกับไดเรกทอรีย่อยในขณะที่เชลล์ globbing จะไม่เว้นเสียแต่ว่าคุณจะมีคุณสมบัติเฉพาะของเชลล์เช่น**/*jpg
ไวยากรณ์วนรอบแบบเรียกซ้ำใน zsh
แก้ไข:ฉันคิดว่าฉันจะเพิ่มคุณสมบัติที่มีประโยชน์อีกอย่าง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
และฉันได้รับไฟล์ png สำหรับไฟล์ svg ทุกไฟล์ที่อยู่รอบ ๆ
แก้ไข
ตามที่ขอ:
origs/foo.svg
กลายเป็นfoo.png
)all: $(PNG)
กำหนดว่าเป้าหมาย "ทั้งหมด" ขึ้นอยู่กับ PNG ทั้งหมด%.png: origs/%.svg
กำหนด, thethe ไฟล์ $ X.png ขึ้นอยู่กับ origs / $ X.svg convert ... $< $@
และสามารถสร้างขึ้นโดยการเรียก
$<
คือการพึ่งพาและและ $@
เป็นชื่อเป้าหมายmake
อีกครั้งจะเป็นการแปลงไฟล์เหล่านั้นกลับคืนและเฉพาะไฟล์ PDF ที่มีการเปลี่ยนแปลง
make
ดูเหมือนเล็กน้อยที่ซับซ้อนมากกว่าเมื่อง่ายหนึ่งซับจะทำเคล็ดลับ
find
ดังนั้นคุณไม่ต้องหันไปใช้ Makefile
สคริปต์ตัวจิ๋วนั้นน่าจะหลอกได้ (ทดสอบด้วย ksh88 บน Solaris 10)
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
คำสั่งที่ฉันให้คุณอาจมีไวยากรณ์ที่แตกต่างกันขึ้นอยู่กับระบบปฏิบัติการและเชลล์ที่คุณใช้
pdfname=${1%.*}.pdf
pdf
แทนที่นามสกุลไฟล์ที่มี วิธีการนั้นง่ายกว่ามากและใช้ได้แม้ว่าชื่อไฟล์จะมีอักขระพิเศษ ในบันทึกย่อที่เกี่ยวข้องให้เพิ่มเครื่องหมายคำพูดคู่ล้อมรอบการแทนที่ตัวแปร
ยูทิลิตี้ MacOSSIPS
ภายใต้ 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
การแปลงเป็นPSD
รูปแบบภาพแรสเตอร์ของ Adobesips
สำนวนที่ คล้ายกันสร้าง*.psd
ไฟล์ที่เข้ากันได้กับ Adobe
$ 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
อย่างไรก็ตามโปรดทราบว่าการขยายขนาดไฟล์ 30 เท่าที่ใช้ดูแลpsd
รูปแบบAdope raster
การผลิตหนังสือ ในการผลิตหนังสือขนาดใหญ่ที่เกี่ยวข้องกับภาพหลายร้อยภาพที่จัดจำหน่ายในหลายรูปแบบสำหรับฉันสำนวนบรรทัดคำสั่งที่สะดวกสบายได้ใช้ImageMagick
ยูทิลิตี้เพื่อสร้างไฟล์ภาพแรสเตอร์บริสุทธิ์ในpng
รูปแบบ (พร้อม meta-data ทั้งหมดและ โปรไฟล์สีถอดออก) จากนั้นใช้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) และสุดท้ายฉันเพิ่มเลเยอร์ข้อความ OCRed ที่ไม่เปลี่ยนคุณภาพของการสแกนในไฟล์ PDF เพื่อให้สามารถค้นหาได้:
pypdfocr combined.pdf
ฉันได้รับการแก้ปัญหาด้วย imagemagick สำหรับการแปลงและขนานเพื่อเร่งกระบวนการแปลงของฉัน:
ls *.JPEG |parallel convert -density 200 -resize 496X646 -quality 100 {} ../{.}.PDF
วิธีที่ง่ายที่สุดวิธีหนึ่งในการแปลงไฟล์หลายไฟล์คือไปที่ไดเรกทอรีไฟล์ใน linux terminal และประเภท:
$ convert *.png mypdf.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