छवि मोड में सिकोड़ें / ज़ूम / स्केल छवियों


20

Emacs के डॉक-व्यू-मोड के साथ मैं आसानी से / ज़ूम / आदि पीडीएफ को छोटा कर सकता हूं, हालांकि, मैं छवियों के साथ एक ही काम करने में सक्षम होना चाहूंगा। वर्तमान में जब मैं एक छवि खोलता हूं तो मैं इसे फ्रेम में फिट करने के लिए ज़ूम स्तर को समायोजित नहीं कर सकता। मुझे पता है कि 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)
    

    यह mogrifyवास्तविक परिवर्तनों को करने के लिए ImageMagick से उपयोगिता का उपयोग करता है ।

    (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फ़ाइल को संशोधित करता है। यह केवल पढ़ने के लिए छवियों पर काम नहीं करता है।
कौशल मोदी

6

समाधान

मैंने lisp/image-mode.elइसे लिखने के लिए सोर्स कोड का उपयोग किया । इस फ़ंक्शन को किसी भी छवि बफर में कॉल करने से यह आकार और चौड़ाई के अनुसार फिट होने के लिए आकार और विंडो की ऊंचाई / चौड़ाई अनुपात पर निर्भर करेगा।

इस कार्य के लिए आपको इन 2 चीजों की आवश्यकता है:

  • आपके Emacs को Imagemagick के साथ संकलित करने की आवश्यकता है ।
  • डिफ़ॉल्ट रूप से libjpegलोडर का उपयोग jpgछवियों को संभालने के लिए किया जाता है । इस उत्तर के अगले भाग में दिखाई गई हैक का उपयोग imagemagickलोडर का उपयोग करने के लिए emacs को बाध्य करने के लिए किया जाता है ।
(डिफ्यूड मोडी / इमेज-ट्रांसफॉर्म-फिट-टू-विंडो)
  "छवि और विंडो अनुपात के आधार पर चौड़ाई या ऊंचाई को फिट करने के लिए छवि का आकार बदलें।
इस फंक्शन को चलाने के लिए इमेजमाजिक की आवश्यकता है। "
  (सहभागी)
  (let * ((img-size (image-display-size-image-get-display-property) t))
          (img- चौड़ाई) (कार img- आकार)
          (img-height (cdr img-size))
          (img-h / w-ratio (/ फ्लोट img-height) (फ्लोट img-width))
          (जीत-चौड़ाई - (nth 2 (विंडो-इन-पिक्सेल-एज))
                        (nth 0 (विंडो-इन-पिक्सेल-किनारे))))
          (जीत-ऊंचाई - (nth 3 (विंडो-इन-पिक्सेल-एज))
                         (nth 1 (विंडो-इन-पिक्सेल-किनारे)))
          (जीत-एच / डब्ल्यू-अनुपात (/ फ्लोट जीत-ऊंचाई) (फ्लोट जीत-चौड़ाई)))
    ;; चौड़ाई का फ़िट चित्र यदि विंडो का h / w अनुपात छवि का h / w अनुपात है तो
    (अगर (> विन-एच / डब्ल्यू-अनुपात img-h / w-ratio)
        (छवि-बदलने फिट करने के लिए चौड़ाई)
      ;; ऊंचाई से फिट होना
      (छवि-बदलने फिट करने के लिए ऊंचाई))))

imagemagickछवियों को लोड करने के लिए उपयोग करने के लिए emacs को बाध्य करने के लिए हैक

इमैक बग रिपोर्ट के माध्यम से अनुसरण करने के बाद #18797, #10746और #10112, निम्न समाधान ने इमेजमैगिक को छवियों को लोड करने के लिए मजबूर करने के लिए काम किया; इसे अपने में कहीं रखो init.el:

मैं उपयोग करने के लिए मजबूर कर दिया है Emacs imagemagickकेवल छवि के लिए मुझे परिचित फ़ाइलें: png, tiff, jpg/jpegऔर svg; बाकी को डिफ़ॉल्ट के रूप में रखा गया है। मैंने gifडिफॉल्ट लोडर द्वारा फाइलों को खोलने की अनुमति देने के लिए चुना है क्योंकि एमएसीएस 24.4 ने मल्टी-फ्रेम छवियों को देखने के लिए समर्थन में सुधार किया है। पूरे regexp से लिया गया है 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वह हो सकता है जिसे आप ढूंढ रहे हैं। हालाँकि इसके लिए इमैक को इमेजमैगिक सपोर्ट के साथ संकलित करने की आवश्यकता है।

"अभी तक लागू नहीं" लेबल image-transform-modeमें एक टिप्पणी भी है image-mode.el


मैं देखता हूं Does Emacs use imagemagick? yesजब दौड़ रहा है ./configure। तो इसने इमेजमाजिक का संकलन किया। फिर भी छवि परिवर्तन मेरे लिए काम नहीं करता है। (Emacs पर 24.4 x86_64-अज्ञात-linux-gnu) मैं भी में निम्नलिखित है config.log: | #define HAVE_IMAGEMAGICK 1 | #define HAVE_MAGICKEXPORTIMAGEPIXELS 1 | #define HAVE_MAGICKMERGEIMAGELAYERS 1
कौशल मोदी

0

यहाँ एक समाधान दिया गया है जो पाठ स्केलिंग, Cx C- = और Cx2 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)
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.