Görüntü modunda görüntüleri Küçült / Yakınlaştır / Ölçeklendir


20

Emacs'ın doc-view-mode ile PDF'leri kolayca küçültebilir / yakınlaştırabilirim, ancak aynı şeyleri görüntülerle de yapmak istiyorum. Şu anda bir görüntü açtığımda zum düzeyini çerçeveye sığacak şekilde ayarlayamıyorum. image-mode-fit-frameBununla birlikte, görüntü ekranımdan daha büyük olduğunda yardımcı olmadığını biliyorum .

Görüntüyü yakınlaştırıp uzaklaştırmama izin verecek bir paket veya mod var mı?

Yanıtlar:


15

Bu işlevler paketler tarafından sağlanır:

  • image-dired-thumbnail-mode

    Küçük resim arabelleğindeki nokta ile başka bir pencerede boyutlandırılmış bir sürümünü görüntülemek için RET( image-dired-display-thumbnail-original-image) yazabilirsiniz . Bu, görüntüyü pencereye sığacak şekilde boyutlandırır.

    ImageMagick'in convertkomutunu kullanır .

    image-dired-external-viewerSorunu önlemek ve resimlerinizi harici bir resim görüntüleyicide görüntülemek için de kullanabilirsiniz feh.

  • eimp

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

    mogrifyGerçek dönüşümleri yapmak için ImageMagick yardımcı programını kullanır .

    (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- Sağlanması gereken ImageMagick paketini de kullanır mogrify.

    Komple komut listesi:

    • eiv-fit-image-to-window- Görüntüyü geçerli pencere boyutuna göre yeniden boyutlandırın.
    • eiv-rotate-current-image - Geçerli görüntüyü 90 derece döndürür.
    • eiv-dec-or-inc-image - Görüntüyü geçerli pencere boyutuna göre yeniden boyutlandırın.
    • eiv-diaporama - Ağaçta bir diaporama başlatın.
    • eiv-viewer- emacs-image-viewer. Bir dir ve alt dizin ağacında gezinmeyi sağlar.

5
eimpDosyayı değiştirdiğine dikkat edilmelidir . Salt okunur görüntülerde çalışmaz.
Kaushal Modi

6

Çözüm

Bunu lisp/image-mode.elyazmak için kaynak kodunu kullandım . Bu işlevin herhangi bir görüntü arabelleğinde çağrılması, görüntü ve pencere yükseklik / genişlik oranlarına bağlı olarak genişlik veya yüksekliğe sığacak şekilde yeniden boyutlandırılır.

Bu işlevin çalışması için şu 2 şeye ihtiyacınız vardır:

  • Emac'larınızın Imagemagick ile derlenmiş olması gerekir .
  • Varsayılan olarak libjpegyükleyici jpggörüntüleri işlemek için kullanılır . Bu cevabın bir sonraki bölümünde gösterilen saldırı, emac'ları imagemagickyükleyici kullanmaya zorlamak için kullanılır .
(defun modi / image-transform-fit-to-window ()
  Msgstr "" "Görüntü ve pencere oranlarına göre görüntüyü genişlik veya yüksekliğe sığacak şekilde yeniden boyutlandırın.
Bu işlevi çalıştırmak için Imagemagick gerekir. "
  (İnteraktif)
  (let * ((img-size (resim-görüntü-boyutu (image-get-display-property) t))
          (img genişliği (araba img boyutu))
          (img yüksekliği (cdr img boyutu))
          (img-h / w-oranı (/ (float img-yüksekliği) (float img-genişliği)))
          (kazan genişliği (- (n. 2 (piksel içi pencere kenarları))
                        (n. 0 (piksel içi pencere kenarları))))
          (kazanma yüksekliği (- (n. 3 (piksel içi pencere kenarları))
                         (n. 1 (piksel içi pencere kenarları)))))
          (win-h / w-oranı (/ (float win-height) (float win-width)))))
    ;; Pencerenin s / b oranı görüntünün s / h oranı ise görüntüyü genişliğe sığdır
    (eğer (> win-h / w-oranı img-h / w-oranı)
        (Resim-transform-uyum-genişlik)
      ;; Yüksekliğe göre başka uyum
      (Resim-transform-uyum yükseklik))))

Emac'leri imagemagickgörüntüleri yüklemek için kullanmaya zorlamak için kesmek

Emacs hata raporları aracılığıyla izledikten sonra #18797, #10746ve #10112aşağıdaki çözüm yük görüntülere ImageMagick zorlayarak çalıştı; bir yere koy init.el:

Ben kullanımına Emacs zorlamıştır imagemagickbana tanıdık dosyaları yalnızca görüntü için: png, tiff, jpg/jpegve svg; geri kalanı varsayılan olarak tutulur. gifEmacs 24.4 çok çerçeveli görüntüleri izlemek için geliştirilmiş desteğe sahip olduğundan, dosyaların varsayılan yükleyici tarafından açılmasına izin vermeyi seçtim . Tüm normal ifade alınır 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
         ))

sakınca

  • Tarafından yüklenmek üzere seçilen görüntü türleri imagemagicksatır içi görüntüler olarak gösterilmez org-mode.

Referanslar


1

image-transform-set-scalearadığınız şey olabilir. Ancak Emacs'ın Imagemagick desteği ile derlenmesini gerektirir.

Bir dışarı yorumladı de bulunmaktadır image-transform-modede image-mode.eletiketli "Henüz uygulanmaktadır."


Does Emacs use imagemagick? yesKoşarken görüyorum ./configure. Böylece imagemagick ile derlendi. Hareketsiz görüntü dönüşümü benim için çalışmıyor. (Emacs'dan On 24.4 x86_64-bilinmeyen-linux-gnu) Ben de şu var config.log: | #define HAVE_IMAGEMAGICK 1 | #define HAVE_MAGICKEXPORTIMAGEPIXELS 1 | #define HAVE_MAGICKMERGEIMAGELAYERS 1.
Kaushal Modi

0

İşte metin ölçeklendirme, Cx C- = ve Cx C-- ile aynı tuşları kullanarak ölçeklendirmenizi sağlayan bir çözüm.

(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)
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.