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]