使用html5 / javascript和php上传/更改头像照片
upload/change avatar photo using html5 / javascript and php?
我正在看这个链接,允许用户将图像拖到头像/个人资料照片上,他们可以将图像放到它上面,这将改变/上传不同的图像。
链接:http://css-tricks.com/html5-drag-and-drop-avatar-changer-with-resizing-and-cropping/
我现在想知道的是我如何使用PHP上传照片,有人能告诉我如何做到这一点吗?由于
html:<title>Drag Avatar</title>
<link rel='stylesheet' href='style.css'>
<div class="page-wrap">
<h1>Drag & Drop Image to Change Avatar</h1>
<div class="profile">
<div class="profile-avatar-wrap">
<img src="images/256.jpg" id="profile-avatar" alt="Image for Profile">
</div>
<h2>Betty Miller</h2>
<div class="location">Palo Alto, CA</div>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Consequatur voluptatem accusantium voluptas doloremque porro temporibus aut rerum possimus cum minus.</p>
</div>
<h3>You could do this with a file input too...</h3>
<input type="file" id="uploader">
</div>
<!-- In real life, these scripts are combined -->
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
<script src="resample.js"></script>
<script src="avatar.js"></script>
resample.js:
var Resample = (function (canvas) {
// (C) WebReflection Mit Style License
function Resample(img, width, height, onresample) {
var
load = typeof img == "string",
i = load || img;
// if string, a new Image is needed
if (load) {
i = new Image;
i.onload = onload;
i.onerror = onerror;
}
i._onresample = onresample;
i._width = width;
i._height = height;
load ? (i.src = img) : onload.call(img);
}
function onerror() {
throw ("not found: " + this.src);
}
function onload() {
var
img = this,
width = img._width,
height = img._height,
onresample = img._onresample
;
// if width and height are both specified
// the resample uses these pixels
// if width is specified but not the height
// the resample respects proportions
// accordingly with orginal size
// same is if there is a height, but no width
var minValue = Math.min(img.height, img.width);
width == null && (width = round(img.width * height / img.height));
height == null && (height = round(img.height * width / img.width));
delete img._onresample;
delete img._width;
delete img._height;
// when we reassign a canvas size
// this clears automatically
// the size should be exactly the same
// of the final image
// so that toDataURL ctx method
// will return the whole canvas as png
// without empty spaces or lines
canvas.width = width;
canvas.height = height;
// drawImage has different overloads
// in this case we need the following one ...
context.drawImage(
// original image
img,
// starting x point
0,
// starting y point
0,
// image width
minValue,
// image height
minValue,
// destination x point
0,
// destination y point
0,
// destination width
width,
// destination height
height
);
// retrieve the canvas content as
// base4 encoded PNG image
// and pass the result to the callback
onresample(canvas.toDataURL("image/png"));
}
var context = canvas.getContext("2d"),
// local scope shortcut
round = Math.round
;
return Resample;
}(
this.document.createElement("canvas"))
);
avatar.js:
// Required for drag and drop file access
jQuery.event.props.push('dataTransfer');
// IIFE to prevent globals
(function() {
var s;
var Avatar = {
settings: {
bod: $("body"),
img: $("#profile-avatar"),
fileInput: $("#uploader")
},
init: function() {
s = Avatar.settings;
Avatar.bindUIActions();
},
bindUIActions: function() {
var timer;
s.bod.on("dragover", function(event) {
clearTimeout(timer);
if (event.currentTarget == s.bod[0]) {
Avatar.showDroppableArea();
}
// Required for drop to work
return false;
});
s.bod.on('dragleave', function(event) {
if (event.currentTarget == s.bod[0]) {
// Flicker protection
timer = setTimeout(function() {
Avatar.hideDroppableArea();
}, 200);
}
});
s.bod.on('drop', function(event) {
// Or else the browser will open the file
event.preventDefault();
Avatar.handleDrop(event.dataTransfer.files);
});
s.fileInput.on('change', function(event) {
Avatar.handleDrop(event.target.files);
});
},
showDroppableArea: function() {
s.bod.addClass("droppable");
},
hideDroppableArea: function() {
s.bod.removeClass("droppable");
},
handleDrop: function(files) {
Avatar.hideDroppableArea();
// Multiple files can be dropped. Lets only deal with the "first" one.
var file = files[0];
if (typeof file !== 'undefined' && file.type.match('image.*')) {
Avatar.resizeImage(file, 256, function(data) {
Avatar.placeImage(data);
});
} else {
alert("That file wasn't an image.");
}
},
resizeImage: function(file, size, callback) {
var fileTracker = new FileReader;
fileTracker.onload = function() {
Resample(
this.result,
size,
size,
callback
);
}
fileTracker.readAsDataURL(file);
fileTracker.onabort = function() {
alert("The upload was aborted.");
}
fileTracker.onerror = function() {
alert("An error occured while reading the file.");
}
},
placeImage: function(data) {
s.img.attr("src", data);
}
}
Avatar.init();
})();
http://php.about.com/od/advancedphp/ss/php_file_upload.htm#step-heading
创建如下表单:
<form enctype="multipart/form-data" action="upload.php" method="POST">
Please choose a file: <input name="uploaded" type="file" /><br />
<input type="submit" value="Upload" />
</form>
php应该是这样的:
$target = "upload/";
$target = $target . basename( $_FILES['uploaded']['name']) ;
$ok=1;
if(move_uploaded_file($_FILES['uploaded']['tmp_name'], $target)){
echo "The file ". basename( $_FILES['uploadedfile']['name']). " has been uploaded";
}
else{
echo "Sorry, there was a problem uploading your file.";
}
更多选项(限制文件大小,扩展名等)请查看链接
相关文章:
- 使用php或javascript从facebook相册URL中删除多余的部分
- 将PHP变量传递给jQuery时遇到问题
- 通过javascript重定向html传递php变量
- 将数组从PHP传递到Javascript
- 如何在php文件中获取$.post-ajax传递的值
- 漂亮照片图片库中的Facebook赞按钮
- 将照片从javascript发送到php
- 如何通过HP或平板电脑拍摄照片,并使用PHP自动上传
- 使用 PHP 或 Javascript 生成自动照片库
- 背景图像旋转器.php + jQuery每4秒显示一次随机照片
- 如何使用裁剪和上传照片 jquery 插件与 php.
- 使用 PHP 使用 Appcelerator Cloud 上传照片
- 从MAC照片应用程序上传到PHP表单
- 如何用php上传数据库和文件夹中的照片
- 用AJAX和PHP保存用户的照片
- 使用html5 / javascript和php上传/更改头像照片
- 农作物封面照片像Google +使用js &PHP
- PHP和JQuery照片上传和裁剪问题
- 如何根据屏幕大小获得合适的照片(PHP)
- 移动用Dropzone.js和PHP上传的照片