krak / svg
用于操作和创建 SVG 的库
v0.3.1
2017-04-26 18:24 UTC
Requires
- php: >=5.5
Requires (Dev)
- phpunit/phpunit: ~4.0
README
Krak Svg 是一个用于创建和导出 SVG 的库。
安装
{ "require": { "krak/svg": "^0.2" } }
设计 & 使用
SVG 库被拆分为几个组件:访问者、迭代器、序列化和元素。
构建 SVG 树
<?php $svg = new Krak\Svg\Element\Svg(); $svg->getAttributes() ->setWidth(320) ->setHeight(320) ->setXmlns('http://www.w3.org/2000/svg') ->setAttribute( new Krak\Element\SimpleAttribute( 'xmlns:xlink', 'http://www.w3.org/1999/xlink' ) ); $group = new Krak\Svg\Element\Group(); $transform_attr = new Krak\Svg\Element\TransformAttribute(); $transform_attr->translate(30, 20); $group->getAttributes()->setAttribute($transform_attr); $rect = new Krak\Svg\Element\Rect(); $rect->setAttributes(krak\svg\element\attr_iter_to_col([ 'width' => 80, 'height' => 80, 'x' => 0, 'y' => 0, 'fill' => '#ffffff', ])); $group->appendChild($rect); $imagick = new Imagick('file.jpg'); $image = new Krak\Svg\Element\Image(); $image->getAttributes() ->setAttribute( krak_svg_image_attr( $imagick->getImageBlob(), 'image/jpeg', true // base64 decode ) ) ->setX(0) ->setY(0); $svg->appendChild($group); $svg->appendChild($image);
序列化 SVG 树
<?php $string_serializer = new Krak\Svg\StringSvgSerializer(); $png_serializer = new Krak\Svg\RsvgCliSvgSerializer($string_serializer); $svg_string_data = $string_serializer->serializeSvg($svg); $svg_png_data = $png_serializer->serializeSvg($svg);
StringSerializer 会将树导出为 SVG 树。
RsvgCliSvgSerializer 使用 rsvg
命令行工具将 SVG 导出为 png、pdf、ps 或 rsvg 支持的任何其他格式。此序列化器需要字符串序列化器将其转换为字符串。
迭代 SVG 树
<?php foreach (krak\svg\iter_top_down($svg) as $depth => $el) { // ... } foreach (krak\svg\iter_bottom_up($svg) as $depth => $el) { // ... } /* the following are just aliases of what's above */ foreach (new Krak\Svg\TopDownIterator($svg) as $depth => $el) { // .. } foreach (new Krak\Svg\BottomUpIterator($svg) as $depth => $el) { // .. }
我们目前支持两种类型的迭代器:自顶向下和自底向上。函数式迭代器作为迭代 SVG 树的生成器实现(与递归相反)。迭代器类只是围绕函数式迭代器生成器的包装器。
- 自顶向下:从树的顶部开始,并在向下过程中输出。
- 自底向上:从树的底部开始,首先打印最低节点,然后向上工作。
元素模型
元素模型由元素和属性组成。每个元素都有一个 AttributeCollection
,可以包含属性。大多数属性只是 SimpleAttributes,但有一些特殊属性可以创建并按元素设置。
元素还可以有提示,这些提示是与元素关联的元数据。
访问者和遍历者
访问者和遍历者是在序列化之前修改 SVG 树的一种方法。
- 属性字符串访问者:将元素的属性转换为字符串
- 高度计算器访问者:通过计算所有子元素的高度来计算 SVG 元素的高度。它只对具有
Krak\Svg\Visitor\HeightCalculatorVisitor::HINT
查询提示的元素进行高度计算。