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

avatar
作者
筋斗云
阅读量:0
在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. 添加水印

函数定义

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

 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 函数中,你需要传递额外的参数来保留透明度,具体实现可能需要根据实际需求进行调整。

以上就是关于“php图片处理:加水印、缩略图的实现(自定义函数:watermark、th”的问题,朋友们可以点击主页了解更多内容,希望可以够帮助大家!

    广告一刻

    为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!