FloodFillPaintImage x开始位置和y开始位置

时间:2015-07-17 12:25:51

标签: php imagemagick imagick

我是Imagick的新人。我试图从图像的所有角落泛滥填充图像。

<?php
$im = new Imagick("test.jpg");
$im->scaleImage(0, 200);
$backgroundColor = $im->getImageBackgroundColor();
$im->floodfillPaintImage(new ImagickPixel('transparent'),300,$backgroundColor,0,0,false);
$im->floodfillPaintImage(new ImagickPixel('transparent'),300,$backgroundColor,200,0,false);
$im->trimImage(10);
$im->writeImage("test2.jpg");
$im->destroy();

在第一种情况下,当x开始位置和y开始位置为0和0尊重时,它起作用。但是当我尝试x开始位置为200并且y开始位置为0.它会抛出错误。

我的图像假设是200x200,我的代码假设运行没有任何错误。但是,它并没有运行。

当我将x开始位置设为150且y开始位置为0.然后它可以工作。

1 个答案:

答案 0 :(得分:0)

您正尝试从图像边界外部进行泛洪填充。

200x200像素图像的坐标范围为(0,0)到(199,199)。

更一般地说,W * H像素图像的坐标范围为(0,0)到(W-1,H-1)。

阅读完评论后,您似乎希望图像缩放到200x200像素。希望以下内容有所帮助:

$im = new Imagick("test.jpg");

$im->scaleImage(0, 200);
list($w, $h) = array_values($im->getImageGeometry());

$backgroundColor  = $im->getImageBackgroundColor();
$transparentColor = new ImagickPixel('transparent');

$im->floodfillPaintImage($transparentColor, 300, $backgroundColor, 0,      0,      false);
$im->floodfillPaintImage($transparentColor, 300, $backgroundColor, $w - 1, 0,      false);
$im->floodfillPaintImage($transparentColor, 300, $backgroundColor, 0,      $h - 1, false);
$im->floodfillPaintImage($transparentColor, 300, $backgroundColor, $w - 1, $h - 1, false);

$im->trimImage(10);
$im->writeImage("test2.jpg");

$im->destroy();