Bagaimana cara mengubah DPI file PNG? (dalam baris perintah, tanpa ImageMagick)

9

Saya mencari cara untuk mengubah DPI pada file gambar PNG. Menggunakan ImageMagick ini mudah:

$ convert -density 150 -units pixelsperinch file.png file.png

Masalahnya adalah bahwa saya akan menjalankan perintah ini dari aplikasi saya, berjalan pada banyak VM, yang tidak menginstal ImageMagick. Saya bisa mendorong paket pemutakhiran ke VM ini, tetapi dalam kasus ImageMagick yang akan menambahkan sekitar 30MB ke bundel pemutakhiran, yang agak terlalu banyak untuk kasus penggunaan saya.

Singkat cerita : apakah ada cara saya bisa mengubah DPI pada file PNG menggunakan alat baris perintah kecil (seperti dalam ukuran paket)?

Secara opsional, mengubah byte dalam file gambar mentah juga tidak apa-apa, jika seseorang tahu di mana mencarinya ...

johndodo
sumber
Anda dapat mempertimbangkan untuk melakukan implementasi Anda sendiri. Memanipulasi bongkahan PNG cukup mudah. Jika Anda hanya ingin menerapkan satu DPI tertentu untuk semuanya, Anda bahkan tidak perlu memiliki fungsi checksum yang berfungsi - cukup salin pHYspotongan buatan dari PNG yang dibuat di Photoshop.
Zdenek

Jawaban:

6

Apakah 2,10 MB cukup kecil? Jika ya, gunakan NConvert dan perintah batch seperti:

nconvert -out png -dpi 150 -keepdocsize -keepfiledate mysource.png

Untuk apa NConvert?

XnView adalah aplikasi berbasis GUI, Anda dapat mengubah dan memanipulasi gambar menggunakan antarmuka pengguna grafis. NConvert memiliki kemampuan yang hampir sama dengan XnView, tetapi merupakan alat baris perintah dan tidak memiliki antarmuka pengguna grafis. Anda dapat menggunakan NConvert dalam skrip Batch atau aplikasi lain dapat menyebutnya.

Tautan yang bermanfaat

  • Panduan pemula dan Wiki dengan beberapa contoh untuk memulai
  • File bantuan untuk melihat parameter baris perintah apa yang tersedia (Diunggah pada pastebin)
  • Front-end grafis menggunakan Nconvert adalah XnConvert . Gunakan ini untuk membuat & mengekspor file batch Nconvert
  • Forum untuk Xnconvert dan Nconvert untuk
nixda
sumber
Terima kasih, terlihat hebat dan mungkin akan berguna di masa depan! Dalam hal ini saya akhirnya mempelajari format PNG (yang untungnya cukup sederhana) dan mengubah gambar melalui aplikasi kustom kecil (15 baris dalam PHP).
johndodo
@johndodo Ini kedengarannya menarik. Bolehkah Anda ingin berbagi aplikasi dengan kami?
nixda
Sayangnya saya tidak berhak melakukan itu, tetapi Anda dapat melakukan hal yang sama dengan membaca spesifikasi (hebat!) Format file PNG dan membuat aplikasi yang mengubah potongan pHYs . Ini sangat sederhana setelah Anda tahu apa yang Anda lakukan.
johndodo
1

Anda menyebutkan Anda akan menjalankan perintah ini "dari aplikasi Anda," dan ini membuat saya percaya bahwa Anda telah menulis aplikasi ini, atau sedang mempertahankannya. Yang mengatakan, ada ImageMagick API untuk beberapa bahasa, dan Anda bisa menggunakan salah satu dari mereka untuk menambahkan fungsi langsung ke program Anda yang sudah ada. Peningkatan ukuran paket akan tergantung pada bahasa apa aplikasi Anda ditulis dan apakah Anda menautkan perpustakaan secara statis atau dinamis, tapi saya membayangkan itu akan secara signifikan lebih kecil dari peningkatan 30 MB.

Opsi lain adalah tidak menyertakan seluruh paket ImageMagick. Anda dapat mengunduh file Zip ImageMagick (yang hanya 13 MB BTW), dan mengekstrak hanya convertalat dan dependensinya dan mendistribusikannya ke VM Anda. Ada alat yang disebut Dependency Walker yang dapat Anda gunakan untuk menentukan apa dependensi convertalat tersebut.

Drew Chapin
sumber
1

Gunakan -sizebendera di program pnmtopng netpbm . Satuan yang digunakan adalah piksel per meter. Contoh berikut akan mengatur newfile.png ke 300dpi.

pngtopnm <oldfile.png | pnmtopng -size='11811 11811 1' >newfile.png
Diomidis Spinellis
sumber
0

Nah, Anda berpotensi menggunakan skrip python.

#!/usr/bin/python
im = Image.open("in.png")
nx, ny = im.size
im2 = im.resize((int(nx*1.5), int(ny*1.5)), Image.BICUBIC)
im2.save("out.png")

Sumber .

Goncalo
sumber
Pemasang Python 3.3.2 (tidak termasuk kode sumber) adalah 19,3 MB, dan pemasang Python 2.7.5 adalah 15,5 MB.
Drew Chapin
5
Itu akan mengubah ukuran gambar, bukan mengubah DPI.
Bobby
0

Baris perintah "convert" Magick Gambar yang tepat untuk ini adalah menggunakan argumen -contoh:

convert image.png -resample 150x150 -units pixelsperinch ../ImagesAdjusted/image.png
tolistim
sumber