php 生成水印图
示例
$src = "images/2.jpg"; $water = "images/i1.png"; watermark($src, $water);
函数
/** * @param $src 需要处理的图片 * @param $water 水印图 * @param int $pos 水印图位置 * @return mixed */ function watermark($src, $water, $pos = 5) { //1.获取图片信息 $src_arr = getimagesize($src); $src_width = $src_arr['0']; $src_height = $src_arr['1']; $water_arr = getimagesize($water); list($water_width, $water_height) = $water_arr; //2.获取图片资源 $src_im = imagecreatefromAll($src); $water_im = imagecreatefromAll($water); //3.水印图片的位置 switch ($pos) { case 1://左上角 $dst_x = 0; $dst_y = 0; break; case 2://右上角 $dst_x = $src_width - $water_width; $dst_y = 0; break; case 3://左下角 $dst_x = 0; $dst_y = $src_height - $water_height; break; case 4://右下角 $dst_x = $src_width - $water_width; $dst_y = $src_height - $water_height; break; case 5: //中心位置 $dst_x = ($src_width - $water_width) / 2; $dst_y = ($src_height - $water_height) / 2; break; default ://随机位置 $dst_x = rand(0, $src_width - $water_width); $dst_y = rand(0, $src_height - $water_height); break; } //3.添加半透明水印 imagecopymerge($src_im, $water_im, $dst_x, $dst_y, 0, 0, $water_width, $water_height, 80); //4.生成文件或在浏览器显示 //header('content-type:image/jpeg'); //imagejpeg($src_im); //生成文件 return createImage($src, $src_im, 'png', 'water_'); }
/** * 获取图片资源 * @param $src 图片路径 * @return bool|resource */ function imageCreateFromAll($src) { $src_arr = getimagesize($src); switch ($src_arr['mime']) { case 'image/jpeg': return imagecreatefromjpeg($src); case 'image/png': return imagecreatefrompng($src); case 'image/gif': return imagecreatefromgif($src); case 'image/bmp': return imagecreatefrombmp($src); // case 'image/wbmp': // return imagecreatefromwbmp($src); // case 'image/webp': // return imagecreatefromwebp($src); // case 'image/x-xbitmap': // return imagecreatefromxbm($src); // case 'image/x-xpixmap': // return imagecreatefromxpm($src); default : return false; } } /** * 生成图片 * @param $src 原图的路径 * @param $im 目标图的资源 * @param string $ext 生成图片的扩展,默认是原图扩展名 * @param string $prefix 生成文件的前缀 * @param int $quality 生成jpg格式图片的质量 * @param bool $file 是否生成文件 * @return bool|string */ function createImage($src, $im, $ext = '', $prefix = 'thumb_', $quality = 80, $file = true) { $src_path = pathinfo($src); //$ext 为空,和原图扩展名相同 if (empty($ext)) { $ext = $src_path['extension']; } $new_file = $src_path['dirname'] . '/' . $prefix . $src_path['filename'] . '.' . $ext; if ($file) { switch (strtolower($ext)) { case 'jpg': imagejpeg($im, $new_file, $quality); return $new_file; case 'png': imagepng($im, $new_file); return $new_file; case 'gif'; imagegif($im, $new_file); return $new_file; default: return false; } } else { switch (strtolower($ext)) { case 'jpg': header('content-type:image/jpeg'); imagejpeg($im, null, $quality); return $new_file; case 'png': header('content-type:image/png'); imagepng($im); return $new_file; case 'gif'; header('content-type:image/gif'); imagegif($im); return $new_file; default: return false; } } }