]> git.donarmstrong.com Git - lilypond.git/blobdiff - scm/ps-to-png.scm
Add '-dcrop' option to ps and svg backends
[lilypond.git] / scm / ps-to-png.scm
index 0d1e174ed61b9825ed9ca80df633c769a355e393..d0f810fafbdf14370709f69911eb868770b85130 100644 (file)
        '("pnmtopng"))))
 
 (define (scale-down-image factor file)
-  (let* ((old (string-append file ".old"))
+  (let* ((port-tmp1 (make-tmpfile))
+         (tmp1-name (port-filename port-tmp1))
+         (port-tmp2 (make-tmpfile))
+         (tmp2-name (port-filename port-tmp2))
          ;; Netpbm commands (pngtopnm, pnmscale, pnmtopng)
          ;; outputs only standard output instead of a file.
          ;; So we need pipe and redirection.
          ;; However, ly:system can't handle them.
-         ;; Therefore, we use /bin/sh for handling them.
-         ;; FIXME: MinGW (except Cygwin) doesn't have /bin/sh.
+         ;; Therefore, we use ly:system-with-shell.
          (cmd
-          (list
-           "/bin/sh"
-           "-c"
-           (ly:format
-            "pngtopnm \"~a\" | pnmscale -reduce ~a | pnmtopng -compression 9 > \"~a\""
-            old factor file))))
-
-    (rename-file file old)
-    (ly:system cmd)
-    (delete-file old)))
+          (ly:format
+           "~a \"~a\" | ~a -reduce ~a | ~a -compression 9 > \"~a\""
+           (search-pngtopam) tmp1-name
+           (search-pamscale) factor
+           (search-pnmtopng)
+           tmp2-name)))
+
+    (close-port port-tmp1)
+    (close-port port-tmp2)
+    (ly:debug (_ "Copying `~a' to `~a'...") file tmp1-name)
+    (copy-binary-file file tmp1-name)
+    (ly:system-with-shell cmd)
+    (ly:debug (_ "Copying `~a' to `~a'...") tmp2-name file)
+    (copy-binary-file tmp2-name file)
+    (ly:debug (_ "Deleting `~a'...") tmp1-name)
+    (delete-file tmp1-name)
+    (ly:debug (_ "Deleting `~a'...") tmp2-name)
+    (delete-file tmp2-name)))
 
 (define-public (ps-page-count ps-name)
   (let* ((byte-count 10240)
                     "-dNOPAUSE"
                     "-dBATCH"
                     (ly:format "-sDEVICE=~a" pixmap-format)
+                    "-dAutoRotatePages=/None"
                     (string-append "-sOutputFile=" output-file)
                     (ly:format "-r~a" (* anti-alias-factor resolution))
                     (string-append "-f" tmp-name))))