php上传图片并添加水印

效果图如下:

在这里插入图片描述

index.html代码如下:

<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title>上传图片加水印</title>
</head>
<body>
  <!-- action为空表示提交到当前页面  enctype编码格式 -->
  <form action="" method="post" enctype="multipart/form-data">
    <!-- 上传文件的名称为img -->
    <input type="file" name="img" value="image/*">
     <button type="submit" name="button">上传图片加水印</button>
  </form>
</body>
</html>

index.php代码如下:

<?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 "<img src='".$output_img." ' /> <br>";
  }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']);

};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值