PNG dosyasının DPI'sini nasıl değiştirebilirim? (komut satırında, ImageMagick olmadan)


9

PNG resim dosyalarındaki DPI değiştirmenin bir yolunu arıyorum. ImageMagick'i kullanmak kolaydır:

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

Sorun, bu komutu uygulamamdan, ImageMagick yüklü olmayan birden fazla VM'de çalıştıracağım. Yükseltme paketlerini bu VM'lere gönderebilirim, ancak ImageMagick durumunda, bir yükseltme paketine yaklaşık 30 MB ekleyeceğim, bu da benim kullanım durumum için biraz fazla.

Uzun lafın kısası : Küçük bir (paket boyutunda olduğu gibi) komut satırı aracını kullanarak bir PNG dosyasındaki DPI'yı değiştirebilmemin bir yolu var mı?

İsteğe bağlı olarak, bir kişi onları nerede arayacağını biliyorsa, ham görüntü dosyasındaki baytları değiştirmek de iyi olur ...


Kendi uygulamanızı yapmayı düşünebilirsiniz. PNG parçalarını değiştirmek yeterince basittir. Hepsine yalnızca belirli bir DPI uygulamak istiyorsanız, çalışan bir sağlama toplamı işlevine bile ihtiyacınız yoktur pHYs- Photoshop'ta yapılan bir PNG'den önceden yapılmış bir yığın kopyalamanız yeterlidir .
Zdenek

Yanıtlar:


6

2.10 MB yeterince küçük mü? Evetse, NConvert ve aşağıdaki gibi bir toplu iş komutunu kullanın:

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

NConvert ne için?

XnView, GUI tabanlı bir uygulamadır, grafik kullanıcı arayüzü kullanarak görüntüleri değiştirebilir ve değiştirebilirsiniz. NConvert, XnView ile yaklaşık aynı özelliklere sahiptir, ancak bir komut satırı aracıdır ve grafik kullanıcı arabirimi yoktur. Toplu İş komut dosyalarında NConvert kullanabilirsiniz veya başka bir uygulama bunu çağırabilir.

Yararlı Bağlantılar

  • Başlangıç ​​kılavuzu ve başlamak için bazı örneklerle Wiki
  • Hangi komut satırı parametrelerinin kullanılabildiğini görmek için yardım dosyası (pastebin'e yüklendi)
  • Nconvert kullanan bir grafik kullanıcı arabirimi XnConvert'tur . Nconvert toplu iş dosyaları oluşturmak ve vermek için bunu kullanın
  • Forum için Xnconvert ve NConvert için

Teşekkürler, harika görünüyor ve muhtemelen gelecekte kullanışlı olacak! Bu durumda, PNG formatını (ki yeterince basitti) inceledim ve küçük bir özel uygulama (PHP'de 15 satır) aracılığıyla görüntüleri değiştirdim.
johndodo

@johndodo Kulağa ilginç geliyor. Başvurunuzu bizimle paylaşmak ister misiniz?
nixda

Ne yazık ki bunu yapmak için özgür değilim, ama aynı PNG dosyası biçiminin (büyük!) Belirtimini okuyarak ve pHYs yığınını değiştiren bir uygulama yaparak yapabilirsiniz . Ne yaptığınızı öğrendikten sonra gerçekten basit.
johndodo

1

Bu komutu "uygulamanızdan" çalıştırdığınızı söylemiştiniz ve bu beni bu uygulamayı yazdığınıza veya sürdürdüğünüze inandırıyor. Bununla birlikte, birkaç dil için ImageMagick API'leri vardır ve bunlardan birini işlevselliği doğrudan mevcut programınıza eklemek için kullanabilirsiniz. Paket boyutundaki artış, uygulamanızın hangi dilde yazıldığına ve kütüphaneyi statik veya dinamik olarak bağlamanıza bağlı olacaktır, ancak 30 MB'lık bir artıştan önemli ölçüde daha küçük olacağını hayal ediyorum.

Başka bir seçenek de ImageMagick paketinin tamamını içermemektir. Sen indirebilirsiniz ImageMagick Zip dosyasını (sadece 13 MB BTW olan) ve sadece ayıklamak convertaracı ve 's bağımlılıkları ve VM en o dağıtın. Aracın bağımlılıklarının ne olduğunu belirlemek için kullanabileceğiniz Bağımlılık Yürütücü adlı bir convertaraç vardır.


1

Kullanım -sizebayrağı netpbm pnmtopng programı. Kullanılan birimler metre başına pikseldir. Aşağıdaki örnek newfile.png dosyasını 300dpi olarak ayarlayacaktır.

pngtopnm <oldfile.png | pnmtopng -size='11811 11811 1' >newfile.png

0

Potansiyel olarak bir python betiği kullanabilirsiniz.

#!/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")

Kaynak .


Python 3.3.2 yükleyicisi (kaynak kodu hariç) 19.3 MB ve Python 2.7.5 yükleyicisi 15.5 MB'dir.
Drew Chapin

5
Bu, görüntüyü yeniden boyutlandıracak, DPI'yı değiştirmeyecek.
Bobby

0

Bunun için uygun Image Magick "convert" komut satırı -resample argümanını kullanmak olacaktır:

convert image.png -resample 150x150 -units pixelsperinch ../ImagesAdjusted/image.png
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.