mirror of
git://git.sv.gnu.org/emacs.git
synced 2026-02-04 22:50:59 -08:00
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.
This commit is contained in:
parent
058e856277
commit
44caa96dc5
2 changed files with 36 additions and 0 deletions
|
|
@ -5350,6 +5350,19 @@ that describe the outer circumference of the polygon.
|
|||
@end lisp
|
||||
@end defun
|
||||
|
||||
@defun svg-embed svg image image-type datap &rest args
|
||||
Add an embedded (raster) image to @var{svg}. If @var{datap} is
|
||||
@code{nil}, @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
|
||||
@acronym{MIME} image type, for instance @samp{"image/jpeg"}.
|
||||
|
||||
@lisp
|
||||
(svg-embed svg "~/rms.jpg" "image/jpeg" nil
|
||||
:width "100px" :height "100px"
|
||||
:x "50px" :y "75px")
|
||||
@end lisp
|
||||
@end 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
|
||||
|
|
|
|||
23
lisp/svg.el
23
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)))
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue