diff options
author | Arun Isaac | 2019-08-20 23:17:35 +0530 |
---|---|---|
committer | Arun Isaac | 2019-08-20 23:17:35 +0530 |
commit | 24cba52bfe4e92d2e7082f28d9ae7fe788ef2701 (patch) | |
tree | 18d0322c23c942f74cd4aa2ccd43b8bb481f0c8b /ennu-image.el | |
download | ennum-24cba52bfe4e92d2e7082f28d9ae7fe788ef2701.tar.gz ennum-24cba52bfe4e92d2e7082f28d9ae7fe788ef2701.tar.lz ennum-24cba52bfe4e92d2e7082f28d9ae7fe788ef2701.zip |
Initial commit
Diffstat (limited to 'ennu-image.el')
-rw-r--r-- | ennu-image.el | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/ennu-image.el b/ennu-image.el new file mode 100644 index 0000000..34c3e7e --- /dev/null +++ b/ennu-image.el @@ -0,0 +1,55 @@ +;; -*- lexical-binding: t -*- + +(require 'image) +(require 'seq) + +;; Check if all necessary image types are supported +(seq-do (lambda (image-type) + (unless (image-type-available-p image-type) + (lwarn '(ennu) :error "`%s' image type not supported" image-type))) + '(jpeg png svg)) + +;; Check for existence of external image processing utilities +(seq-do (lambda (external-program) + (unless (executable-find external-program) + (lwarn '(ennu) :error "`%s' not found" external-program))) + '("convert" "identify" "jpegtran" "optipng")) + +(defun ennu-image-resize-image (infile-path outfile-path width) + "A simple shell wrapper around ImageMagick's convert" + (ennu-image--assert-file-exists infile-path) + (cl-case (image-type infile-path) + (svg + (copy-file infile-path outfile-path t)) + (otherwise + (call-process "convert" nil nil nil + infile-path "-resize" (format "%d>" width) outfile-path))) + outfile-path) + +(defun ennu-image-optimize-image (image-path) + "A simple shell wrapper around jpegtran and optipng" + (ennu-image--assert-file-exists image-path) + (cl-case (image-type image-path) + (jpeg + (call-process "jpegtran" nil nil nil "-optimize" + "-progressive" "-copy" "none" + "-outfile" image-path image-path)) + (png + (call-process "optipng" nil nil nil image-path))) + image-path) + +(defun ennu-image-get-width (image-path) + (ennu-image--assert-file-exists image-path) + (cl-case (image-type image-path) + (svg 1e+INF) + (otherwise + (with-temp-buffer + (call-process "identify" nil t nil + "-format" "%w" image-path) + (string-to-number (buffer-string)))))) + +(defun ennu-image--assert-file-exists (path) + (unless (file-exists-p path) + (error "File %s does not exist" path))) + +(provide 'ennu-image) |