Làm cách nào để thay đổi DPI của tệp PNG? (trong dòng lệnh, không có ImageMagick)


9

Tôi đang tìm cách thay đổi DPI trên các tệp hình ảnh PNG. Sử dụng ImageMagick thật dễ dàng:

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

Vấn đề là tôi sẽ chạy lệnh này từ ứng dụng của mình, chạy trên nhiều máy ảo, chưa cài đặt ImageMagick. Tôi có thể đẩy các gói nâng cấp lên các VM này, nhưng trong trường hợp ImageMagick sẽ thêm khoảng 30 MB vào gói nâng cấp, điều này hơi quá so với trường hợp sử dụng của tôi.

Câu chuyện dài : có cách nào để tôi có thể thay đổi DPI trên tệp PNG bằng công cụ dòng lệnh nhỏ (như kích thước gói) không?

Tùy chọn, thay đổi byte trong một tệp hình ảnh thô cũng sẽ ổn, nếu ai đó biết nơi để tìm chúng ...


Bạn có thể xem xét thực hiện của riêng bạn. Thao tác với các khối PNG là đủ thẳng. Nếu bạn chỉ có ý định áp dụng một DPI cụ thể cho tất cả chúng, bạn thậm chí không cần phải có chức năng kiểm tra hoạt động - chỉ cần sao chép một đoạn được tạo sẵn pHYstừ một PNG được tạo bằng Photoshop.
Zdenek

Câu trả lời:


6

2,10 MB có đủ nhỏ không? Nếu có, sử dụng NConvert và lệnh bó như:

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

NConvert để làm gì?

XnView là một ứng dụng dựa trên GUI, bạn có thể thay đổi và thao tác hình ảnh bằng giao diện người dùng đồ họa. NConvert có các khả năng tương tự như XnView, nhưng nó là một công cụ dòng lệnh và không có giao diện người dùng đồ họa. Bạn có thể sử dụng NConvert trong tập lệnh Batch hoặc ứng dụng khác có thể gọi nó.

Liên kết hữu ích


Cảm ơn, trông tuyệt vời và có thể sẽ có ích trong tương lai! Trong trường hợp này, tôi đã kết thúc việc nghiên cứu định dạng PNG (may mắn là đủ đơn giản) và thay đổi hình ảnh thông qua một ứng dụng tùy chỉnh nhỏ (15 dòng trong PHP).
johndodo

@johndodo Điều này nghe có vẻ thú vị. Bạn có thể muốn chia sẻ ứng dụng của bạn với chúng tôi?
nixda

Thật không may, tôi không được tự do làm điều đó, nhưng bạn có thể làm điều tương tự bằng cách đọc một đặc tả (tuyệt vời!) Của định dạng tệp PNG và tạo một ứng dụng thay đổi đoạn pHYs . Nó thực sự là đơn giản một khi bạn biết những gì bạn đang làm.
johndodo

1

Bạn đã đề cập rằng bạn sẽ chạy lệnh này "từ ứng dụng của bạn" và điều này khiến tôi tin rằng bạn đã viết ứng dụng này hoặc đang duy trì nó. Điều đó nói rằng, có API ImageMagick cho một số ngôn ngữ và bạn có thể sử dụng một trong số chúng để thêm chức năng ngay vào chương trình hiện tại của mình. Việc tăng kích thước gói sẽ phụ thuộc vào ngôn ngữ mà ứng dụng của bạn được viết bằng ngôn ngữ nào và bạn liên kết thư viện tĩnh hay động, nhưng tôi sẽ tưởng tượng nó sẽ nhỏ hơn đáng kể so với mức tăng 30 MB.

Một tùy chọn khác là không bao gồm toàn bộ gói ImageMagick. Bạn có thể tải xuống tệp ImageMagick Zip (chỉ có 13 MB BTW) và chỉ trích xuất convertcông cụ và phụ thuộc của nó và phân phối tệp đó cho máy ảo của bạn. Có một công cụ gọi là Dependency Walker mà bạn có thể sử dụng để xác định các phụ thuộc của convertcông cụ là gì.


1

Sử dụng -sizecờ trong NetPBM pnmtopng chương trình. Các đơn vị được sử dụng là pixel trên mét. Ví dụ sau sẽ đặt newfile.png thành 300dpi.

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

0

Chà, bạn có khả năng có thể sử dụng một kịch bản 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")

Nguồn .


Trình cài đặt Python 3.3.2 (không bao gồm mã nguồn) là 19,3 MB và trình cài đặt Python 2.7.5 là 15,5 MB.
vẽ Chapin

5
Điều đó sẽ thay đổi kích thước hình ảnh, không thay đổi DPI.
Bobby

0

Dòng lệnh "convert" Image Magick thích hợp cho việc này sẽ là sử dụng đối số -resample:

convert image.png -resample 150x150 -units pixelsperinch ../ImagesAdjusted/image.png
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.