Szukam sposobu zmiany DPI w plikach obrazów PNG. Za pomocą ImageMagick jest to łatwe:
$ convert -density 150 -units pixelsperinch file.png file.png
Problem polega na tym, że uruchomię to polecenie z mojej aplikacji, działającej na wielu maszynach wirtualnych, na których nie zainstalowano ImageMagick. Mogę wypchnąć pakiety aktualizacji na te maszyny wirtualne, ale w przypadku ImageMagick, który dodałby około 30 MB do pakietu aktualizacji, co jest nieco za dużo jak na mój przypadek użycia.
Krótko mówiąc : czy istnieje sposób, aby zmienić DPI pliku PNG za pomocą małego narzędzia wiersza polecenia (jak w rozmiarze pakietu)?
Opcjonalnie zmiana bajtów w pliku surowego obrazu również byłaby w porządku, jeśli ktoś wie, gdzie ich szukać ...
pHYs
fragment z pliku PNG wykonanego w Photoshopie.Odpowiedzi:
Czy 2,10 MB jest wystarczająco małe? Jeśli tak, użyj NConvert i polecenia wsadowego, takiego jak:
Do czego służy NConvert?
XnView to aplikacja oparta na graficznym interfejsie użytkownika, możesz zmieniać obrazy i manipulować nimi za pomocą graficznego interfejsu użytkownika. NConvert ma prawie takie same możliwości jak XnView, ale jest narzędziem wiersza poleceń i nie ma graficznego interfejsu użytkownika. Możesz użyć NConvert w skryptach wsadowych lub inna aplikacja może to nazwać.
Przydatne linki
źródło
Wspomniałeś, że uruchamiasz to polecenie „z poziomu aplikacji”, co prowadzi mnie do przekonania, że napisałeś tę aplikację lub ją utrzymujesz. To powiedziawszy, istnieją interfejsy API ImageMagick dla kilku języków i możesz użyć jednego z nich, aby dodać funkcjonalność bezpośrednio do istniejącego programu. Zwiększenie rozmiaru pakietu będzie zależeć od języka, w którym napisana jest aplikacja oraz od połączenia biblioteki statycznie czy dynamicznie, ale wyobrażam sobie, że byłby znacznie mniejszy niż wzrost o 30 MB.
Inną opcją nie jest dołączenie całego pakietu ImageMagick. Możesz pobrać plik ImageMagick Zip (który ma tylko 13 MB BTW) i wyodrębnić tylko
convert
narzędzie oraz jego zależności i rozpowszechnić je na maszynie wirtualnej. Istnieje narzędzie o nazwie Dependency Walker , za pomocą którego można określić, jakie są zależności tegoconvert
narzędzia.źródło
Użyj
-size
flagi w programie pnmtopng netpbm . Zastosowane jednostki to piksele na metr. Poniższy przykład ustawi newfile.png na 300dpi.źródło
Cóż, potencjalnie możesz użyć skryptu python.
Źródło .
źródło
Właściwym wierszem polecenia „Konwertuj” Magi obrazu jest do tego użycie argumentu -resample:
źródło