在没有面具的PHP中裁剪图像

时间:2014-10-02 22:39:15

标签: php image

我正在尝试将PHP中的图像从正方形裁剪为圆形。我在网上看到很多解决方案,通过屏蔽初始图像并使角落变成不同的颜色来获得圆形图像。然而,这是有问题的,因为将角设置为透明仅仅导致我的初始方形图像。例如,下面的代码会生成带有粉红色角落的圆形图像

result of below code

$image_name = $_POST['filepath'];
$source_image = imagecreatefrompng($image_name);

$source_imagex = imagesx($source_image);
$source_imagey = imagesy($source_image);
$dest_imagex = $_POST['width'];
$dest_imagey = $_POST['height'];
$dest_image = imagecreatetruecolor($dest_imagex, $dest_imagey);
imagealphablending($dest_image, true);
imagecopyresampled($dest_image, $source_image, 0, 0, 0, 0, $dest_imagex, $dest_imagey, $source_imagex, $source_imagey);

header("Content-Type: image/jpeg");

// create masking
$mask = imagecreatetruecolor($source_imagex, $source_imagey);
$mask = imagecreatetruecolor($dest_imagex, $dest_imagey);
$pink = imagecolorallocate($mask, 255, 0, 255);
imagefill($mask, 0, 0, $pink);
$black = imagecolorallocate($mask, 0, 0, 0);
imagecolortransparent($mask, $black);
imagefilledellipse($mask, $dest_imagex/2, $dest_imagey/2, $dest_imagex, $dest_imagey, $black);
imagecopy($dest_image, $mask, 0, 0, 0, 0, $dest_imagex, $dest_imagey);
imagecolortransparent($dest_image, $pink);
imagejpeg($dest_image, NULL);

有没有办法在PHP中裁剪图像,以便实际删除边缘?

2 个答案:

答案 0 :(得分:0)

您必须将角落设置为透明并将其保存为png(您可以使用像broadimage或imagemagick这样的php库,它可以轻松地为您完成此操作)。如果图像文件具有其他形状,则图像文件始终是矩形的,因为其他部分是透明的。

答案 1 :(得分:0)

fyi,把它变成png ...... 首先改为:

header("Content-Type: image/png");

然后这个(在代码的末尾):

imagepng($dest_image, NULL);  //instead of imagejpeg()