Yêu cầu phần mềm
Các gói phần mềm sau đây có sẵn cho cả hệ thống Windows và Linux và được yêu cầu cho một giải pháp hoàn chỉnh, hoạt động:
- gvim - Được sử dụng để xuất cú pháp tô sáng mã nguồn sang HTML.
- moria - Bảng màu để tô sáng cú pháp.
- wkhtmltoimage - Được sử dụng để chuyển đổi tài liệu HTML thành tệp PNG.
- gawk và sed - Công cụ xử lý văn bản.
- ImageMagick - Được sử dụng để cắt PNG và thêm đường viền.
Các bước chung
Đây là cách giải pháp hoạt động:
- Tải mã nguồn vào một trình soạn thảo có thể thêm các mảng màu.
- Xuất mã nguồn dưới dạng tài liệu HTML (có
FONT
thẻ nhúng ).
- Tách thuộc tính nền từ tài liệu HTML (để cho phép độ trong suốt).
- Chuyển đổi tài liệu HTML thành tệp PNG.
- Cắt đường viền PNG.
- Thêm một đường viền nhỏ, 25 pixel xung quanh hình ảnh.
- Xóa các tập tin tạm thời.
Kịch bản tạo các hình ảnh có cùng chiều rộng cho các tệp nguồn chứa các dòng có độ dài dưới 80 ký tự. Các tệp nguồn có dòng dài hơn 80 ký tự dẫn đến hình ảnh càng rộng càng cần thiết để giữ lại toàn bộ dòng.
Cài đặt
Cài đặt các thành phần vào các vị trí sau:
- gvim -
C:\Program Files\Vim
- moria -
C:\Program Files\Vim\vim73\colors
- wkhtmltoimage -
C:\Program Files\wkhtml
- ImageMagick -
C:\Program Files\ImageMagick
- Gawk và Sed -
C:\Program Files\GnuWin32
Lưu ý: ImageMagick có một chương trình được gọi convert.exe
, không thể thay thế convert
lệnh Windows . Do đó, đường dẫn đầy đủ convert.exe
phải được mã hóa cứng trong tệp bó (trái ngược với việc thêm ImageMagick vào PATH
).
Biến môi trường
Đặt biến môi trường PATH thành:
"C:\Program Files\Vim\vim73";"C:\Program Files\wkhtml";"C:\Program Files\GnuWin32\bin"
Tập tin hàng loạt
Chạy nó bằng cách sử dụng:
src2png.bat src2png.bat
Tạo một tệp bó được gọi src2png.bat
bằng cách sao chép các nội dung sau:
@ECHO OFF
SET NUMBERS=-c "set number"
IF "%2" == "" SET NUMBERS=
ECHO Converting %1 to %1.html...
gvim -e %1 -c "set nobackup" %NUMBERS% -c ":colorscheme moria" ^
-c :TOhtml -c wq -c :q
REM Remove all background-color occurrences (without being self-referential)
sed -i "s/background-color: #......; \(.*\)}$/\1 }/g" %1.html
ECHO Converting %1.html to %1.png...
wkhtmltoimage --format png --transparent --minimum-font-size 80 ^
--quality 100 --width 3600 ^
%1.html %1.png
move %1.png %1.orig.png
REM If the text file has lines that exceed 80 characters, don't crop the
REM resulting image. (The book automatically shrinks large images to fit.)
REM The 3950 is the 80 point font at 80 characters with padding for line
REM numbers.
SET LENGTH=0
FOR /F %%l IN ('gawk ^
"BEGIN {x=0} {if( length($0)>x ) x=length()} END {print x;}" %1') ^
DO (
SET LENGTH=%%l
)
SET EXTENT=-extent 3950x
IF %LENGTH% GTR 80 SET EXTENT=
REM Trim the image height, then extend the width for 80 columns, if needed.
REM The result is that all images will be resized the same amount, thus
REM making the font size the same maximum for all source listings. Source
REM files beyond the 80 character limit will be scaled as necessary.
ECHO Trimming %1.png...
"C:\programs\ImageMagick\convert.exe" -format png %1.orig.png ^
-density 150x150 ^
-background none -antialias -trim +repage ^
%EXTENT% ^
-bordercolor none -border 25 ^
%1.png
ECHO Removing old files...
IF EXIST %1.orig.png DEL /q %1.orig.png
IF EXIST %1.html DEL /q %1.html
IF EXIST sed*. DEL /q sed*.
Cải tiến và tối ưu hóa chào đón.
Lưu ý: Phiên bản mới nhất của wkhtmltoimage xử lý đúng cách ghi đè màu nền. Do đó, theo lý thuyết, dòng để loại bỏ CSS cho màu nền không còn cần thiết nữa.
wkhtmltoimage
và thiết lập độ rộng của trang không đủ? chiều cao không thể được chỉ định vì nó được xác định bởi nội dung của nội dung html. chiều rộng imho là tất cả những gì bạn thực sự cần, bạn có thể tính toán chiều rộng cần thiết dựa trên số lượng pixel trên mỗi inch bạn muốn.