101 lines
2.9 KiB
EmacsLisp
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
|