阅读量: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. 添加水印
函数定义
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、问题: 如果我想在水印中包含透明部分,应该如何修改代码?
答案: 对于带有透明度的水印图像,你需要确保源图像和新创建的水印图像都是支持透明度的类型,你可以使用imagealphablending
和imagesavealpha
函数来处理透明度,在imagecopy
函数中,你需要传递额外的参数来保留透明度,具体实现可能需要根据实际需求进行调整。
以上就是关于“php图片处理:加水印、缩略图的实现(自定义函数:watermark、th”的问题,朋友们可以点击主页了解更多内容,希望可以够帮助大家!