How to resize images in org-mode

39,621

Solution 1

As of Org 8.0, "Attribute lines now take plists" :

#+attr_html: :width 100px
#+attr_latex: :width 100px
[[~/images/example.jpg]]

Solution 2

As per Jacobo's comment, add the following to your init.el file:

(setq org-image-actual-width nil)

Then in org-mode, you can use this for inline previews of JPGs and PNGs.

#+ATTR_ORG: :width 100
[[~/images/example.svg]]

and if you want to size this for both inline previews and html output:

#+ATTR_HTML: width="100px"
#+ATTR_ORG: :width 100
[[~/images/example.svg]]

Solution 3

#+ATTR_HTML: width="100px"
[[~/images/example.jpg]]

Solution 4

This is a sample on how to resize an image using percentages (Org mode version 9.0.5):

#+CAPTION: Weight space                                                                                                                                     
#+ATTR_HTML: :alt neural network :title Neural network representation :align right                                                                          
#+ATTR_HTML: :width 50% :height 50%                                                                                                                         
https://i.stack.imgur.com/nzHSl.jpg

Solution 5

Here is a way to resize images in emacs Org mode for preview (not exporting). Typically,

  1. We want to set an image to a specific width like 249px when we need to.
  2. We want to set a default image width, so that we don't need to specify +attr_html for every image - that would be tedious.

This can be achieved by configuring org-image-actual-width like follows:

(setq org-image-actual-width (list 550))

Then, in your .org file, if you have

#+attr_html :width 249
[[~/images/example1.jpg]]

then the image will be displayed in preview at width 249px. For another image, where no +attr_* is specified, the default width of 550px will be applied.

[[~/images/example2.jpg]]

You can see this behavior from the documentation in org-mode source code:

When set to a number in a list, try to get the width from any
#+ATTR.* keyword if it matches a width specification like
  #+ATTR_HTML: :width 300px
and fall back on that number if none is found.

I found it hard to understand what does "a number in a list mean", so I looked at the implementation, and indeed, something like (list 550) works.

Share:
39,621
user1323995
Author by

user1323995

Updated on July 08, 2022

Comments

  • user1323995
    user1323995 almost 2 years

    Is there a general way to define the size, in percent or pixels, for an image that is linked in org-mode?

    Say I have the following link in my .org file:

    [[~/images/example.jpg]]
    

    This JPG is way too large, so if I export it to HTML or LaTeX or open it in org-mode with C-c C-o i will only see a fraction of the image.

  • user1323995
    user1323995 almost 12 years
    Thank you for your answer bzg! First of all, I was hoping for an option that is not specific to html but would also work for LaTex and viewing in Emacs itself. Anyway, even though your suggestion appears to be correct according to the official documentation [1][2] it does somehow not work for me. I'm using emacs 24.1.1 without any customization but when I try your code, the image is still in its original, gigantic size. This is true for Chrome and Firefox. [1] orgmode.org/worg/org-tutorials/images-and-xhtml-export.html [2] w3schools.com/tags/tag_img.asp
  • user1323995
    user1323995 almost 12 years
    I've also tried #+ATTR_HTML: width="0.3" Which, if I understand correct, should scale by a factor of 0.3 (or 0.003 = 0.3% ?) but this has no effect either. :-/
  • Jacobo de Vera
    Jacobo de Vera over 11 years
    In order for this to work, you need to set this in your .emacs file: (setq org-image-actual-width nil). Other possible values and behaviours are explained in this post to org-mode's mailing list
  • ealfonso
    ealfonso almost 5 years
    other answers didn't work for me for images based on a URL
  • lab
    lab almost 3 years
    and to set it to the full linewidth (or any other value), use (setq org-latex-image-default-width "1.0\\linewidth")
  • HappyFace
    HappyFace almost 3 years
    Does this work with inline previews as well?
  • Niclas Börlin
    Niclas Börlin over 2 years
    Adam, I would assume that Scalable Vector Graphics (SVG) images do not have an inherent size, as they are designed to be scalable.
  • Adam
    Adam over 2 years
    Hi @NiclasBörlin it looks like this was a bug in my version of Emacs (but has since been resolved). I can confirm that as of Emacs 27.2 (Railwaycat Homebrew edition of Mitsuharu's Emacs) this works for SVGs as well.
  • Kadir Gunel
    Kadir Gunel over 2 years
    @Adam I accidentally down-voted your answer, and stack overflow does not permit me to adjust it. Due to that I upvoted your comment. Sorry for the inconvenience
  • Adam
    Adam over 2 years
    @KadirGunel No worries, I'm now only 38 points behind the accepted answer! ;D
  • Emmanuel Goldstein
    Emmanuel Goldstein over 2 years
    How about height?
  • Adam
    Adam over 2 years
    @EmmanuelGoldstein the height should adjust itself proportionately, when you set the width. So as long as your are not looking to purposefully distort your image, you only need to set one of these.
  • Emmanuel Goldstein
    Emmanuel Goldstein over 2 years
    I want to purposefully "distort" my image because by default the data points look too clustered, so I'd like to have a different ratio. Thanks.