emacs-orgmode
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Orgmode] Embedding images as data: URIs in the HTML exporter (was:


From: Jan Böcker
Subject: Re: [Orgmode] Embedding images as data: URIs in the HTML exporter (was: MathJax is now the default for HTML math)
Date: Fri, 03 Sep 2010 17:53:01 +0200
User-agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.1.11) Gecko/20100713 Thunderbird/3.0.6

On 09/03/2010 05:07 AM, address@hidden wrote:
> How about doing the same data: URI embedding for images in the HTML
> exporter?  It should be possible to implement it entirely inside
> Emacs.  It would have to be optional, of course.
> 
> Derek
> 

This is certainly possible, the following patch would do this to *every*
image. Maybe someone who knows the HTML exporter code better than I do
can make it configurable and submit a patch.

Bonus points for an extra option which only embeds images smaller than
32 KB to keep it compatible with Internet Explorer.

Maybe something like this configuration variable:


(defcustom org-export-html-embed-images-as-data-uris 'never
"Controls if references to inlined images (see
`org-export-html-inline-images') are replaced with their contents as a
data: URI.

Possible values:
'never (default)   All images are inlined using normal URL references.
'always            Embed all images as data: URIs.
'up-to-32KB        Use data: URIs only for images up to 32 KByte
                   (Internet Explorer does not allow bigger data: URIs)

See also: http://en.wikipedia.org/wiki/Data_URI_scheme";
:group org-export-html
:type (choice (const never) (const always) (const up-to-32KB)))



-- Jan


---
 lisp/org-html.el |   12 +++++++++++-
 1 files changed, 11 insertions(+), 1 deletions(-)

diff --git a/lisp/org-html.el b/lisp/org-html.el
index eecda0d..5e5ec95 100644
--- a/lisp/org-html.el
+++ b/lisp/org-html.el
@@ -1820,7 +1820,7 @@ lang=\"%s\" xml:lang=\"%s\">
                    (if org-par-open "</p>\n" "")
                    (if label (format "id=\"%s\" " label) "")))
        (format "<img src=\"%s\"%s />"
-               src
+               (org-export-html-image-to-data-uri src)
                (if (string-match "\\<alt=" (or attr ""))
                    (concat " " attr )
                  (concat " " attr " alt=\"" src "\"")))
@@ -1830,6 +1830,16 @@ lang=\"%s\" xml:lang=\"%s\">
                (concat "\n<p>" caption "</p>")
                (if org-par-open "\n<p>" ""))))))))

+(defun org-export-html-image-to-data-uri (src)
+  "Load an image file and convert it to a data: URI.
+See http://en.wikipedia.org/wiki/Data_URI_scheme";
+  (with-temp-buffer
+    (insert-file-contents src)
+    (base64-encode-region (point-min) (point-max))
+    (goto-char 1)
+    (insert "data:;base64,")
+    (buffer-string)))
+
 (defun org-export-html-get-bibliography ()
   "Find bibliography, cut it out and return it."
   (catch 'exit
-- 
1.7.0.4




reply via email to

[Prev in Thread] Current Thread [Next in Thread]