实现一个小功能:上传图片后自动给图片加水印,结果打印出乱码
我初步猜测可能是header头的问题,但是不知道怎么解决
下面是关键代码
index.php
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<title>ajax实现附件上传</title>
<meta name="description" content="">
<meta name="keywords" content="">
<link href="" rel="stylesheet">
</head>
<script type="text/javascript">
window.onload= function(){
var fm = document.getElementsByTagName('form')[0];
fm.onsubmit = function(evt){
var url='./upload.php?s='+Math.random();
var fd = new FormData(this);
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function(){
if(xhr.readyState == 4){
alert(xhr.responseText);
}
}
xhr.open('post',url);
xhr.send(fd);
evt.preventDefault();
}
}
</script>
<body>
<h2>无刷新方式实现附件上传</h2>
<form method="post" action="" enctype="multipart/form-data">
<input type="file" name="avator">
<input type="submit" name="submit" value="上传">
</form>
</body>
</html>
**upload.php**
<?php
/**
* @authors zhangle (319126583@qq.com)
* @date 2017-09-04 11:10:21
*/
header('content-type:text/html;charset=utf-8');
require 'config.php';
if(isset($_POST)){
$myupfile = $_FILES['avator'];
// $maxsize = 2;
$arr_mime = ['image/jpeg','image/png','image/gif'];
$dir = './upload/';
@mkdir($dir);//创建目录
$src_file = './logo.gif'; //设置水印图片
uploadfile($myupfile,$arr_mime,$dir,$src_file);
}else{
echo "<script>alert('非法上传');location.href='index.php'</script>";
}
config.php
<?php
function uploadfile($myupfile,$arr_mime,$dir,$src_file){
if($myupfile['error']){
switch ($myupfile['error']) {
case '1':
echo '文件大小比php.ini中upload_max_filesize指定值要大';
break;
case '2':
echo '文件的小比表单的MAX_FILE_SIZE指定的值大';
break;
case '3':
echo '文件上传不完整(可能因为请求时间过长被终止)';
break;
case '4':
echo '没有文件随着这个请求上传';
break;
default:
echo '未知错误';
break;
}
}
if(!is_uploaded_file($myupfile['tmp_name'])){
echo '上传有错误,请重新上传!';
}else{
$fs = finfo_open(FILEINFO_MIME_TYPE);
$mime = finfo_file($fs,$myupfile['tmp_name']);
$ext = substr($mime,strrpos($mime,'/')+1);
$name = date('YmdHis').'-'.uniqid().'.'.$ext;
$dir_name = $dir.$name;
if(in_array($mime,$arr_mime)){
if(move_uploaded_file($myupfile['tmp_name'],$dir_name)){
echo "上传成功!";
switch ($ext) {
case 'jpeg':
$dst_img = imagecreatefromjpeg($dir_name);
break;
case 'png':
$dst_img = imagecreatefrompng($dir_name);
break;
case 'gif':
$dst_img = imagecreatefromgif($dir_name);
break;
default:
break;
}
$src_img = imagecreatefromgif($src_file);
list($src_w, $src_h ) = getimagesize($src_file);
list($dst_w, $dst_h ) = getimagesize($dir_name);
$dst_x = ($dst_w - $src_w)/2;
$dst_y = ($dst_h - $src_h)/2;
$src_x = 0;
$src_y = 0;
$pct = 50; //设置水印透明度
imagecopymerge($dst_img, $src_img, $dst_x, $dst_y, $src_x, $src_y, $src_w, $src_h, $pct);
ob_clean();
switch ($ext) {
case 'jpeg':
header('content-type: image/jpeg');
imagejpeg($dst_img);
break;
case 'png':
header('content-type:image/png');
imagepng($dst_img);
break;
case 'gif':
header('content-type:image/gif');
imagegif($dst_img);
break;
default:
break;
}
imagedestroy($dst_img);
imagedestroy($src_img);
}else{
echo '上传失败!';
}
}else{
echo '文件类型不正确,请重新上传';
}
}
}
imagepng|* 是输出一个png格式的文件.你把它输出给reponseText不乱码才怪.
也不是这么来的. 你上传成功,水印加好了.把存这个图片的地址返回就行了.为什么去输出源图片(二进制)?