效果图如下:
index.html代码如下:
<!DOCTYPE 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代码如下:
<?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_info = get_image_contents($logo_dir);
if( !$logo_info )return false;
list($logo_width,$logo_height) = $logo_info['size'];
$up_img_info = get_image_contents($file['tmp_name']);
if(!$up_img_info )return false;
list($img_width,$img_height) = $up_img_info['size'];
$logo = imagecreatefromstring($logo_info['img']);
$img = imagecreatefromstring($up_img_info['img']);
$dis_x = $img_width - $logo_width - 10;
$dis_y = $img_height - $logo_height - 10;
imagecopymerge($img,$logo,$dis_x,$dis_y,0,0,$logo_width,$logo_height,$alpha);
$img_types = ['jpeg','png','gif','webp'];
$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);
$save_img_name($img,$img_path);
imagedestroy($img);
imagedestroy($logo);
return $img_path;
}
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']);
};