Riduci / Ingrandisci / Ridimensiona le immagini in modalità immagine


20

Con la modalità di visualizzazione documenti di Emacs posso facilmente ridurre / ingrandire / ecc. PDF, tuttavia, vorrei poter fare la stessa cosa con le immagini. Attualmente quando apro un'immagine non riesco a regolare il livello di zoom per adattarlo alla cornice. So che c'è image-mode-fit-frame, tuttavia, non aiuta quando l'immagine è più grande del mio schermo.

Esiste un pacchetto o una modalità che mi permetterà di ingrandire e rimpicciolire un'immagine?

Risposte:


15

Tale funzionalità è dimostrata dai pacchetti:

  • image-dired-thumbnail-mode

    Con il punto nel buffer delle miniature, è possibile digitare RET( image-dired-display-thumbnail-original-image) per visualizzare una versione dimensionata di esso in un'altra finestra. Questo ridimensiona l'immagine per adattarla alla finestra.

    Usa il convertcomando di ImageMagick .

    È inoltre possibile utilizzare image-dired-external-viewerper evitare il problema e visualizzare le immagini in un visualizzatore di immagini esterno come feh.

  • eimp

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

    Utilizza l' mogrifyutilità di ImageMagick per eseguire le trasformazioni effettive.

    (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- Utilizza anche il pacchetto ImageMagick che dovrebbe fornire mogrify.

    Elenco completo dei comandi:

    • eiv-fit-image-to-window- Ridimensiona l'immagine alla dimensione attuale della finestra.
    • eiv-rotate-current-image - Ruota l'immagine corrente di 90 gradi.
    • eiv-dec-or-inc-image - Ridimensiona l'immagine alla dimensione attuale della finestra.
    • eiv-diaporama - Inizia un diaporama sull'albero.
    • eiv-viewer- Il emacs-image-viewer. Permette di navigare in un albero di dir e subdir.

5
Si dovrebbe notare che eimpmodifica il file. Non funziona su immagini di sola lettura.
Kaushal Modi,

6

Soluzione

Ho usato il codice sorgente lisp/image-mode.elper scrivere questo. La chiamata a questa funzione in qualsiasi buffer di immagine la ridimensionerà per adattarla alla larghezza o all'altezza a seconda dell'immagine e dei rapporti altezza / larghezza della finestra.

Sono necessarie queste 2 cose per far funzionare questa funzione:

  • Il tuo emacs deve essere stato compilato con Imagemagick .
  • Di default libjpegloader è usato per gestire le jpgimmagini. L'hack mostrato nella parte successiva di questa risposta viene utilizzato per forzare emacs a utilizzare il imagemagickcaricatore.
(defun modi / image-transform-fit-to-window ()
  "Ridimensiona l'immagine per adattarla alla larghezza o all'altezza in base all'immagine e ai rapporti della finestra.
Imagemagick è necessario per eseguire questa funzione. "
  (Interattivo)
  (let * ((img-size (image-display-size (image-get-display-property) t))
          (larghezza img (dimensione img auto))
          (img-height (cdr img-size))
          (rapporto 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))))
          (rapporto win-h / w (/ (float win-height) (float win-width))))
    ;; Adatta l'immagine per larghezza se il rapporto h / w della finestra è> rapporto h / w dell'immagine
    (if (> rapporto win-h / w img-h / w-ratio)
        (Immagine-transform-fit-to-width)
      ;; Altra misura in altezza
      (Immagine-transform-fit-to-altezza))))

Hack per forzare emacs da usare imagemagickper caricare le immagini

Dopo aver seguito attraverso le relazioni emacs di bug #18797, #10746e #10112, la seguente soluzione ha lavorato per la forzatura Imagemagick per caricare le immagini; mettilo da qualche parte nel tuo init.el:

Ho costretto emacs per l'uso imagemagicksolo per il file di immagine che mi è familiare: png, tiff, jpg/jpege svg; il resto viene mantenuto come predefinito. Ho scelto di consentire l' gifapertura dei file dal caricatore predefinito poiché emacs 24.4 ha migliorato il supporto per la visualizzazione di immagini multi-frame. L'intera regexp è presa da 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
         ))

Inconveniente

  • I tipi di immagine scelti per essere caricati imagemagicknon verranno visualizzati come immagini incorporate org-mode.

Riferimenti


1

image-transform-set-scalepotrebbe essere quello che stai cercando. Tuttavia richiede che Emacs sia compilato con il supporto di Imagemagick.

C'è anche un commento image-transform-modein image-mode.el"Non ancora implementato".


Vedo Does Emacs use imagemagick? yesquando corro ./configure. Quindi è stato compilato con imagemagick. La trasformazione delle immagini fisse non funziona per me. (Su emacs 24.4 x86_64-unknown-linux-gnu) ho anche quanto segue config.log: | #define HAVE_IMAGEMAGICK 1 | #define HAVE_MAGICKEXPORTIMAGEPIXELS 1 | #define HAVE_MAGICKMERGEIMAGELAYERS 1.
Kaushal Modi,

0

Ecco una soluzione che ti consente di ingrandire e ridurre utilizzando gli stessi tasti utilizzati per il ridimensionamento del testo, Cx C- = e 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)
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.