Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Imagemagick 按百分比绘制饼图_Imagemagick - Fatal编程技术网

Imagemagick 按百分比绘制饼图

Imagemagick 按百分比绘制饼图,imagemagick,Imagemagick,如何使用ImageMagick按百分比绘制饼图 例如:如果有一个像45这样的值以百分比的形式给出——如何使用Ruby或bash命令绘制一个只有45%的饼图 如果使用ImageMagick的draw操作符,需要如何设置圆弧值?或者如何从整数值计算acr值 例如: 我试图阅读并理解这些示例,但圆弧计算对我来说是个谜。ImageMagick的draw操作实现了中定义的SVG“路径” 不支持通过提供简单的“度”角度参数进行绘制。需要使用三角函数计算每个路径和包含圆弧的子路径的端点坐标。(必须使用相对于当

如何使用ImageMagick按百分比绘制饼图

例如:如果有一个像45这样的值以百分比的形式给出——如何使用Ruby或bash命令绘制一个只有45%的饼图

如果使用ImageMagick的
draw
操作符,需要如何设置圆弧值?或者如何从整数值计算acr值

例如:


我试图阅读并理解这些示例,但圆弧计算对我来说是个谜。

ImageMagick的
draw
操作实现了中定义的SVG“路径”

不支持通过提供简单的“度”角度参数进行绘制。需要使用三角函数计算每个路径和包含圆弧的子路径的端点坐标。(必须使用相对于当前点的绝对值或相对值,具体取决于使用的精确圆弧操作符;另请参见下面的示例。)

一般的 在SVG(以及ImageMagick)中,“路径”表示对象的轮廓。还支持绘制复合路径:复合路径是具有子路径的路径,其中每个子路径由单个
moveto
和一个或多个
line
curve
操作组成

可通过以下操作定义对象的轮廓:

  • 移动到:
    设置一个新的当前点。
    使用
    M
    表示绝对运动,使用
    M
    表示相对运动

  • lineto:
    画一条直线。
    使用
    L
    表示绝对运动,使用
    L
    表示相对运动

  • 曲线to:
    绘制贝塞尔曲线。
    使用
    C
    C
    S
    S
    绘制。(我们不需要这些用于饼图)。
    使用
    Q
    Q
    T
    T
    绘制。(饼图不需要这些)

  • 圆弧:
    画一条椭圆或圆弧。
    使用
    A
    A
    绘制。对于椭圆==圆的特殊情况,我们需要这些饼图

  • 关闭路径:
    通过绘制一条到最后一个移动目标的线来关闭当前形状。 使用
    Z
    Z
    ;两者具有相同的效果:它们结束当前子路径,并导致从当前点到当前子路径的初始点绘制一条自动直线

    • 如果“closepath”后面紧跟着“moveto”,则“moveto”标识下一个子路径的起点
    • 如果“closepath”后面紧接着任何其他命令,则下一个子路径将从与当前子路径相同的初始点开始
单孔楔板示例 这意味着您可以使用以下命令在280x280画布内使用黄色背景绘制一个带有黑色边框的红色饼图楔块:

convert         \
  -size 280x280 xc:yellow \
  -stroke black \
  -fill blue    \
  -draw "path 'M 120,140  L 120,40  A 100,100 0 0,1 137.36,41.52  Z'" \
   red-pie-wedge.jpg
结果:

  • 以下坐标系的原点位于左上角
  • 路径的起点(
    M
    )位于像素坐标(120/140)处
  • 第一行(
    L
    )从那里垂直向上绘制坐标(120/40)
  • 半径为100的圆弧(
    A
    )从坐标(120/40)转到坐标(137.36/41.52)。
    我将把它留给读者去做三角计算,从而得出坐标(137.36/41.52)作为弧的终点。提示:
    • 楔角为10°,100*sin(10°)=17.36,因为本例中的半径为100,因此120+17.36=137.36
    • cos(10°)=0.9848和100*(1-cos(10°)=1.52,因此40+1.52=41.52
  • 从圆弧的端点开始,路径以一条直线闭合(
    Z
    ),返回到路径的起点
  • 完整的饼图示例 您总是需要做一些三角数学来计算绘制所有饼图楔块所需的任何圆弧的端点

    以下是完整饼图的示例,其中包括上述蓝色饼图楔块:

    convert                  \
     -size 280x280 xc:yellow \
     -stroke black           \
     -fill blue   -draw "path 'M 120,140  L 120.00,40.00  A 100,100  0 0,1  137.36,41.52  Z'" \
     -fill silver -draw "path 'M 120,140  L 137.36,41.52  A 100,100  0 0,1  154.20,46.00  Z'" \
     -fill red    -draw "path 'M 136,130  L 170.20,36.00  A 100,100  0 0,1  236.00,130.00 Z'" \
     -fill green  -draw "path 'M 120,140  L 220.00,140.00 A 100,100  0 1,1  120.00,40.00  Z'" \
     -fill black  -stroke none  -pointsize 10 \
     -draw "text 119,37 '10' text 142,41 '10' text 182,36 '70' text 226,156 '270'" \
      piechart.jpg
    
    结果:

    ImageMagick的
    draw
    操作实现中定义的SVG“路径”

    不支持通过提供简单的“度”角度参数进行绘制。需要使用三角函数计算每个路径和包含圆弧的子路径的端点坐标。(必须使用相对于当前点的绝对值或相对值,具体取决于使用的精确圆弧操作符;另请参见下面的示例。)

    一般的 在SVG(以及ImageMagick)中,“路径”表示对象的轮廓。还支持绘制复合路径:复合路径是具有子路径的路径,其中每个子路径由单个
    moveto
    和一个或多个
    line
    curve
    操作组成

    可通过以下操作定义对象的轮廓:

    • 移动到:
      设置一个新的当前点。
      使用
      M
      表示绝对运动,使用
      M
      表示相对运动

    • lineto:
      画一条直线。
      使用
      L
      表示绝对运动,使用
      L
      表示相对运动

    • 曲线to:
      绘制贝塞尔曲线。
      使用
      C
      C
      S
      S
      绘制。(我们没有
      convert                  \
       -size 280x280 xc:yellow \
       -stroke black           \
       -fill blue   -draw "path 'M 120,140  L 120.00,40.00  A 100,100  0 0,1  137.36,41.52  Z'" \
       -fill silver -draw "path 'M 120,140  L 137.36,41.52  A 100,100  0 0,1  154.20,46.00  Z'" \
       -fill red    -draw "path 'M 136,130  L 170.20,36.00  A 100,100  0 0,1  236.00,130.00 Z'" \
       -fill green  -draw "path 'M 120,140  L 220.00,140.00 A 100,100  0 1,1  120.00,40.00  Z'" \
       -fill black  -stroke none  -pointsize 10 \
       -draw "text 119,37 '10' text 142,41 '10' text 182,36 '70' text 226,156 '270'" \
        piechart.jpg