引言

准备工作

在开始之前,请确保你的服务器上已安装PHP和GD库。GD库是PHP中处理图像的一个扩展,可以实现图像的缩放、裁剪、添加文字等功能。

方法一:使用GD库将PNG图片背景变为透明

function pngToTransparent($sourceImage, $outputImage) {
    // 获取原图像信息
    list($width, $height) = getimagesize($sourceImage);
    // 创建一个新的图片资源
    $srcImage = imagecreatefrompng($sourceImage);
    // 设置透明颜色
    $transparentColor = imagecolorallocatealpha($srcImage, 255, 255, 255, 127);
    // 创建一个白色透明的画布
    imagecolortransparent($srcImage, $transparentColor);
    // 裁剪掉白色背景
    $newImage = imagecreatetruecolor($width, $height);
    imagealphablending($newImage, false);
    imagesavealpha($newImage, true);
    imagefill($newImage, 0, 0, imagecolorallocatealpha($newImage, 255, 255, 255, 0));
    // 合成图片
    imagecopy($newImage, $srcImage, 0, 0, 0, 0, $width, $height);
    // 输出或保存图片
    imagepng($newImage, $outputImage);
    // 释放内存
    imagedestroy($srcImage);
    imagedestroy($newImage);
}
pngToTransparent('source.png', 'output.png');

方法二:使用GD库将GIF图片背景变为透明

function gifToTransparent($sourceImage, $outputImage) {
    // 获取原图像信息
    list($width, $height) = getimagesize($sourceImage);
    // 创建一个新的图片资源
    $srcImage = imagecreatefromgif($sourceImage);
    // 创建一个白色透明的画布
    $newImage = imagecreatetruecolor($width, $height);
    imagealphablending($newImage, true);
    imagesavealpha($newImage, true);
    // 裁剪掉白色背景
    imagefill($newImage, 0, 0, imagecolorallocatealpha($newImage, 255, 255, 255, 127));
    // 合成图片
    imagecopy($newImage, $srcImage, 0, 0, 0, 0, $width, $height);
    // 输出或保存图片
    imagegif($newImage, $outputImage);
    // 释放内存
    imagedestroy($srcImage);
    imagedestroy($newImage);
}

方法三:使用ImageMagick库实现图片背景透明化

除了GD库,PHP还可以使用ImageMagick库来处理图像。以下是一个使用ImageMagick库的示例:

function imageMagickTransparent($sourceImage, $outputImage) {
    // 加载图片
    $image = new Imagick($sourceImage);
    // 设置透明背景
    $image->setImageAlphaChannel(Imagick::ALPHACHANNEL_SET);
    $image->setAlphaChannel(Imagick::ALPHACHANNEL_OPAQUE);
    // 裁剪掉白色背景
    $image->cropimage(0, 0, $image->getImageWidth(), $image->getImageHeight());
    // 输出或保存图片
    $image->writeImage($outputImage);
    // 释放内存
    $image->clear();
    $image->destroy();
}

总结