Next: Other Image Types, Previous: ImageMagick Images, Up: Images [Contents][Index]
SVG(Scalable Vector Graphics)はイメージを指定するXMLフォーマットです。SVGサポートつきでEmacsがビルドされていれば、以下のsvg.elライブラリー由来の関数でこれらのイメージの作成や操作ができます。
指定したサイズで新たにSVGイメージを作成する。argsはplist引数であり、以下を指定できる:
:stroke-width
作成するすべてのラインのデフォルト幅(ピクセル単位)。
:stroke
作成するすべてのラインのデフォルトのストロークカラー。
この関数はSVGオブジェクト (SVGイメージを指定するLispデータ構造)をリターンする。以下の関数はすべてこのブジェクトにたいして機能する。以下の関数の引数svgはこのようなSVGオブジェクトを指定する。
svgに識別子idでグラデーションを作成する。typeはグラデーションタイプでlinear
かradial
のいずれかを指定する。stopsはパーセント割合/カラーのペアからなるリスト。
以下は最初の赤から25%の緑、最後は青に至る線形グラデーションを作成する:
(svg-gradient svg "gradient1" 'linear '((0 . "red") (25 . "green") (100 . "blue")))
作成(およびSVGオブジェクトに挿入)されたグラデーションは、後でシェイプを作成するすべての関数で使用できる。
以下の関数はすべてさまざまな属性のデフォルト値を変更するオプションのキーワードパラメーターを受け取ります。有効な属性には以下が含まれます:
:stroke-width
ラインとソリッドシェイプ枠線の描画幅(ピクセル単位)。
:stroke-color
ラインとソリッドシェイプ枠線の描画カラー。
:fill-color
ラインとソリッドシェイプに使用するカラー。
:id
シェイプの識別子。
:gradient
与えられた場合には以前に定義されたグラデーションオブジェクトの識別子であること。
左上隅が位置x/y、サイズがwidth/heightの矩形をsvgに追加する。
(svg-rectangle svg 100 100 500 500 :gradient "gradient1")
中央が位置x/y、半径がradiusの円をsvgに追加する。
中央が位置x/y、水平半径がx-radius、垂直半径がy-radiusの楕円をsvgに追加する。
始点がx1/y1、終点がx2/y2の線をsvgに追加する。
points (XとYの位置ペアのリスト)を通過する複数セグメントラライン、いわゆる“ポリゴン(polyline)”をsvgに追加する。
(svg-polyline svg '((200 . 100) (500 . 450) (80 . 100)) :stroke-color "green")
ポリゴン外周の位置XとYのペアからなるリストであるようなpointsにより記述されるポリゴンをsvgに追加する。
(svg-polygon svg '((100 . 100) (200 . 150) (150 . 90)) :stroke-color "blue" :fill-color "red")
指定したtextをsvgに追加する。
(svg-text svg "This is a text" :font-size "40" :font-weight "bold" :stroke "black" :fill "white" :font-family "impact" :letter-spacing "4pt" :x 300 :y 400 :stroke-width 1)
埋め込みの(ラスター)イメージをsvgに追加する。datapがnil
ならimageはファイル名、それ以外ならimageはイメージデータをrawバイトとして含む文字列であること。image-typeは"image/jpeg"
のようなMIMEイメージタイプであること。
(svg-embed svg "~/rms.jpg" "image/jpeg" nil :width "100px" :height "100px" :x "50px" :y "75px")
svg
から識別子id
の要素を取り除く。
最後にsvg-image
は引数としてSVGを受け取り、insert-image
のような関数での使用に適したイメージオブジェクトをリターンする。
以下は円のイメージを作成して挿入する完全な例です:
(let ((svg (svg-create 400 400 :stroke-width 10))) (svg-gradient svg "gradient1" 'linear '((0 . "red") (100 . "blue"))) (svg-circle svg 200 200 100 :gradient "gradient1" :stroke-color "green") (insert-image (svg-image svg)))
Next: Other Image Types, Previous: ImageMagick Images, Up: Images [Contents][Index]