Thu nhỏ / Thu phóng / Chia tỷ lệ hình ảnh ở chế độ hình ảnh


20

Tuy nhiên, với chế độ xem tài liệu của Emacs, tôi có thể dễ dàng thu nhỏ / thu phóng / vv các tệp PDF, tuy nhiên, tôi muốn có thể làm điều tương tự với hình ảnh. Hiện tại khi tôi mở một hình ảnh, tôi không thể điều chỉnh mức thu phóng cho vừa với khung hình. Tôi biết có image-mode-fit-frame, tuy nhiên, nó không giúp ích gì khi hình ảnh lớn hơn màn hình của tôi.

Có gói hoặc chế độ nào cho phép tôi phóng to và thu nhỏ hình ảnh không?

Câu trả lời:


15

Chức năng này được chứng minh bằng các gói:

  • image-dired-thumbnail-mode

    Với điểm trong bộ đệm hình thu nhỏ, bạn có thể nhập RET( image-dired-display-thumbnail-original-image) để hiển thị phiên bản có kích thước của nó trong một cửa sổ khác. Điều này kích thước hình ảnh để phù hợp với cửa sổ.

    Nó sử dụng convertlệnh của ImageMagick .

    Bạn cũng có thể sử dụng image-dired-external-viewerđể tránh sự cố và hiển thị hình ảnh của mình trong trình xem hình ảnh bên ngoài, chẳng hạn như feh.

  • eimp

    (add-hook 'image-mode-hook 'eimp-mode)
    

    Nó sử dụng mogrifytiện ích từ ImageMagick để thực hiện các biến đổi thực tế.

    (kbd "+") 'eimp-increase-image-size
    (kbd "-") 'eimp-decrease-image-size
    (kbd "<") 'eimp-rotate-image-anticlockwise
    (kbd ">") 'eimp-rotate-image-clockwise
    (kbd "B +") 'eimp-blur-image
    (kbd "B -") 'eimp-sharpen-image
    (kbd "B E") 'eimp-emboss-image
    (kbd "B G") 'eimp-gaussian-blur-image
    (kbd "B R") 'eimp-radial-blur-image
    (kbd "C B +") 'eimp-increase-image-brightness
    (kbd "C B -") 'eimp-decrease-image-brightness
    (kbd "C C +") 'eimp-increase-image-contrast
    (kbd "C C -") 'eimp-decrease-image-contrast
    (kbd "F ^") 'eimp-flip-image
    (kbd "F >") 'eimp-flop-image
    (kbd "F <") 'eimp-flop-image
    (kbd "N") 'eimp-negate-image
    
    ; Commands most relevant to you:
    (kbd "S f") 'eimp-fit-image-to-window
    (kbd "S h") 'eimp-fit-image-height-to-window
    (kbd "S w") 'eimp-fit-image-width-to-window
    
    (kbd "<right>") 'eimp-roll-image-right
    (kbd "<left>") 'eimp-roll-image-left
    (kbd "<up>") 'eimp-roll-image-up
    (kbd "<down>") 'eimp-roll-image-down
    (kbd "<down-mouse-1>") 'eimp-mouse-resize-image
    (kbd "<S-down-mouse-1>") 'eimp-mouse-resize-image-preserve-aspect
    (kbd "C-c C-k") 'eimp-stop-all
    
  • eiv- Nó cũng sử dụng gói ImageMagick sẽ cung cấp mogrify.

    Danh sách lệnh đầy đủ:

    • eiv-fit-image-to-window- Thay đổi kích thước hình ảnh theo kích thước cửa sổ hiện tại.
    • eiv-rotate-current-image - Xoay hình ảnh hiện tại ở 90 độ.
    • eiv-dec-or-inc-image - Thay đổi kích thước hình ảnh theo kích thước cửa sổ hiện tại.
    • eiv-diaporama - Bắt đầu một diaporama trên cây.
    • eiv-viewer- Cái emacs-image-viewer. Cho phép điều hướng trong một cây dir và subir.

5
Một lưu ý rằng eimpsửa đổi các tập tin. Nó không hoạt động trên các hình ảnh chỉ đọc.
Kaushal Modi

6

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, #10746#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/jpegsvg; 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


1

image-transform-set-scalecó thể là những gì bạn đang tìm kiếm. Tuy nhiên, nó đòi hỏi Emacs phải được biên dịch với sự hỗ trợ của Imagemagick.

Ngoài ra còn có một nhận xét image-transform-modetrong image-mode.elnhãn "Chưa được thực hiện."


Tôi thấy Does Emacs use imagemagick? yeskhi chạy ./configure. Vì vậy, nó đã biên dịch với fantemagick. Biến đổi hình ảnh tĩnh không làm việc cho tôi. (Trên emacs 24.4 x86_64-unknown-linux-gnu) Tôi cũng có các mục sau config.log: | #define HAVE_IMAGEMAGICK 1 | #define HAVE_MAGICKEXPORTIMAGEPIXELS 1 | #define HAVE_MAGICKMERGEIMAGELAYERS 1.
Kaushal Modi

0

Đây là một giải pháp cho phép bạn tăng tỷ lệ lên xuống bằng các phím giống như được sử dụng để chia tỷ lệ văn bản, Cx C- = và Cx C--

(defun scale-image ()
  "Scale the image by the same factor specified by the text scaling."
  (image-transform-set-scale
   (expt text-scale-mode-step
         text-scale-mode-amount)))

(defun scale-image-register-hook ()
  "Register the image scaling hook."
  (add-hook 'text-scale-mode-hook 'scale-image))

(add-hook 'image-mode-hook 'scale-image-register-hook)
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.