Terakhir kali saya menggunakan convert
tugas seperti itu, saya secara eksplisit menentukan ukuran tujuan melalui pengubahan ukuran:
$ i=150; convert a.png b.png -compress jpeg -quality 70 \
-density ${i}x${i} -units PixelsPerInch \
-resize $((i*827/100))x$((i*1169/100)) \
-repage $((i*827/100))x$((i*1169/100)) multipage.pdf
The convert
perintah tidak selalu menggunakan DPI sebagai satu unit Format density default / halaman, sehingga kita secara eksplisit menentukan DPI dengan -units
pilihan (jika tidak, anda mungkin mendapatkan hasil yang berbeda dengan versi yang berbeda / kombinasi format masukan). Ukuran baru (ditentukan melalui -resize
) adalah dimensi halaman DIN A4 dalam piksel. Argumen pengubahan ukuran menentukan ukuran halaman maksimal. Resolusi dan kualitas apa yang harus diambil tergantung pada use case - Saya memilih 150 DPI dan kualitas rata-rata untuk menghemat ruang sementara tidak terlihat terlalu buruk ketika dicetak di atas kertas.
Perhatikan bahwa convert
secara default tidak mengubah rasio aspek dengan operasi pengubahan ukuran:
Ubah ukuran akan menyesuaikan gambar ke ukuran yang diminta. Itu TIDAK mengisi, ukuran kotak yang diminta.
( Manual ImageMagick )
Bergantung pada versi ImageMagick dan format input yang terlibat mungkin ok untuk menghilangkan -repage
opsi. Tetapi kadang-kadang diperlukan dan tanpa opsi itu header PDF mungkin mengandung dimensi terlalu kecil. Bagaimanapun, yang -repage
seharusnya tidak sakit.
Perhitungan menggunakan bilangan bulat aritmatika karena bash
hanya mendukungnya. Dengan zsh
ekspresi dapat disederhanakan - yaitu diganti dengan $((i*8.27))x$((i*11.69))
.
Gambar Lineart
Jika file PNG adalah gambar bi-level (hitam & putih alias lineart) maka img2pdf
alat menghasilkan hasil yang unggul di atas ImageMagick convert
. Itu berarti img2pdf
lebih cepat dan menghasilkan PDF yang lebih kecil.
Contoh:
$ img2pdf -o multipage.pdf a.png b.png
atau:
$ img2pdf --pagesize A4 -o multipage.pdf a.png b.png
-repage a4
saya mendapatkaninvalid argument for option '-repage': a4
-repage
tidak mendukung nama a4 lagi. Saya telah mengatasinya melalui shell arithmetic:-repage $((150*8.27))x$((150*11.69))
-density 150
argumen penting untuk ditambahkan.Apa yang benar-benar ingin Anda gunakan adalah:
-extent
sebenarnya memperluas gambar menjadi 1240x1753, sambil-resize
menjaga rasio gambar, pas ke salah satu1240x...
atau...x1753
.The
-gravity
parameter opsional tetapi dapat digunakan ke tengah gambar ketika memperpanjang.sumber
-extent
benar-benar apa yang ingin saya gunakan :) - tolong, tambahkan kutipan kiri yang terlewatkan di depan -extent, terima kasih!Tambahan untuk jawaban caugner :
Setelah menginstal IM v6.6.9-7 saya menemukan
-gravity
parameter perlu ditempatkan di antara-resize
dan-extent
untuk memiliki efek.selain itu (walaupun bukan bagian dari pertanyaan op) saya menemukan pengaturan warna latar belakang yang berbeda yang akan menghasilkan perintah total
variasi lain yang bermanfaat yang sering saya gunakan ketika saya tidak ingin skala ulang gambar yang sudah datang dalam aspek-rasio yang benar tetapi menjaga resolusi individualnya adalah
di mana kerapatan target secara dinamis ditentukan dengan menghitung lebar dibagi dengan 8,27 (yang merupakan lebar dalam inci dari halaman A4). yang
-repage a4
parameter dapat dihilangkan sebagian besar waktu tetapi saya punya beberapa kasus di mana .pdf yang dihasilkan akan memiliki format yang berbeda sligtly off dimensi A4 dari 210x297mm (8.27x11.6" )sumber
Saya menemukan kode Mikher sangat berguna, namun memetakan PDF sepenuhnya sebagai Portrait atau Landscape, jadi saya telah memodifikasinya untuk memeriksa tata letak setiap file input dan mencocokkannya dalam output.
Saya tidak memasukkan edit Yotam karena berfungsi tanpa itu di kotak Ubuntu 15.04 saya.
sumber
Saya menemukan script berikut nyaman yang menggabungkan jawaban yang tercantum di sini serta beberapa masalah yang saya miliki dengan perhitungan floating point:
Script disebut (disimpan sebagai file images2pdf)
/ edit: Menambahkan bendera "-l" menurut komentar oleh tanius untuk ketepatan yang lebih baik.
sumber
$(echo "150*8.27" | bc)
masih tidak bagus untuk floating point. Bekerja di sini karena ini adalah perkalian. Untuk$(echo "150/8.27" | bc)
meskipun, hasilnya18
(dipotong ke integer). Sebaliknya, memanggilbc
dengan tinggiscale
:$(echo "150/8.27" | bc -l)
, hasil ini18.137847…
.Saya juga berjuang dengan hal-hal itu. Berdasarkan info di atas, saya menulis sebuah skrip yang menambahkan file gambar yang diurutkan berdasarkan abjad ke dalam satu PDF.
Beberapa variabel dapat diatur di dalam skrip. Itu tergantung pada ImageMagick dan pdftk.
NB: Jika gambar input memiliki resolusi yang lebih tinggi (dpi) daripada resolusi yang diinginkan dari output.pdf, gambar di-resampled ke resolusi yang lebih rendah. Jika tidak, gambar tidak akan diresampled dan hanya diperluas agar sesuai dengan kanvas halaman.
sumber
-set density $ImgDens
menjadi-density $ImgDens
Saya sangat merekomendasikan program Python CLI
img2pdf
untuk konversi lossless:https://gitlab.mister-muffin.de/josch/img2pdf
Contoh penggunaan:
sumber
Saya hanya menggunakan sesuatu yang mirip dengan jawaban maxschlepzigs di bawah Ubuntu 16.04 / ImageMagick
Ini juga memusatkan hasilnya
sumber
Saya ingin mengonversi gambar ke ukuran halaman 5,00 x 8,00 in (dilihat dari pembaca adobe) Inilah yang saya lakukan di ubuntu 18.04 OS. Pertama, cari tahu ukuran halaman yang saya cari seperti itu:
Dan hasilnya adalah: Ukuran halaman: 360 x 576 poin
Kemudian gambar dikonversi ke PDF dengan ukuran yang sama seperti:
Catatan: untuk menginstal img2pdf
sumber