【发布时间】:2012-06-04 00:42:10
【问题描述】:
所以我有这个 IM 命令($plistnew 是您对多边形所期望的坐标列表):
convert in.png ( -size 101x101 xc:black -fill white \
-draw "polygon $plistnew" -alpha off \
-crop 101x100+0+1 +repage \
-scale 101x1! ) \
-clut out.png
所以我需要将其转换为纯 PHP。除了 setImageAlphaChannel() 的一个剩余问题之外,我已经非常成功了。
无论如何,这是我的 PHP:
$tmpa = new Imagick(); // for the image I'm assuming is generated inside the parens
$tmpa->newPseudoImage(101, 101, 'canvas:black'); // xc:black
$draw = new ImagickDraw();
$draw->setFillColor(new ImagickPixel('white')); // -fill white
$draw->polygon($points); // -draw "polygon $plistnew"
$tmpa->drawImage($draw);
$tmpa->setImageAlphaChannel(self::ALPHACHANNEL_DEACTIVATE); // -alpha off
$tmpa->cropImage(101, 100, 0, 1); // -crop 101x100+0+1
// +repage
$tmpa->resetImagePage('');
$tmpa->scaleImage(101, 1); // -scale 101x1! -- I think scaleImage() ignores ratio per the ! by default ... I'm not positive though.
$im = new Imagick('in.png');
$im->clutImage($tmpa); // -clut
$im->writeImage('out.png');
$tmpa->destroy();
$points 变量是一个正确形成的数组,可与 ImagickDraw::polygon() 一起使用。
这一行:
$tmpa->setImageAlphaChannel(self::ALPHACHANNEL_DEACTIVATE);
完全不工作。它会产生这个错误:
PHP Fatal error: Uncaught exception 'ImagickException' with message 'Unable to set image alpha channel'
当我评论这条线时,一切似乎都正常工作。如何防止此错误?
【问题讨论】:
-
您可以在此处找到所有选项:imagemagick.org/script/… 101x1!表示图像大小为 101x1,纵横比被忽略。 +repage "reset the virtual canvas" 也就是你看不到的图像画布从 101x101 调整为 101x1。如果您在之前和之后在另一个程序中检查了图像,您会在新图像周围看到一个棋盘格图像;这已被删除。
-
谢谢,我已根据您提供的信息更新以反映新的代码/cmets。
-
你的多边形值是多少,我会试试你的代码,因为它可能是版本问题。
-
啊,我对 $tmpA 的看法......这只是一个正在处理的临时图像,在这种情况下这只是输入图像。这是一个更大的脚本的一部分,它也进行一些其他处理。我会很快编辑的。此外,多边形值:4,0 27,33 46,53 62,73 100,86
-
我得走了;我对您有不同的问题,并认为这是版本问题。我无法使用 newPseudoImage 并且还卡在 setImageAlphaChannel 上。当注释掉我的 $this-> 你有没有考虑过使用 exec() 的另一个错误?
标签: php image-processing imagemagick imagick