php上传图片并添加水印

效果图如下:

php上传图片并添加水印_第1张图片

index.html代码如下:


<html>
<head>
  <meta charset="UTF-8">
  <title>上传图片加水印title>
head>
<body>
  
  <form action="" method="post" enctype="multipart/form-data">
    
    <input type="file" name="img" value="image/*">
     <button type="submit" name="button">上传图片加水印button>
  form>
body>
html>

index.php代码如下:



//获取图片信息函数
function get_image_contents($file){
  $data['img'] = file_get_contents($file);
  if( !$data['img'] ){
    return false;
  };
  $data['size'] = getimagesize($file);
  return $data;
};

//生成水印并上传图片函数
function upload_watermark_image(
  $file,
  $output_dir = './output_img/',
  $alpha = 20,
  $logo_dir= './watermark/logo.png'
){
  $file_type = explode('/',$file['type']);
  //判断文件类型 正则匹配
  if(!preg_match('/^image/',$file_type[0])){
    return false;
  };
  //获取水印logo图片信息
  $logo_info = get_image_contents($logo_dir);
  //是否获取失败
  if( !$logo_info )return false;
  //获取水印logo图片宽高
  list($logo_width,$logo_height) = $logo_info['size'];

  //打开上传的图像信息
  $up_img_info = get_image_contents($file['tmp_name']);
  //是否获取失败
  if(!$up_img_info )return false;
  //获取水印logo图片宽高
  list($img_width,$img_height) = $up_img_info['size'];

  //imagecreatefromstring — 从字符串中的图像流新建一图像  生成水印 与 生成上传图片
  $logo = imagecreatefromstring($logo_info['img']);
  $img = imagecreatefromstring($up_img_info['img']);

  //生成的水印在右下角(10,10)位置
  $dis_x = $img_width - $logo_width - 10;
  $dis_y = $img_height - $logo_height - 10;

  //imagecopymerge(上传图片,水印,位置,水印宽,水印高,透明度0~100) — 拷贝并合并图像的一部分
  imagecopymerge($img,$logo,$dis_x,$dis_y,0,0,$logo_width,$logo_height,$alpha);

  //上传图片的种类
  $img_types = ['jpeg','png','gif','webp'];
  //获取图片后缀 是否在种类内 不是默认上传png格式图片
  $img_type = (in_array($file_type[1],$img_types)) ? $file_type[1] : 'png';
  //设置上传不同图片的函数名调用 .号是字符串连接符
  $save_img_name = 'image'.$img_type;
  //保存图片路径名称
  $img_path = $output_dir.uniqid().'.'.$img_type;
  //该目录是否存在  || 不存在创建该目录
  is_dir($output_dir) || mkdir($output_dir);
  //上传生成好的有水印图片 如:imagepng(上传的图片,上传的路径)
  $save_img_name($img,$img_path);
  //用完后 销毁与内存关联的图像资源
  imagedestroy($img);
  imagedestroy($logo);
  //输出上传的图片地址
  return $img_path;
}


//empty():检查一个变量是否为空  /  $_FILES数组:接收上传的文件
if(empty($_FILES)){ //提交的文件是否为空
  //没有文件则显示提交页面
  include 'index.html';
}else{
  $name = 'img';
  //获取上传的图片信息
  $file = $_FILES[$name];

  $output_img = upload_watermark_image($file);

  if($output_img){
    echo " 
"
; }else{ echo "这不是图片文件"; } //原图 //imagecreatefromstring — 从字符串中的图像流新建一图像 //file_get_contents — 将整个文件读入一个字符串 ($file['tmp_name']是图片地址) $dst_image = imagecreatefromstring(file_get_contents($file['tmp_name'])); //获取图片宽高 list($file_width,$file_height) = getimagesize($file['tmp_name']); };

你可能感兴趣的:(PHP,PHP)