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,
libjpeg
trình tải được sử dụng để xử lý jpg
hì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 imagemagick
trì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
, #10746
và #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 imagemagick
chỉ cho hình ảnh tập tin quen thuộc với tôi: png
, tiff
, jpg/jpeg
và svg
; phần còn lại được giữ như mặc định. Tôi đã chọn cho phép gif
cá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
imagemagick
sẽ 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
eimp
sửa đổi các tập tin. Nó không hoạt động trên các hình ảnh chỉ đọc.