Fix external image conversion on MS-Windows

* lisp/image/image-converter.el (image-converter--convert-magick)
(image-converter--convert): Force encoding/decoding to avoid any
text or EOL conversions, since we are reading/writing binary
data.  (Bug#56317)
This commit is contained in:
Eli Zaretskii 2022-06-30 13:50:34 +03:00
parent 6f22631a63
commit f5421104e9

View file

@ -227,19 +227,21 @@ Only suffixes that map to `image-mode' are returned."
(cadr (split-string (symbol-name image-format) "/"))))
(defun image-converter--convert-magick (type source image-format)
(let ((command (image-converter--value type :command)))
(let ((command (image-converter--value type :command))
(coding-system-for-read 'no-conversion))
(unless (zerop (if image-format
;; We have the image data in SOURCE.
(progn
(insert source)
(apply #'call-process-region (point-min) (point-max)
(car command) t t nil
(append
(cdr command)
(list (format "%s:-"
(image-converter--mime-type
image-format))
"png:-"))))
(let ((coding-system-for-write 'no-conversion))
(apply #'call-process-region (point-min) (point-max)
(car command) t t nil
(append
(cdr command)
(list (format "%s:-"
(image-converter--mime-type
image-format))
"png:-")))))
;; SOURCE is a file name.
(apply #'call-process (car command)
nil t nil
@ -252,18 +254,20 @@ Only suffixes that map to `image-mode' are returned."
(cl-defmethod image-converter--convert ((type (eql 'ffmpeg)) source
image-format)
"Convert using ffmpeg."
(let ((command (image-converter--value type :command)))
(let ((command (image-converter--value type :command))
(coding-system-for-read 'no-conversion))
(unless (zerop (if image-format
(progn
(insert source)
(apply #'call-process-region
(point-min) (point-max) (car command)
t '(t nil) nil
(append
(cdr command)
(list "-i" "-"
"-c:v" "png"
"-f" "image2pipe" "-"))))
(let ((coding-system-for-write 'no-conversion))
(apply #'call-process-region
(point-min) (point-max) (car command)
t '(t nil) nil
(append
(cdr command)
(list "-i" "-"
"-c:v" "png"
"-f" "image2pipe" "-")))))
(apply #'call-process
(car command)
nil '(t nil) nil