一推网

当前位置: 首页 > 知识问答 > 如何利用PHP自定义函数实现图片加水印和生成缩略图?

知识问答

如何利用PHP自定义函数实现图片加水印和生成缩略图?

2025-09-21 15:12:18 来源:互联网转载
在PHP中,可以使用GD库或Imagick库来处理图片。下面是使用GD库实现加水印和生成缩略图的自定义函数:,,``php,function watermark($source_image, $watermark_text) {, // 加载源图片, $source = imagecreatefromjpeg($source_image);, $width = imagesx($source);, $height = imagesy($source);,, // 创建水印文字图像, $watermark = imagecreatetruecolor($width, $height);, $font = 4; // 字体大小, $red = imagecolorallocate($watermark, 255, 0, 0);, imagestring($watermark, $font, $width 100, $height 20, $watermark_text, $red);,, // 合并水印到源图片, imagecopymerge($source, $watermark, 0, 0, 0, 0, $width, $height, 100);,, // 保存并输出加水印后的图片, imagejpeg($source);,, // 释放内存, imagedestroy($source);, imagedestroy($watermark);,},,function createThumbnail($source_image, $thumbnail_image, $desired_width, $desired_height) {, // 加载源图片, $source = imagecreatefromjpeg($source_image);, list($current_width, $current_height) = getimagesize($source_image);,, // 计算缩放比例, $scale = min($desired_width / $current_width, $desired_height / $current_height);,, // 创建缩略图, $thumbnail = imagecreatetruecolor($desired_width, $desired_height);, imagecopyresampled($thumbnail, $source, 0, 0, 0, 0, $desired_width, $desired_height, $current_width, $current_height);,, // 保存并输出缩略图, imagejpeg($thumbnail, $thumbnail_image);,, // 释放内存, imagedestroy($source);, imagedestroy($thumbnail);,},`,,你可以调用watermark()函数来给图片添加水印,$source_image是源图片的路径,$watermark_text是要添加的水印文本。调用createThumbnail()函数可以生成指定大小的缩略图,$source_image是源图片的路径,$thumbnail_image是生成的缩略图保存路径,$desired_width$desired_height`分别是期望的缩略图宽度和高度。PHP图片处理:加水印、缩略图的实现

1. 添加水印

函数定义

function watermark($source_image, $watermark_image, $output_image) {    // 获取源图像和水印图像的信息    list($source_width, $source_height, $source_type) = getimagesize($source_image);    list($watermark_width, $watermark_height, $watermark_type) = getimagesize($watermark_image);    // 创建一个新的图像实例,用于输出结果    $output = imagecreatetruecolor($source_width, $source_height);    // 根据源图像类型选择相应的图像创建函数    switch ($source_type) {        case IMAGETYPE_PNG:            $source = imagecreatefrompng($source_image);            break;        case IMAGETYPE_JPEG:            $source = imagecreatefromjpeg($source_image);            break;        case IMAGETYPE_GIF:            $source = imagecreatefromgif($source_image);            break;        default:            return false;    }    // 将源图像复制到输出图像上    imagecopyresampled($output, $source, 0, 0, 0, 0, $source_width, $source_height, $source_width, $source_height);    // 创建水印图像实例    switch ($watermark_type) {        case IMAGETYPE_PNG:            $watermark = imagecreatefrompng($watermark_image);            break;        case IMAGETYPE_JPEG:            $watermark = imagecreatefromjpeg($watermark_image);            break;        case IMAGETYPE_GIF:            $watermark = imagecreatefromgif($watermark_image);            break;        default:            return false;    }    // 计算水印位置(右下角)    $dest_x = $source_width $watermark_width;    $dest_y = $source_height $watermark_height;    // 将水印图像复制到输出图像上    imagecopy($output, $watermark, $dest_x, $dest_y, 0, 0, $watermark_width, $watermark_height);    // 保存输出图像    switch ($source_type) {        case IMAGETYPE_PNG:            imagepng($output, $output_image);            break;        case IMAGETYPE_JPEG:            imagejpeg($output, $output_image);            break;        case IMAGETYPE_GIF:            imagegif($output, $output_image);            break;    }    // 销毁图像资源    imagedestroy($source);    imagedestroy($watermark);    imagedestroy($output);    return true;}

使用示例

$source_image = 'path/to/source/image.jpg';$watermark_image = 'path/to/watermark/image.png';$output_image = 'path/to/output/image.jpg';if (watermark($source_image, $watermark_image, $output_image)) {    echo "Watermark added successfully!";} else {    echo "Failed to add watermark.";}

2. 生成缩略图

函数定义

function th($source_image, $output_image, $new_width, $new_height) {    // 获取源图像信息    list($source_width, $source_height, $source_type) = getimagesize($source_image);    // 创建一个新的图像实例,用于输出结果    $output = imagecreatetruecolor($new_width, $new_height);    // 根据源图像类型选择相应的图像创建函数    switch ($source_type) {        case IMAGETYPE_PNG:            $source = imagecreatefrompng($source_image);            break;        case IMAGETYPE_JPEG:            $source = imagecreatefromjpeg($source_image);            break;        case IMAGETYPE_GIF:            $source = imagecreatefromgif($source_image);            break;        default:            return false;    }    // 调整源图像大小并复制到输出图像上    imagecopyresampled($output, $source, 0, 0, 0, 0, $new_width, $new_height, $source_width, $source_height);    // 保存输出图像    switch ($source_type) {        case IMAGETYPE_PNG:            imagepng($output, $output_image);            break;        case IMAGETYPE_JPEG:            imagejpeg($output, $output_image);            break;        case IMAGETYPE_GIF:            imagegif($output, $output_image);            break;    }    // 销毁图像资源    imagedestroy($source);    imagedestroy($output);    return true;}

使用示例

$source_image = 'path/to/source/image.jpg';$output_image = 'path/to/output/thumbnail.jpg';$new_width = 150; // 缩略图宽度$new_height = 100; // 缩略图高度if (th($source_image, $output_image, $new_width, $new_height)) {    echo "Thumbnail created successfully!";} else {    echo "Failed to create thumbnail.";}

相关问题与解答栏目

1、问题: 如果我想在水印中包含透明部分,应该如何修改代码?

答案: 对于带有透明度的水印图像,你需要确保源图像和新创建的水印图像都是支持透明度的类型,你可以使用imagealphablendingimagesavealpha 函数来处理透明度,在imagecopy 函数中,你需要传递额外的参数来保留透明度,具体实现可能需要根据实际需求进行调整。

上一篇:服务器CPU与普通电脑CPU有何不同?

下一篇:婴儿护理师的职责与就业前景