Larutan
Saya menggunakan kode sumber lisp/image-mode.el
untuk menulis ini. Memanggil fungsi ini dalam buffer gambar apa pun akan mengubah ukurannya agar sesuai dengan lebar atau tinggi tergantung pada gambar dan rasio tinggi / lebar jendela.
Anda perlu 2 hal ini agar fungsi ini berfungsi:
- Emacs Anda harus sudah dikompilasi dengan Imagemagick .
- Secara default
libjpeg
loader digunakan untuk menangani jpg
gambar. Retasan yang ditunjukkan di bagian selanjutnya dari jawaban ini digunakan untuk memaksa emacs untuk menggunakan imagemagick
loader.
(defun modi / image-transform-fit-to-window ()
"Ubah ukuran gambar agar sesuai dengan lebar atau tinggi berdasarkan rasio gambar dan jendela.
Diperlukan Imagemagick untuk menjalankan fungsi ini. "
(interaktif)
(biarkan * ((ukuran img (ukuran gambar tampilan (properti gambar dapatkan)))))
(lebar img (ukuran img mobil))
(img-height (cdr img-size))
(rasio img-h / w (/ (float img-height) (float img-width)))
(win-width (- (nth 2 (window-inside-pixel-edge))
(nth 0 (window-inside-pixel-edge)))))
(win-height (- (nth 3 (window-inside-pixel-edge))
(nth 1 (window-inside-pixel-edge)))))
(win-h / w-ratio (/ (float win-height) (float win-width)))))
;; Paskan gambar dengan lebar jika rasio h / w jendela> rasio h / w dari gambar
(jika (> win-h / w-rasio img-h / w-rasio)
(image-transform-fit-to-width)
;; Lain lagi dengan tinggi badan
(gambar-transform-pas-ke-tinggi))))
Retas untuk memaksa emacs digunakan imagemagick
untuk memuat gambar
Setelah mengikuti laporan bug emacs #18797
, #10746
dan #10112
, solusi berikut berfungsi untuk memaksa Imagemagick memuat gambar; letakkan di suatu tempat di Anda init.el
:
Saya telah memaksa emacs untuk digunakan imagemagick
hanya untuk gambar file akrab bagi saya: png
, tiff
, jpg/jpeg
dan svg
; sisanya disimpan sebagai default. Saya telah memilih untuk mengizinkan gif
file dibuka oleh loader default karena emacs 24.4 telah meningkatkan dukungan untuk melihat gambar multi-bingkai. Seluruh regexp diambil dari 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
))
Kekurangan
- Jenis gambar yang dipilih untuk dimuat
imagemagick
tidak akan tampil sebagai gambar sebaris di org-mode
.
Referensi
eimp
memodifikasi file. Ini tidak berfungsi pada gambar hanya baca.