about summary refs log tree commit diff
path: root/ennum-image.el
diff options
context:
space:
mode:
authorArun Isaac2020-07-18 05:46:59 +0530
committerArun Isaac2020-07-18 05:46:59 +0530
commit9b53537b89d83fd7ade6a8707bb932d46564519a (patch)
treea8b2e688a14d635df1c8817a232250f26b1af082 /ennum-image.el
parent3f3b55cdff2310f519e4cbc41b23d68e2e4d3f17 (diff)
downloadennum-9b53537b89d83fd7ade6a8707bb932d46564519a.tar.gz
ennum-9b53537b89d83fd7ade6a8707bb932d46564519a.tar.lz
ennum-9b53537b89d83fd7ade6a8707bb932d46564519a.zip
Rename ennu to ennum.
* ennu.el: Rename to ...
* ennum.el: ... this. Replace all instances of ennu with ennum.
* ennu-html.el: Rename to ...
* ennum-html.el: ... this. Replace all instances of ennu with ennum.
* ennu-image.el: Rename to ...
* ennum-image.el: ... this. Replace all instances of ennu with ennum.
Diffstat (limited to 'ennum-image.el')
-rw-r--r--ennum-image.el55
1 files changed, 55 insertions, 0 deletions
diff --git a/ennum-image.el b/ennum-image.el
new file mode 100644
index 0000000..3a8aa23
--- /dev/null
+++ b/ennum-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 '(ennum) :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 '(ennum) :error "`%s' not found" external-program)))
+        '("convert" "identify" "jpegtran" "optipng"))
+
+(defun ennum-image-resize-image (infile-path outfile-path width)
+  "A simple shell wrapper around ImageMagick's convert"
+  (ennum-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 ennum-image-optimize-image (image-path)
+  "A simple shell wrapper around jpegtran and optipng"
+  (ennum-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 ennum-image-get-width (image-path)
+  (ennum-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 ennum-image--assert-file-exists (path)
+  (unless (file-exists-p path)
+    (error "File %s does not exist" path)))
+
+(provide 'ennum-image)