วิธีการแก้
ฉันใช้ซอร์สโค้ดlisp/image-mode.el
เพื่อเขียนสิ่งนี้ การเรียกใช้ฟังก์ชันนี้ในบัฟเฟอร์รูปภาพใด ๆ จะปรับขนาดให้พอดีกับความกว้างหรือความสูงขึ้นอยู่กับอัตราส่วนภาพและอัตราส่วนความสูง / ความกว้างของหน้าต่าง
คุณต้องการ 2 สิ่งเหล่านี้เพื่อให้ฟังก์ชันนี้ทำงาน:
- ความต้องการ emacs ของคุณจะได้รับการรวบรวมกับImageMagick
- โดยตัว
libjpeg
โหลดเริ่มต้นจะใช้ในการจัดการjpg
ภาพ แฮ็คที่แสดงในส่วนถัดไปของคำตอบนี้ใช้บังคับให้ emac ใช้ตัวimagemagick
โหลด
(กำหนดค่า modi / image-transform-fit-to-window ()
"ปรับขนาดภาพให้พอดีกับความกว้างหรือความสูงตามอัตราส่วนภาพและหน้าต่าง
ต้องใช้ Imagemagick เพื่อเรียกใช้ฟังก์ชันนี้ "
(เชิงโต้ตอบ)
(ให้ * ((ขนาด img (ขนาดหน้าจอแสดงผล (คุณสมบัติรูปแบบรับภาพแสดง)))
(ความกว้าง img (ขนาดรถ img))
(img-height (cdr img- ขนาด))
(img-h / w- อัตราส่วน (/ (ลอยสูง img-) (ลอยตัวกว้าง img))
(win-width (- (nth 2 (ขอบหน้าต่างด้านในพิกเซล))
(nth 0 (ขอบหน้าต่างด้านในพิกเซล)))
(win-height) - ((ลำดับที่ 3 (ขอบหน้าต่างด้านในพิกเซล))
(nth 1 (ขอบหน้าต่างด้านในพิกเซล)))
(win-h / w-ratio (/ (float win-height) (float win-width)))
;; ปรับภาพให้พอดีกับความกว้างหากอัตราส่วน h / w ของหน้าต่างคืออัตราส่วน> h / w ของภาพ
(ถ้า (>> อัตราส่วนของ win-h / w img-h / w-ratio)
(ภาพเปลี่ยนพอดีไปกว้าง)
;; อื่นตามความสูง
(ภาพเปลี่ยนพอดีไปสูง))))
แฮ็คเพื่อบังคับให้ emac ใช้imagemagick
ในการโหลดรูปภาพ
หลังจากทำตามรายงาน emacs ข้อผิดพลาด#18797
, #10746
และ#10112
การแก้ปัญหาต่อไปนี้ทำงานสำหรับการบังคับให้ ImageMagick เพื่อโหลดภาพ; ใส่ไว้ในที่ของคุณinit.el
:
ผมได้บังคับ emacs กับการใช้imagemagick
เฉพาะสำหรับภาพไฟล์ที่คุ้นเคยกับฉัน: png
, tiff
, jpg/jpeg
และsvg
; ส่วนที่เหลือจะถูกเก็บไว้เป็นค่าเริ่มต้น ฉันเลือกที่จะอนุญาตให้gif
เปิดไฟล์โดยโหลดเดอร์เริ่มต้นเนื่องจาก emacs 24.4 ได้รับการปรับปรุงเพื่อรองรับการดูภาพหลายเฟรม regexp 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
))
ข้อเสียเปรียบ
- ประเภทภาพที่เลือกที่จะโหลดโดยจะไม่แสดงขึ้นเป็นภาพอินไลน์ใน
imagemagick
org-mode
อ้างอิง
eimp
ปรับเปลี่ยนไฟล์ มันไม่ทำงานบนภาพแบบอ่านอย่างเดียว