Tôi thấy -annotate
toán tử của ImageMagick tiện lợi hơn một chút so với -draw
phương thức garethTheRed đề xuất, vì lý do đơn giản là nó không yêu cầu sửa đổi tệp đầu vào. Nó không mạnh bằng -draw
, nhưng để bán buôn nội dung của tệp văn bản thành hình ảnh thì nó phục vụ rất tốt.
convert -size 360x360 xc:white -font "FreeMono" -pointsize 12 -fill black \
-annotate +15+15 "@ascii.txt" image.png
sẽ xuất ra một phiên bản kết xuất của nội dung tệp đã cho, nhưng không phải sửa đổi tệp "ascii.txt" của bạn để chứa text 15x15
phần -draw
nguyên thủy.
Chỉ định đối số
Đối số -font
có thể là bất kỳ tên phông chữ được hỗ trợ nào, nếu FreeMono không có sẵn (hoặc đơn giản là không mong muốn). Có thể lấy danh sách các phông chữ có sẵn cho bất kỳ lệnh ImageMagick nào bằng cách sử dụng -list
toán tử, do đó convert -list font
sẽ hiển thị tất cả các đối số có thể có -font
.
Các đối số đến -annotate
(khoảng cách để dịch chuyển văn bản được hiển thị từ cạnh của khung vẽ) bao gồm các độ lệch pixel ngang và dọc (tương ứng). Giá trị bù đầu tiên (x-shift ngang) có thể là bất kỳ số nguyên dương nào, nhưng không cần lớn hơn một vài pixel. Thứ hai bù đắp (dọc y-shift) phải có ít nhất là tương đương với kích thước điểm của phông chữ được lựa chọn (các đối số cho -pointsize
), vì ImageMagick sẽ đặt cơ sở của phông chữ ở khoảng bù. Vì vậy, nếu bạn không dịch chuyển phông chữ xuống ít nhất pointsize
pixel, phần trên cùng của dòng đầu tiên sẽ bị cắt.
Tôi khuyên bạn nên đi qua ít nhất vài pixel, vì vậy nếu bạn đang sử dụng -pointsize 64
thì bạn nên ghép nối nó với một cái gì đó như -annotate +15+80
. (Không có lý do gì để tăng bù ngang với kích thước phông chữ lớn hơn, nó không có mối quan hệ với kích thước văn bản.)
Cần phải đoán kích thước cần thiết của hình ảnh đầu ra cũng có thể tẻ nhạt. Tôi thường chỉ chọn các giá trị quá mức, sau đó tận dụng lợi thế của ImageMagick -trim
và -border
để tự động kết quả. Lệnh sau:
convert -size 1000x2000 xc:white -font "FreeMono" -pointsize 12 -fill black \
-annotate +15+15 "@ascii.txt" -trim -bordercolor "#FFF" -border 10 +repage image.png
sẽ kết xuất thành một hộp 1000x2000, sau đó cắt bớt khoảng trắng thừa ngoại trừ đường viền 10 pixel trên toàn bộ văn bản. Các +repage
đồng ngăn chặn cuối rất PNG đầu ra được tạo ra với một hình ảnh bù đắp, mà nếu không sẽ gây ra GIMP để bật lên một hộp thoại trên tải hỏi liệu có nên áp dụng bù đắp.
(Rõ ràng, 1000x2000 là quá mức cho các tập tin văn bản nhỏ, và cho những người thân còn ít nhất theo chiều dọc có thể cần phải được tăng lên. Đó là đơn giản để đánh giá quá cao, tuy nhiên, như chi phí duy nhất được convert
tiêu thụ hơi nhiều CPU và bộ nhớ trong khi chế biến.)
Đầu vào tiền xử lý
Nếu tệp văn bản của bạn chưa được định dạng theo cách bạn cần để hiển thị nó (giả sử, nếu nó sử dụng các dòng rất dài) thì bạn có thể phải định dạng lại nó trước khi đưa nó vào convert
. ImageMagick sẽ không bao bọc văn bản, vì vậy mỗi dòng văn bản sẽ mở rộng toàn bộ chiều dài của nó theo chiều ngang. May mắn thay, có thể chạy tệp thông qua bất kỳ trình định dạng dòng lệnh nào bạn muốn, sau đó chuyển văn bản đã xử lý vào convert
thay vì đọc trực tiếp từ tệp:
fmt < ascii.txt | convert -size 1000x2000 xc:white -font "DejaVu-Sans-Condensed" \
-pointsize 24 -fill black -annotate +15+30 "@-" -trim -bordercolor "#FFF" \
-border 10 +repage image.png
Điều đó sẽ hiển thị nội dung của ascii.txt
DejaVu Sans Condensed 24 điểm, sau khi được xử lý bằng fmt
lệnh, trong chế độ hoạt động mặc định của nó sẽ định dạng lại đầu vào của nó bằng cách gói từ thành độ rộng 75 cột. (Trừ khi có các chuỗi dài liên tục dài hơn 75 ký tự, như URL, trong trường hợp đó, chúng sẽ mở rộng hơn.)
Khi fmt
đã định dạng lại văn bản, nó sẽ được chuyển đến convert
đó sẽ hiển thị fmt
đầu ra theo đường ống , giống như khi nó đang đọc tệp trực tiếp. (Chỉ định tên tệp -
là một tốc ký shell UNIX khá phổ biến cho "đọc từ đầu vào tiêu chuẩn, thay vì bất kỳ tệp đĩa được đặt tên nào" và các công cụ của ImageMagick tuân theo quy ước đó.)