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


FloodFillPaintImage x start position and y start position

我是Imagick新来的。我正在尝试从图像的所有角落填充fillpaintimage。

<?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时。

您正在尝试从图像边界外进行填充。

一个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();