注意下面页面代码里,每一个注释几乎都是讲的一个实用而又强大有趣的技巧哦!!看到这些,有没有人会激动下下,给点赞美呢^_^
/*
* 用到的几个样式
*/
<style>
/* 全兼容的图像自动垂直居中的关键样式哦^_^ */
.imgmid {
display: inline-block;
*display: inline;
*zoom: 1;
height: 100%;
width: 1px;
margin-left: -1px;
vertical-align: middle;
}
/* 图片等比自适应大小的css实现,只要设定最大宽度最大高度就可以了,比用JS实现来的方便轻巧高效多了吧^_^ */
.autoSize {
max-width: 360px;
max-height: 240px;
vertical-align: middle;
}
.activeImg {
position: absolute;
}
/* 方块状的容器,只显示圆形区域的样式哦^_^ */
.showImg {
width: 100px;
height: 100px;
display: none;
position: relative;
overflow: hidden;
float: left;
border-radius: 50%;
behavior: url(css/PIE.htc);
float:left;
clear:right;
}
</style>
<form method="post" id="fmPhoto" target="hidFrame" enctype="multipart/form-data" action="ReciveUpload">
<div class="fmc">
/* 无刷新表单提交的关键——隐藏的iframe,表单的target指向这个隐藏的iframe */
<iframe id="hidFrame" name="hidFrame" style="display:none"></iframe>
<div style="width: 360px; height: 240px; position: relative; float:left;">
<div style="width: 360px; height: 240px; position: relative; overflow: hidden; float: left; text-align:center;">
<img alt="图片格式为jpg,最大为2M" id="imgPhoto" src="@srcPhoto" class="autoSize" /><span class="imgmid"></span>/*这个span就是图片垂直居中的关键*/
</div>
<img alt="" id="imgScroll" src="~/Images/img_scroll.png" style="z-index: 100; left: 0; top: 0; position: absolute;" />
</div>
<div class="showImg">
<img alt="" id="imgShow" src="@srcPhoto" style="position: absolute;" />
</div>
<div style="color:Gray;clear:left; margin-bottom:20px;">图片格式为jpg,图片最大为2M</div>
/* 可以自定义样式的file控件,就是这么简单,自定义一个div,然后里面放一个占满大小的全透明file标签,怎么样,崇拜我吧^_^ */
<div style ="border:1px solid gray;position:relative; width:100px; height:40px;line-height:40px; text-align:center; vertical-align:middle;font-size:18px;">请选择图像
<input type="file" id="fileUpload" name="ImageFile" style="position: absolute; width: 100%; height: 100%; filter: alpha(opacity=0); opacity: 0; top: 0; left: 0;" />
</div>
<input type="hidden" id="ImgWidth" name="ImgWidth" />
<input type="hidden" id="ImgHeight" name="ImgHeight" />
<input type="hidden" id="ImgTop" name="ImgTop" />
<input type="hidden" id="ImgLeft" name="ImgLeft" />
</div>
<div class="mb">
<input type="submit" class="lang-btn" id="btnSubmit" value="确定" />
<a href="javascript:;" class="lang-btn lang-btn-huge lang-cancel mlw">取消</a>
</div>
</form>
<script type="text/javascript">
//自定义光标
//document.body.style.cursor = "url('http://bbb.com/images/cur.cur')";
function UploadCallBack(msg) {
if (msg.indexOf("上传图片出错") == -1) {
// 图片样式清理(防止新加载的图片受影响),再加上必须的样式
$("#imgPhoto").removeAttr("width").removeAttr("height").removeAttr("style").removeClass("activeImg").addClass("autoSize").attr("src", msg);
$("#imgShow").attr("src", msg);
} else {
alert("系统忙,请稍后再试!");
}
}
// 图片缩放和移动的代码,也是超简单吧,
// 相比网上那些封装好的代码控件,动不动就是几本JS,复杂得要死,又难以维护,
// 我这个实现,算是一个贡献吧,还有助于初学者学习和开启智慧^_^
$(function () {
var img = $("#imgScroll");
var obj = $("#imgPhoto");
var isMove = false;
var x = y = 0;
img.on("click", function (event) {
if (isMove) {
isMove = false;
obj.css("cursor", "default");
$(".showImg").hide();
} else {
isMove = true;
img.css("cursor", "move");
obj.attr("width", obj.width()).attr("height", obj.height()).removeClass("autoSize").addClass("activeImg").css({ top: obj.css("top"), left: obj.css("left") });
var left = obj.css("left") == "auto" ? 0 : obj.css("left");
var top = obj.css("top") == "auto" ? 0 : obj.css("top");
x = event.pageX - parseInt(left);
y = event.pageY - parseInt(top);
$("#imgShow").attr("width", obj.width()).attr("height", obj.height()).css({ top: obj.css("top") - 70, left: obj.css("left") - 130 });
$(".showImg").show();
}
}).on("mouseout", function () {
isMove = false;
obj.css("cursor", "default");
$(".showImg").hide();
}).on("mousewheel", function (event) {
var wm = event.originalEvent.wheelDelta > 0 ? 1 : -1;
var width = obj.width() * (10 + wm) / 10;//可适合修改
var height = obj.height() * (10 + wm) / 10;
if (width > 100 && height > 100) {
obj.width(width).css({ "left": (180 - (width / 2)) });
obj.height(height).css({ "top": (120 - (height / 2)) });
$("#imgShow").width(width).height(height).css({ top: 50 - (height / 2), left: 50 - (width / 2) });
$(".showImg").show();
}
});
$(document).mousemove(function (e) {
if (isMove) {
obj.css({ top: e.pageY - y, left: e.pageX - x });
$("#imgShow").css({ top: e.pageY - y - 70, left: e.pageX - x - 130 });
}
});
// file控件响应事件
$("#fileUpload").change(function () {
var tmp = this.value.split('\\');
var fileName = tmp[tmp.length - 1].split('.');
document.forms["fmPhoto"].submit();
});
// 表单验证和ajax提交,
var valid = $("#fmPhoto").validate({
submitHandler: function () {
$("#ImgWidth").val(obj.width());
$("#ImgHeight").val(obj.height());
$("#ImgTop").val(70 - parseInt(obj.css("top"), 10));
$("#ImgLeft").val(130 - parseInt(obj.css("left"), 10));
$.ajax({
url: "http://localhost:22397/Home/Photo",
cache: false,
type: "post",
data: $("#fmPhoto").serialize(),
success: function (result) {
if (!result) {
var errormap = { SystemMsg: "系统忙,请稍后再试!" };
valid.showErrors(errormap, valid.errorlist);
} else {
if (result.Msg) {
valid.showErrors(result.Msg.Map, valid.errorlist);
} else {
$("#imgUserPhoto").attr("src", result.VirtualPath + result.Name);
}
}
}
});
},
rules: {
Name: {
required: true,
}
}
});
});
</script> /// <summary>
/// 根据参数切图方法,包含图片缩放信息,确保切的就是当时选中的那部分样子
/// </summary>
/// <param name="image"> 源图</param>
/// <param name="sWidth"> 源图缩放后的宽度</param>
/// <param name="sHeight">源图缩放后的高度</param>
/// <param name="left"> 新图相对源图的左坐标</param>
/// <param name="top"> 新图相对源图的上坐标</param>
/// <param name="width"> 新图的宽度</param>
/// <param name="height"> 新图的高度</param>
/// <param name="path"> 新图保存的路径</param>
/// <param name="name"> 新图的名称</param>
public static bool CutImage(Image image, int sWidth, int sHeight, int left, int top, int width, int height, string path, string name)
{
#region 对源图根据缩放参数进行缩放,得到新的原图
//用指定的大小和格式初始化 Bitmap 类的新实例
var bitmap = new Bitmap(sWidth, sHeight, PixelFormat.Format32bppArgb);
//从指定的 Image 对象创建新 Graphics 对象
var graphics = Graphics.FromImage(bitmap);
//清除整个绘图面并以透明背景色填充
graphics.Clear(Color.Transparent);
//在指定位置并且按指定大小绘制 原图片 对象
graphics.DrawImage(image, new Rectangle(0, 0, sWidth, sHeight));
graphics.Dispose();
#endregion
#region 对缩放后的原图,根据切图参数剪切
// 目标区域
var destRect = new Rectangle(0, 0, width, height);
// 源图区域
var srcRect = new Rectangle(left, top, width, height);
// 新建Graphics对象
var newImage = new Bitmap(width, height);
var g = Graphics.FromImage(newImage);
// 绘图平滑程序
g.SmoothingMode = SmoothingMode.HighQuality;
// 图片输出质量
g.CompositingQuality = CompositingQuality.HighQuality;
// 输出到newImage对象
g.DrawImage(bitmap, destRect, srcRect, GraphicsUnit.Pixel);
// 释放绘图对象
g.Dispose();
#endregion
// 保存图像
if (File.Exists(path + name))
{
File.Delete(path + name);
}
newImage.Save(path + name);
return true;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。
自定义头像处理,轻巧实用,很多强大的小技巧在里面哦,快来赞美我一下吧^_^
原文:http://blog.csdn.net/foren_whb/article/details/46723159