이미지 모드에서 이미지 축소 / 확대 / 축소


20

Emacs의 doc-view-mode를 사용하면 PDF를 쉽게 축소 / 확대 / 축소 할 수 있지만 이미지로 동일한 작업을 수행하고 싶습니다. 현재 이미지를 열면 확대 / 축소 수준을 프레임에 맞게 조정할 수 없습니다. 나는 거기 알고 image-mode-fit-frame이미지가 내 화면보다 큰 경우, 그러나, 그것은 도움이되지 않습니다.

이미지를 확대 및 축소 할 수있는 패키지 또는 모드가 있습니까?

답변:


15

이러한 기능은 패키지에 의해 제공됩니다.

  • image-dired-thumbnail-mode

    썸네일 버퍼에 점이 있으면 RET( image-dired-display-thumbnail-original-image)를 입력하여 크기가 다른 버전을 다른 창에 표시 할 수 있습니다 . 창 크기에 맞게 이미지 크기를 조정합니다.

    ImageMagick의 convert명령을 사용합니다 .

    image-dired-external-viewer문제를 방지하고와 같은 외부 이미지 뷰어에 이미지를 표시 하는 데 사용할 수도 있습니다 feh.

  • eimp

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

    mogrifyImageMagick 의 유틸리티를 사용하여 실제 변환을 수행합니다.

    (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-또한 제공해야하는 ImageMagick 패키지를 사용합니다 mogrify.

    전체 명령 목록 :

    • eiv-fit-image-to-window- 현재 창 크기로 이미지 크기를 조정합니다.
    • eiv-rotate-current-image -현재 이미지를 90도 회전시킵니다.
    • eiv-dec-or-inc-image -현재 창 크기로 이미지 크기를 조정합니다.
    • eiv-diaporama -나무에서 디아 포 라마를 시작하십시오.
    • eiv-viewer- emacs-image-viewer. dir과 subdir의 트리를 탐색 할 수 있습니다.

5
eimp파일 을 수정 한다는 점에 유의해야 합니다. 읽기 전용 이미지에서는 작동하지 않습니다.
Kaushal Modi

6

해결책

이것을 작성하기 위해 소스 코드를 사용 lisp/image-mode.el했습니다. 이미지 버퍼에서이 함수를 호출하면 이미지와 창 높이 / 폭 비율에 따라 너비 나 높이에 맞게 크기가 조정됩니다.

이 기능이 작동하려면 다음 두 가지가 필요합니다.

  • emacs는 Imagemagick 으로 컴파일해야합니다 .
  • 기본적으로 libjpeg로더는 jpg이미지 를 처리하는 데 사용됩니다 . 이 답변의 다음 부분에 표시된 핵은 emacs가 imagemagick로더 를 사용하도록 강제하는 데 사용됩니다 .
(defun modi / image-transform-fit-to-window ())
  "이미지와 창 비율에 따라 너비 나 높이에 맞게 이미지 크기를 조정하십시오.
이 기능을 실행하려면 Imagemagick이 필요합니다. "
  (대화식)
  (let * ((img-size (이미지 표시 크기 (image-get-display-property) t))
          (img- 폭 (car img- 크기))
          (img- 높이 (cdr img- 크기))
          (img-h / w- 비 (/ (float img-height)) (float img-width))
          (가로 폭 (-(nth 2 (창 안쪽 픽셀 가장자리)))
                        (n 번째 0 (창 안쪽 픽셀 가장자리))))
          (win-height (-(n 번째 3 (윈도우 내부 픽셀 가장자리)))
                         (n 번째 1 (내부 픽셀 가장자리))))
          (win-h / w-ratio (/ (float win-height) (float win-width))))
    ;; 창의 가로 / 세로 비율이 이미지의 가로 / 세로 비율보다 크면 이미지를 너비에 맞 춥니 다.
    (경우 (> win-h / w-ratio img-h / w-ratio)
        (폭에 이미지 변환 적합)
      ;; 다른 신장에 맞게
      (이미지 변환 적합 높이))))

emacs가 imagemagick이미지 로딩 에 사용하도록 강요

이맥스의 버그 리포트를 통해 다음과 같은 후 #18797, #10746그리고 #10112, 다음과 같은 솔루션은 이미지로드에있는 Imagemagick 강제 근무; 당신의 어딘가에 넣으십시오 init.el:

내가 사용하는 이맥스를 강제 imagemagick나에게 익숙한 파일에만 이미지 : png, tiff, jpg/jpegsvg; 나머지는 기본값으로 유지됩니다. gifemacs 24.4가 멀티 프레임 이미지보기에 대한 지원을 향상 시켰기 때문에 기본 로더가 파일을 열 도록 허용했습니다 . 전체 정규 표현식은에서 가져옵니다 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.

참고 문헌


1

image-transform-set-scale당신이 찾고있는 것일 수 있습니다. 그러나 Imagemack 지원으로 Emacs를 컴파일해야합니다.

A는 주석도 있습니다 image-transform-mode에서 image-mode.el라고 표시된 "아직 구현되지 않았습니다."


Does Emacs use imagemagick? yes실행할 때 참조하십시오 ./configure. 그래서 그것은 imagemagick으로 컴파일되었습니다. 스틸 이미지 변환이 작동하지 않습니다. (emacs 24.4 x86_64-unknown-linux-gnu에서) 나는 또한 다음과 같은 것을 가지고 있습니다 config.log: | #define HAVE_IMAGEMAGICK 1 | #define HAVE_MAGICKEXPORTIMAGEPIXELS 1 | #define HAVE_MAGICKMERGEIMAGELAYERS 1.
Kaushal Modi

0

다음은 텍스트 배율, Cx C- = 및 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)
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.