[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Emacs-diffs] master 44caa96: Add a new function `svg-embed'
From: |
Lars Ingebrigtsen |
Subject: |
[Emacs-diffs] master 44caa96: Add a new function `svg-embed' |
Date: |
Mon, 27 Jun 2016 16:21:00 +0000 (UTC) |
branch: master
commit 44caa96dc5c16cbc4ee1bb26ec880af2e2ecf9f8
Author: Lars Magne Ingebrigtsen <address@hidden>
Commit: Lars Magne Ingebrigtsen <address@hidden>
Add a new function `svg-embed'
* doc/lispref/display.texi (SVG Images): Document `svg-embed'.
* lisp/svg.el (svg-embed): New function.
(svg--image-data): Ditto.
---
doc/lispref/display.texi | 13 +++++++++++++
lisp/svg.el | 23 +++++++++++++++++++++++
2 files changed, 36 insertions(+)
diff --git a/doc/lispref/display.texi b/doc/lispref/display.texi
index a7c1d09..575cad8 100644
--- a/doc/lispref/display.texi
+++ b/doc/lispref/display.texi
@@ -5350,6 +5350,19 @@ that describe the outer circumference of the polygon.
@end lisp
@end defun
address@hidden svg-embed svg image image-type datap &rest args
+Add an embedded (raster) image to @var{svg}. If @var{datap} is
address@hidden, @var{IMAGE} should be a file name; if not, it should be a
+binary string containing the image data. @var{image-type} should be a
address@hidden image type, for instance @samp{"image/jpeg"}.
+
address@hidden
+(svg-embed svg "~/rms.jpg" "image/jpeg" nil
+ :width "100px" :height "100px"
+ :x "50px" :y "75px")
address@hidden lisp
address@hidden defun
+
Finally, the @code{svg-image} takes an SVG object as its parameter and
returns an image object suitable for use in functions like
@code{insert-image}. Here's a complete example that creates and
diff --git a/lisp/svg.el b/lisp/svg.el
index c4f3270..c33b092 100644
--- a/lisp/svg.el
+++ b/lisp/svg.el
@@ -137,6 +137,18 @@ POINTS is a list of x/y pairs."
", "))
,@(svg--arguments svg args)))))
+(defun svg-embed (svg image image-type datap &rest args)
+ "Insert IMAGE into the SVG structure.
+IMAGE should be a file name if DATAP is nil, and a binary string
+otherwise. IMAGE-TYPE should be a MIME image type, like
+\"image/jpeg\" or the like."
+ (svg--append
+ svg
+ (dom-node
+ 'image
+ `((xlink:href . ,(svg--image-data image image-type datap))
+ ,@(svg--arguments svg args)))))
+
(defun svg--append (svg node)
(let ((old (and (dom-attr node 'id)
(dom-by-id svg
@@ -147,6 +159,17 @@ POINTS is a list of x/y pairs."
(dom-append-child svg node)))
(svg-possibly-update-image svg))
+(defun svg--image-data (image image-type datap)
+ (with-temp-buffer
+ (set-buffer-multibyte nil)
+ (if datap
+ (insert image)
+ (insert-file-contents image))
+ (base64-encode-region (point-min) (point-max) t)
+ (goto-char (point-min))
+ (insert "data:" image-type ";base64,")
+ (buffer-string)))
+
(defun svg--arguments (svg args)
(let ((stroke-width (or (plist-get args :stroke-width)
(dom-attr svg 'stroke-width)))
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Emacs-diffs] master 44caa96: Add a new function `svg-embed',
Lars Ingebrigtsen <=