- (let-optional
- rest ((resolution 90)
- (paper-size "a4")
- (rename-page-1? #f)
- (verbose? #f))
- (let* ((base (basename (re-sub "[.]e?ps" "" ps-name)))
- (header (gulp-port (open-file ps-name "r") 10240))
- (png1 (string-append base ".png"))
- (pngn (string-append base "-page%d.png"))
- (pngn-re (re-sub "%d" "[0-9]*" pngn))
- (multi-page? (and (string-match "\n%%Pages: " header)
- (not (string-match "\n%%Pages: 1\n" header))))
- (output-file (if multi-page? pngn png1))
- ;;png16m is because Lily produces color nowadays.
- (cmd (format #f (if multi-page?
- "gs\
- -dEPSCrop\
+ (let-keywords*
+ rest #f
+ ((resolution 90)
+ (page-width 100)
+ (page-height 100)
+ (rename-page-1 #f)
+ (be-verbose (ly:get-option 'verbose))
+ (pixmap-format 'png16m)
+ (anti-alias-factor 1))
+
+ (let* ((format-str (format #f "~a" pixmap-format))
+ (extension (cond
+ ((string-contains format-str "png") "png")
+ ((string-contains format-str "jpg") "jpeg")
+ ((string-contains format-str "jpeg") "jpeg")
+ (else
+ (ly:error "Unknown pixmap format ~a" pixmap-format))))
+ (base (string-join
+ (string-split (dir-basename ps-name ".ps" ".eps") #\%)
+ "%%"))
+ (png1 (format #f "~a.~a" base extension))
+ (pngn (format #f "~a-page%d.~a" base extension))
+ (page-count (ps-page-count ps-name))
+ (multi-page? (> page-count 1))
+ (output-file (if multi-page? pngn png1))
+
+ (gs-variable-options
+ (if (string-suffix-ci? ".eps" ps-name)
+ "-dEPSCrop"
+ (format #f "-dDEVICEWIDTHPOINTS=~,2f -dDEVICEHEIGHTPOINTS=~,2f"
+ page-width page-height)))
+ (cmd (ly:format "~a\
+ ~a\
+ ~a\