如何利用PHP自定义函数实现图片加水印和生成缩略图?
创始人
2025-02-13 14:34:13
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”的问题,朋友们可以点击主页了解更多内容,希望可以够帮助大家!

相关内容

热门资讯

透视科技!hhpoker有辅助... 透视科技!hhpoker有辅助吗,一向真的是有挂(透视)玩家教你(有挂方法)1、首先打开hhpoke...
透视攻略"wepok... 透视攻略"wepoker辅助透视软件"确实是真的有挂(透视)2025新版(有挂揭秘)wepoker辅...
透视智能ai!aapoker透... 透视智能ai!aapoker透视插件(透视)透视软件(一直有挂)1、每一步都需要思考,不同水平的挑战...
透视科技!德普之星私人局辅助器... 透视科技!德普之星私人局辅助器,切实真的是有挂(透视)技巧教程(有挂工具)1、德普之星私人局辅助器a...
透视私人局!aapoker辅助... 透视私人局!aapoker辅助器怎么用(透视)万能辅助器(切实真的是有挂)1、让任何用户在无需aap...
透视黑科技"红龙po... 透视黑科技"红龙poker有辅助吗"都是真的有挂(透视)力荐教程(有挂工具)1、这是跨平台的红龙po...
透视规律!wpk辅助购买,果然... 透视规律!wpk辅助购买,果然是真的有挂(透视)安装教程(有挂解密)1、wpk辅助购买透视辅助简单,...
透视线上!aapoker怎么控... 透视线上!aapoker怎么控制牌(透视)插件(都是存在有挂)1、每一步都需要思考,不同水平的挑战会...
透视黑科技"竞技联盟... 透视黑科技"竞技联盟透视"确实有挂(透视)必赢方法(有挂教程);1、竞技联盟透视透视辅助简单,竞技联...
透视神器!约局吧游戏挂,总是是... 透视神器!约局吧游戏挂,总是是真的有挂(透视)透明挂教程(有挂细节);约局吧游戏挂软件透明挂微扑克w...