Function: org-odt--image-size
org-odt--image-size is a byte-compiled function defined in
ox-odt.el.gz.
Signature
(org-odt--image-size FILE INFO &optional USER-WIDTH USER-HEIGHT SCALE DPI EMBED-AS)
Source Code
;; Defined in /usr/src/emacs/lisp/org/ox-odt.el.gz
(defun org-odt--image-size
(file info &optional user-width user-height scale dpi embed-as)
(let* ((--pixels-to-cms
(lambda (pixels dpi)
(let ((cms-per-inch 2.54)
(inches (/ pixels dpi)))
(* cms-per-inch inches))))
(--size-in-cms
(lambda (size-in-pixels dpi)
(and size-in-pixels
(cons (funcall --pixels-to-cms (car size-in-pixels) dpi)
(funcall --pixels-to-cms (cdr size-in-pixels) dpi)))))
(dpi (or dpi (plist-get info :odt-pixels-per-inch)))
(anchor-type (or embed-as "paragraph"))
(user-width (and (not scale) user-width))
(user-height (and (not scale) user-height))
(size
(and
(not (and user-height user-width))
(or
;; Use Imagemagick.
(and (executable-find "identify")
(let ((size-in-pixels
(let ((dim (shell-command-to-string
(format "identify -format \"%%w:%%h\" \"%s\""
file))))
(when (string-match "\\([0-9]+\\):\\([0-9]+\\)" dim)
(cons (string-to-number (match-string 1 dim))
(string-to-number (match-string 2 dim)))))))
(funcall --size-in-cms size-in-pixels dpi)))
;; Use Emacs.
(let ((size-in-pixels
(ignore-errors ; Emacs could be in batch mode
(clear-image-cache)
(image-size (create-image file) 'pixels))))
(funcall --size-in-cms size-in-pixels dpi))
;; Use hard-coded values.
(cdr (assoc-string anchor-type
org-odt-default-image-sizes-alist))
;; Error out.
(error "Cannot determine image size, aborting"))))
(width (car size)) (height (cdr size)))
(cond
(scale
(setq width (* width scale) height (* height scale)))
((and user-height user-width)
(setq width user-width height user-height))
(user-height
(setq width (* user-height (/ width height)) height user-height))
(user-width
(setq height (* user-width (/ height width)) width user-width))
(t (ignore)))
;; ensure that an embedded image fits comfortably within a page
(let ((max-width (car org-odt-max-image-size))
(max-height (cdr org-odt-max-image-size)))
(when (or (> width max-width) (> height max-height))
(let* ((scale1 (/ max-width width))
(scale2 (/ max-height height))
(scale (min scale1 scale2)))
(setq width (* scale width) height (* scale height)))))
(cons width height)))