summaryrefslogtreecommitdiff
path: root/ennu-image.el
diff options
context:
space:
mode:
Diffstat (limited to 'ennu-image.el')
-rw-r--r--ennu-image.el55
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)