ImagickDraw::circle

(PECL imagick 2, PECL imagick 3)

ImagickDraw::circle绘制一个圆形

说明

public ImagickDraw::circle(
    float $ox,
    float $oy,
    float $px,
    float $py
): bool
警告

此函数目前没有文档;只有它的参数列表可用。

在图像上绘制一个圆形。

参数

ox

原点 x 坐标

oy

原点 y 坐标

px

周长 x 坐标

py

周长 y 坐标

返回值

不返回值。

示例

示例 #1 ImagickDraw::circle() 示例

<?php
function circle($strokeColor, $fillColor, $backgroundColor, $originX, $originY, $endX, $endY) {

// 创建一个 ImagickDraw 对象来进行绘制。
$draw = new \ImagickDraw();

$strokeColor = new \ImagickPixel($strokeColor);
$fillColor = new \ImagickPixel($fillColor);

$draw->setStrokeOpacity(1);
$draw->setStrokeColor($strokeColor);
$draw->setFillColor($fillColor);

$draw->setStrokeWidth(2);
$draw->setFontSize(72);

$draw->circle($originX, $originY, $endX, $endY);

$imagick = new \Imagick();
$imagick->newImage(500, 500, $backgroundColor);
$imagick->setImageFormat("png");
$imagick->drawImage($draw);

header("Content-Type: image/png");
echo
$imagick->getImageBlob();
}

?>

添加笔记

用户贡献的笔记 2 笔记

10
SkepticaLee
10 年前
这里需要的四个值有点令人困惑。毕竟,圆形由三个值定义:中心的 x、y 坐标和半径 r。

第四个值是冗余的,但必须给出,否则函数将失败。解决这种冗余的一种方法是

<?php
$draw
= new ImagickDraw ();
// 假设 $x 和 $y 是中心的坐标,$r 是半径:
$draw->circle ($x, $y, $x + $r, $y);
?>

有很多操作与最后一个操作相同,包括
<?php
$draw
->circle ($x, $y, $x, $y + $r);
$draw->circle ($x, $y, $x - $r, $y);
$draw->circle ($x, $y, $x, $y - $r);
// 等等,等等。
?>

希望这有帮助。
-7
christian dot reinecke at web dot de
15 年前
这个例子创建了一个圆形,一部分是绿色,一部分是红色,使用类似于 Photoshop 中的透明度蒙版。drawImage() 是一个用于调试输出的快速助手(请参阅代码注释),可以帮助您重现该过程。

<?php
function drawImage(Imagick $im) {
$im->setCompressionQuality(100);
$im->setImageFormat("jpg");
header("Content-Type: image/" . $im->getImageFormat());
echo
$im;
exit;
}

// 定义红色/绿色层
$layer1 = new Imagick();
$layer1->newImage(100, 100, "none");

$red = new ImagickDraw();
$red->setFillColor("#FF0000");
$red->rectangle(0, 0, 50, 100);

$green = new ImagickDraw();
$green->setFillColor("#00FF00");
$green->rectangle(50, 0, 100, 100);

$layer1->drawImage($red);
$layer1->drawImage($green);

# 调试输出:两个矩形
# drawImage($layer1);

// 定义圆形遮罩
$layer2 = new Imagick();
$layer2->newImage(100, 100, "none");

$circle = new ImagickDraw();
$circle->setFillColor("#FFFFFF");
$circle->circle(50, 50, 48, 98);

$layer2->drawImage($circle);

# 调试输出:遮罩
# drawImage($layer2);

// 使用遮罩
$layer1->compositeImage($layer2, Imagick::COMPOSITE_DSTIN, 0, 0);

# 调试输出:使用遮罩的结果
# drawImage($layer1);

// 定义背景
$layer3 = new Imagick();
$layer3->newImage(100, 100, "none");

$layer3->compositeImage($layer1, Imagick::COMPOSITE_DEFAULT, 0, 0);

// 定义环形背景
$layer4 = new Imagick();
$layer4->newImage(100, 100, "white"); // 这是我们的背景

$ring1 = new ImagickDraw();
$ring1->setFillColor("black");
$ring1->circle(50, 50, 50, 99);

$layer4->drawImage($ring1);

# 调试输出:这是一个黑色圆圈(不是我们的遮罩,与遮罩类似,但稍微小一些)
# drawImage($layer4);

// 使用黑色圆圈作为背景(这将创建我们的圆圈边框)
$layer4->compositeImage($layer3, Imagick::COMPOSITE_DEFAULT, 0, 0);

# 调试输出:现在我们的圆圈边框出现了
# drawImage($layer4);

// 绘制红色和绿色矩形之间的分隔线(现在是半圆)
$line = new ImagickDraw();
$line->setStrokeWidth(1);
$line->setStrokeColor("black");
$line->line(50, 1, 50, 99);

// 添加分隔线
$layer4->drawImage($line);

drawImage($layer4);
?>

要了解 COMPOSITE_* 常量如何影响图像合并过程,请参见此处
https://imagemagick.org.cn/Usage/compose/#duff-porter
To Top