sharkey-el/img-strips.el

101 lines
2.9 KiB
EmacsLisp

;; cut an image into wafer thin strips and display one per line. this streamlines box renderers.
(setq jaypeg "~/.local/share/backgrounds/mojave.jpg")
(setq img-strips-cache-dir "~/.cache/img-strips/")
;; https://dev.to/ko31/using-imagemagick-to-easily-split-an-image-file-13hb
(defun img-strip-slice (file lines)
"Use background ImageMagick to cut FILE into strips. LINES is how many.
Return the output path."
(let* ((height-% (/ 100 lines))
(file-title (file-name-base file))
(cache-dir (expand-file-name file-title img-strips-cache-dir)))
(make-directory cache-dir 'p)
(shell-command
(format "convert -crop 100%%x%s%% %s %s/img-strip.png"
height-%
file
cache-dir
))
cache-dir
))
(img-strip-slice "~/rena.webp" 5)
(img-strip-slice "~/.face" 4)
"
%%rena/img-strip-0%%
%%rena/img-strip-1%%
%%rena/img-strip-2%%
%%rena/img-strip-3%%
%%rena/img-strip-4%%
"
"
%%.face/img-strip-0%%
%%.face/img-strip-1%%
%%.face/img-strip-2%%
%%.face/img-strip-3%%
"
(defun img-strip-cache-from-placeholder (placeholder)
;; ;; doesn't find img-strip-0
;; (remove 0 (mapcar #'string-to-number
;; (split-string placeholder (rx (or "%" "-")) 'omit)))
(format "%s/%s.png"
img-strips-cache-dir
(string-trim placeholder "%%" "%%")))
;; (img-strip-cache-from-placeholder "%%rena/img-strip-1%%")
(defvar img-strip-placeholder-rx (rx (group-n 1 "%%" (+ (or alnum ".")) "/img-strip-" num "%%")))
(defun next-img-strip-overlay (&optional limit)
"like `next-emoji-overlay' but for img-strips."
(while (re-search-forward img-strip-placeholder-rx limit t)
(let* ((beg (match-beginning 0))
(end (match-end 0))
(placeholder (match-string 1))
(cache (img-strip-cache-from-placeholder placeholder)))
(unless (mir/overlay-already-at-p beg end)
(if cache
(let ((img (create-image cache
'png
nil
:height (window-font-height)
:ascent 'center))
(ov (make-overlay beg end)))
(overlay-put ov 'display img)
(overlay-put ov 'org-image-overlay t)
(overlay-put ov 'modification-hooks
(list 'org-display-inline-remove-overlay))))))))
;; thank you zyd
(defun number-in-string2 (s)
(let ((numbers [?0 ?1 ?2 ?3 ?4 ?5 ?6 ?7 ?8 ?9])
)
(cl-position-if
(lambda (x)
(seq-contains-p numbers x))
s)))
;; (number-in-string2 "file12.mp0")
(defun insert-img-as-strips (image lines)
"Render IMAGE as strips. How many? LINES number of strips."
(interactive "fInsert image: \nnNumber of lines: ")
(let ((name (file-name-base image)))
(img-strip-slice image lines)
(--map (insert (format "%%%%%s/img-strip-%s%%%%\n" name it))
(number-sequence 0 (- lines 1)))))
"
%%mojave/img-strip-0%%
%%mojave/img-strip-1%%
%%mojave/img-strip-2%%
%%mojave/img-strip-3%%
%%mojave/img-strip-4%%
%%mojave/img-strip-5%%
%%mojave/img-strip-6%%
%%mojave/img-strip-7%%
%%mojave/img-strip-8%%
"
;;; img-strips.el ends here