Dung dịch
Tôi đã sử dụng mã nguồn lisp/image-mode.elđể viết lên. Gọi hàm này trong bất kỳ bộ đệm hình ảnh nào sẽ thay đổi kích thước của nó để phù hợp với chiều rộng hoặc chiều cao tùy thuộc vào tỷ lệ chiều cao / chiều rộng của hình ảnh và cửa sổ.
Bạn cần 2 điều này để chức năng này hoạt động:
- Emacs của bạn cần phải được biên dịch với Imagemagick .
- Theo mặc định,
libjpegtrình tải được sử dụng để xử lý jpghình ảnh. Bản hack được hiển thị trong phần tiếp theo của câu trả lời này được sử dụng để buộc các emacs sử dụng imagemagicktrình tải.
(defun modi / image-Transform-fit-to-window ()
"Thay đổi kích thước hình ảnh để phù hợp với chiều rộng hoặc chiều cao dựa trên tỷ lệ hình ảnh và cửa sổ.
Cần có hình ảnh để chạy chức năng này. "
(tương tác)
(hãy * ((kích thước img (kích thước hình ảnh hiển thị (hình ảnh-get-display-property) t))
(chiều rộng img (kích thước xe img))
(Chiều cao img (kích thước imgr))
(img-h / w-ratio (/ (float img-height) (float img-width)))
(win-width (- (nth 2 (window-Inside-pixel-edge))
(nth 0 (cửa sổ bên trong pixel-cạnh))))
(win-height (- (nth 3 (window-Inside-pixel-edge))
(nth 1 (cửa sổ bên trong pixel-cạnh))))
(tỷ lệ win-h / w (/ (float win-height) (float win-width))))
;; Điều chỉnh hình ảnh theo chiều rộng nếu tỷ lệ h / w của cửa sổ là tỷ lệ h / w của hình ảnh
(nếu (> win-h / w-ratio img-h / w-ratio)
(biến đổi hình ảnh phù hợp với chiều rộng)
;; Khác phù hợp với chiều cao
(biến đổi hình ảnh phù hợp với chiều cao))))
Hack để buộc emacs sử dụng imagemagickđể tải hình ảnh
Sau khi làm theo các báo cáo lỗi của emacs #18797, #10746và #10112, giải pháp sau đây đã hoạt động để buộc Imagemagick tải hình ảnh; đặt nó ở đâu đó trong init.el:
Tôi đã buộc emacs để sử dụng imagemagickchỉ cho hình ảnh tập tin quen thuộc với tôi: png, tiff, jpg/jpegvà svg; phần còn lại được giữ như mặc định. Tôi đã chọn cho phép gifcác tệp được mở bởi trình tải mặc định vì emacs 24.4 đã hỗ trợ cải thiện để xem hình ảnh đa khung. Toàn bộ regrec được lấy từ lisp/image.el.
(setq image-type-header-regexps
`(
("\\`/[\t\n\r ]*\\*.*XPM.\\*/" . xpm)
("\\`P[1-6]\\\(?:\
\\(?:\\(?:#[^\r\n]*[\r\n]\\)?[[:space:]]\\)+\
\\(?:\\(?:#[^\r\n]*[\r\n]\\)?[0-9]\\)+\
\\)\\{2\\}" . pbm)
("\\`GIF8[79]a" . gif)
;; ("\\`\x89PNG\r\n\x1a\n" . png) ;; Uncomment this (and comment the below line) to enable inline png images in org-mode
("\\`\x89PNG\r\n\x1a\n" . imagemagick) ; png
("\\`[\t\n\r ]*#define \\([a-z0-9_]+\\)_width [0-9]+\n\
#define \\1_height [0-9]+\n\\(\
#define \\1_x_hot [0-9]+\n\
#define \\1_y_hot [0-9]+\n\\)?\
static \\(unsigned \\)?char \\1_bits" . xbm)
;; ("\\`\\(?:MM\0\\*\\|II\\*\0\\)" . tiff)
("\\`\\(?:MM\0\\*\\|II\\*\0\\)" . imagemagick) ; tiff
("\\`[\t\n\r ]*%!PS" . postscript)
;; ("\\`\xff\xd8" . jpeg) ;; Uncomment this (and comment the below line) to enable inline jpg images in org-mode
("\\`\xff\xd8" . imagemagick) ; jpeg
("\\`\377\330" . imagemagick) ; jpeg
(,(let* ((incomment-re "\\(?:[^-]\\|-[^-]\\)")
(comment-re (concat "\\(?:!--" incomment-re "*-->[ \t\r\n]*<\\)")))
(concat "\\(?:<\\?xml[ \t\r\n]+[^>]*>\\)?[ \t\r\n]*<"
comment-re "*"
"\\(?:!DOCTYPE[ \t\r\n]+[^>]*>[ \t\r\n]*<[ \t\r\n]*" comment-re "*\\)?"
"[Ss][Vv][Gg]"))
;; . svg) ;; Uncomment this (and comment the below line) to enable inline svg images in org-mode
. imagemagick) ; svg
))
Hạn chế
- Các loại hình ảnh được chọn để tải bởi
imagemagicksẽ không hiển thị dưới dạng hình ảnh nội tuyến org-mode.
Tài liệu tham khảo
eimpsửa đổi các tập tin. Nó không hoạt động trên các hình ảnh chỉ đọc.