rimelek / columns3d
使用GD扩展创建类似3D的列的库
v2.0.0
2016-10-02 14:40 UTC
Requires
- php: >=7.0
- ext-gd: *
This package is auto-updated.
Last update: 2024-08-29 05:06:05 UTC
README
使用此库,您可以创建不同类型的柱状图图像。如果您在柱子的墙上使用线性渐变,您可以绘制类似3D的形状。这主要是为了娱乐和学习库中使用的算法。
查看一些示例: examples.md
安装
php composer.phar require rimelek/columns3d:2.*
需求
- PHP >= 7.0
- GD扩展
使用
可绘制的元素
要开始绘制,您需要定义一个画布
use Rimelek\Columns3D\Canvas;
use Rimelek\Columns3D\CanvasConfiguration;
use Rimelek\Columns3D\Color;
$cc = new CanvasConfiguration();
$cc->setHeight(300);
$cc->setWidth(300);
$cc->setType(Canvas::TYPE_JPEG); //Canvas::TYPE_PNG and Canvas::TYPE_GIF are also supported
$cc->setQuality(50); // Only in case of JPEG
$cc->setColor(new Color(255, 0, 0)); //RGB
$canvas = new Canvas($cc);
CanvasConfiguration的所有方法都是可选的。
您可以使用addElement()将元素添加到画布上。
use Rimelek\Columns3D\PositionedElement;
// ...
$canvas->addElement(new Positionedelement($drawable, /*x*/ 200, /*y*/ 200));
$drawable对象必须实现Rimelek\Columns3D\Drawable\DrawableInterface
目前有2个类可用
StripedPattern
这是为了添加条纹背景。目前不支持自定义。
use Rimelek\Columns3D\Drawable\StripedPattern;
// ...
$background = new StripedPattern();
$canvas->addElement(new Positionedelement($background, 150, 150)); // background and the center of the canvas
Column
use Rimelek\Columns3D\Drawable\Column;
use Rimelek\Columns3D\Drawable\ColumnConfiguration;
use Rimelek\Columns3D\LinearGradient;
// ...
$colc = new ColumnConfiguration();
$colc->setRadius(100);
$colc->setVeticalAngle(0.2); //This is for 3D. Define it between 0 and 1. Greater values mean you look at the column from higher.
$colc->setHeigh(300);
$colc->setWallGradient(new LinearGradient(new Color(0, 0, 0), new Color(255, 255, 255)));
$colc->setColor(new Color(200 200, 200));
$column = new Column($colc);
$canvas->addElement(new PositionedElement($column, 200, 200));
ColumnConfiguration的所有方法都是可选的。
生成器类
也有两个生成器类。
PositionGenerator
这是为了生成椭圆的位置,以便在foreach循环中使用。
$positionGenerator = new PositionGenerator($centerX, $centerY, $step /* Default is 1*/);
foreach ($positionGenerator->call(/* start degree*/ -150, /* end degree */ -30) as list($x, $y)) {
$this->addElement(new PositionedElement($drawable, 200 + $x, 200 + $y));
}
ColumnCircleGenerator
它使用PositionGenerator生成由柱子组成的圆形。
$columnCircleGenerator = new ColumnCircleGenerator($positionGenerator, $columnConfiguration);
foreach($columnCircleGenerator->call(/*degree*/$from, /*degree*/$to, $centerX, $centerY) as $e) {
$canvas->addElement($e);
}