我想将矩形图像裁剪为非矩形图像。我意识到,如果你完全从字面上理解,那是不可能的。我想要最终得到的是图像X,在透明背景上裁剪成Y形。
比方说,我想拍一张爱达荷州旗的照片并将其剪裁成爱达荷州的形状。我想我会做这样的事情:
步骤1显然是手动完成的,但其余部分将以编程方式完成。我认为我一般都有正确的想法,但我不知道我是如何处理细节的。有人能指出我正确的方向吗?
就实现技术而言,我是一个PHP人员,所以使用gdLibrary或者与PHP一起工作的东西可能是我去的最佳方式。
答案 0 :(得分:2)
这样做的通常方法是使用白色(全1)和黑色(全0)代替透明和不透明。然后你和你想要裁剪的图像和那个图像。结果是0是轮廓图像的0,而另一个图像的轮廓是1。
您可能还需要反转轮廓图像,并将反转版本与背景图像反转。然后,您将背景图像与前景图像进行对比,以生成爱达荷(使用您的示例)形状的前景图像和其他地方的背景图像的合成。
根据您正在使用的库的功能,很可能直接提供这种功能。例如,Windows在MaskBlt
函数中具有此功能。
答案 1 :(得分:2)
我认为通过简单地添加位掩码或alpha通道会更容易。在这种情况下,您将使用形状的负面罩图像,然后将其应用于常规图像作为蒙版,然后以透明格式保存。我从来没有用GD或ImageMagick实际做过这个,但我认为它可以像Jerry所说的那样。
这里的博客文章是一篇类似的SO问题,可能有所帮助:http://about.phalacee.com/geek/creating-mask-layers-using-php-gd
答案 2 :(得分:1)
在php中使用ImageMagick可能是你最好的选择:
$source = IMagick("sourcefile");
$mask = IMagick("maskfile");
$mask->adaptiveResizeImage($source->getImageWidth(), $source->getImageHeight(), true);
$source->compositeImage($mask, imagick::COMPOSITE_MULTIPLY, 0, 0);
$source->writeImage("newfile");
$source->clear();
$source->destroy();
sourcefile必须是您想要的源图像,maskfile必须是一个掩码文件,它具有为您想要的形状正确设置的alpha通道。