Perkecil / Perkecil / Perkecil gambar dalam mode-gambar


20

Dengan mode tampilan dokumen Emacs, saya dapat dengan mudah mengecilkan / memperbesar / etc PDF, namun, saya ingin dapat melakukan hal yang sama dengan gambar. Saat ini ketika saya membuka gambar saya tidak bisa mengatur level zoom agar pas dengan bingkai. Saya tahu ada image-mode-fit-frame, bagaimanapun, itu tidak membantu ketika gambar lebih besar dari layar saya.

Apakah ada paket atau mode yang memungkinkan saya memperbesar dan memperkecil gambar?

Jawaban:


15

Fungsionalitas tersebut disediakan oleh paket:

  • image-dired-thumbnail-mode

    Dengan titik di buffer thumbnail, Anda dapat mengetik RET( image-dired-display-thumbnail-original-image) untuk menampilkan versi ukurannya di jendela lain. Ini ukuran gambar agar sesuai dengan jendela.

    Ini menggunakan convertperintah ImageMagick .

    Anda juga dapat menggunakan image-dired-external-vieweruntuk menghindari masalah dan menampilkan gambar Anda di penampil gambar eksternal seperti feh.

  • eimp

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

    Ini menggunakan mogrifyutilitas dari ImageMagick untuk melakukan transformasi yang sebenarnya.

    (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- Ini juga menggunakan paket ImageMagick yang harus disediakan mogrify.

    Daftar perintah lengkap:

    • eiv-fit-image-to-window- Ubah ukuran gambar ke ukuran jendela saat ini.
    • eiv-rotate-current-image - Putar gambar saat ini pada 90 derajat.
    • eiv-dec-or-inc-image - Ubah ukuran gambar ke ukuran jendela saat ini.
    • eiv-diaporama - Mulai diaporama di pohon.
    • eiv-viewer- The emacs-image-viewer. Memungkinkan untuk bernavigasi di pohon dir dan subdir.

5
Orang harus mencatat bahwa eimpmemodifikasi file. Ini tidak berfungsi pada gambar hanya baca.
Kaushal Modi

6

Larutan

Saya menggunakan kode sumber lisp/image-mode.eluntuk menulis ini. Memanggil fungsi ini dalam buffer gambar apa pun akan mengubah ukurannya agar sesuai dengan lebar atau tinggi tergantung pada gambar dan rasio tinggi / lebar jendela.

Anda perlu 2 hal ini agar fungsi ini berfungsi:

  • Emacs Anda harus sudah dikompilasi dengan Imagemagick .
  • Secara default libjpegloader digunakan untuk menangani jpggambar. Retasan yang ditunjukkan di bagian selanjutnya dari jawaban ini digunakan untuk memaksa emacs untuk menggunakan imagemagickloader.
(defun modi / image-transform-fit-to-window ()
  "Ubah ukuran gambar agar sesuai dengan lebar atau tinggi berdasarkan rasio gambar dan jendela.
Diperlukan Imagemagick untuk menjalankan fungsi ini. "
  (interaktif)
  (biarkan * ((ukuran img (ukuran gambar tampilan (properti gambar dapatkan)))))
          (lebar img (ukuran img mobil))
          (img-height (cdr img-size))
          (rasio 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)))))
          (win-h / w-ratio (/ (float win-height) (float win-width)))))
    ;; Paskan gambar dengan lebar jika rasio h / w jendela> rasio h / w dari gambar
    (jika (> win-h / w-rasio img-h / w-rasio)
        (image-transform-fit-to-width)
      ;; Lain lagi dengan tinggi badan
      (gambar-transform-pas-ke-tinggi))))

Retas untuk memaksa emacs digunakan imagemagickuntuk memuat gambar

Setelah mengikuti laporan bug emacs #18797, #10746dan #10112, solusi berikut berfungsi untuk memaksa Imagemagick memuat gambar; letakkan di suatu tempat di Anda init.el:

Saya telah memaksa emacs untuk digunakan imagemagickhanya untuk gambar file akrab bagi saya: png, tiff, jpg/jpegdan svg; sisanya disimpan sebagai default. Saya telah memilih untuk mengizinkan giffile dibuka oleh loader default karena emacs 24.4 telah meningkatkan dukungan untuk melihat gambar multi-bingkai. Seluruh regexp diambil dari 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
         ))

Kekurangan

  • Jenis gambar yang dipilih untuk dimuat imagemagicktidak akan tampil sebagai gambar sebaris di org-mode.

Referensi


1

image-transform-set-scalemungkin apa yang Anda cari. Namun itu membutuhkan Emacs untuk dikompilasi dengan dukungan Imagemagick.

Ada juga komentar image-transform-modedi image-mode.ellabel "Belum diimplementasikan."


Saya melihat Does Emacs use imagemagick? yesketika berlari ./configure. Jadi itu dikompilasi dengan imagemagick. Namun transformasi gambar tidak bekerja untuk saya. (Pada emacs 24,4 x86_64-unknown-linux-gnu) Saya juga memiliki berikut di config.log: | #define HAVE_IMAGEMAGICK 1 | #define HAVE_MAGICKEXPORTIMAGEPIXELS 1 | #define HAVE_MAGICKMERGEIMAGELAYERS 1.
Kaushal Modi

0

Berikut adalah solusi yang memungkinkan Anda meningkatkan skala menggunakan tombol yang sama seperti yang digunakan untuk penskalaan teks, Cx C- = dan 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)
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.