截图上传功能 imageAreaselect
前台:
<script src="~/Scripts/jquery-2.1.4.min.js"></script>
<link href="~/Scripts/MyJsLibrary/css/imgareaselect-default.css" rel="stylesheet" />
<script src="~/Scripts/MyJsLibrary/jquery.imgareaselect.min.js"></script>
<script src="~/Scripts/FileUpload/js/ajaxfileupload.js"></script>
<script type="text/javascript">
$(function () {
$(document).ready(function () {
$('img#imgselect').imgAreaSelect({
selectionColor: 'blue',
x1: 20, y1: 10, x2: 120, y2: 110,
maxWidth: 100, maxHeitht: 100,
minWidth: 100, minHeight: 100,
selectionOpacity: 0.1,
handles: true,
aspectRatio: '1:1',
onSelectEnd: preview
});
})
function preview(img, selection) {
if (selection.width > 49) {
//getValue(selection);
var defultWidth = $("img#imgselect").width();
var defultHeight = $("img#imgselect").height();
console.info("width:" + defultWidth + "Height:" + defultHeight);
var scaleX = 200 / (selection.width || 1);
var scaleY = 200 / (selection.height || 1);//200px的框
var scaleX1 = 100 / (selection.width || 1);
var scaleY1 = 100 / (selection.height || 1);//100px的框
//获取上传图片的默认width,Height
$('#preview200').css({
width: Math.round(scaleX * defultWidth) + 'px',//先把图片缩小想要的框的大小,比如200的大小
height: Math.round(scaleY * defultHeight) + 'px',//然后在把图片放大图片的大小。
marginLeft: '-' + Math.round(scaleX * selection.x1) + 'px',
marginTop: '-' + Math.round(scaleY * selection.y1) + 'px'
});
$('#preview100').css({
width: Math.round(scaleX1 * defultWidth) + 'px',
height: Math.round(scaleY1 * defultHeight) + 'px',
marginLeft: '-' + Math.round(scaleX1 * selection.x1) + 'px',
marginTop: '-' + Math.round(scaleY1 * selection.y1) + 'px'
});
$("#x1").val(Math.round(selection.x1));
$("#x2").val(Math.round(selection.x2 - selection.x1));//截取得宽度
$("#y1").val(Math.round(selection.y1));
$("#y2").val(Math.round(selection.y2 - selection.y1));//截取得高度
}
}
/**检查图片上传类型*/
function checkImgType(obj) {
var imgFile = '';
//获取图片的全路径
var imgFilePath = getImgFullPath(obj);
var endIndex = imgFilePath.lastIndexOf('\\');
var lastIndex = imgFilePath.length - endIndex - 1;
if (endIndex != -1)
imgFile = imgFilePath.substr(endIndex + 1, lastIndex);
else
imgFile = imgFilePath;
var tag = true;
endIndex = imgFilePath.lastIndexOf('.');
if (endIndex == -1)
tag = false;
var ImgName = imgFilePath.substr(endIndex + 1, lastIndex);
ImgName = ImgName.toUpperCase();
if (ImgName != 'JPEG' && ImgName != 'JPG' && ImgName != 'PNG' && ImgName != 'BMP') {
tag = false;
}
if (!tag) {
alert('上传图片的文件类型必须为: *.JPEG,*.jpg,*.png,*.bmp,请重新选择!')
alert('你逗我么');
// Upload.clear(obj);
return false;
}
return true;
}
function getImgFullPath(obj) {
if (obj) {
//ie
if (window.navigator.userAgent.indexOf('MSIE') >= 1) {
obj.select();
return document.selection.createRange().text;
}
//firefox
else if (window.navigator.userAgent.indexOf('Firefox') >= 1) {
if (obj.files) {
return obj.files.item(0).getAsDataURL();
}
return obj.value;
}
return obj.value;
}
}
});
//立即显示图片
//下面用于图片上传预览功能
function setImagePreview() {
var docObj = document.getElementById("file1");
var imgObjPreview = document.getElementById("imgselect");
if (docObj.files && docObj.files[0]) {
//火狐下,直接设img属性
imgObjPreview.style.display = 'block';
//imgObjPreview.style.width = '300px'; //不能控制大小
//imgObjPreview.style.height = '300px';
//imgObjPreview.src = docObj.files[0].getAsDataURL();
//火狐7以上版本不能用上面的getAsDataURL()方式获取,需要一下方式
imgObjPreview.src = window.URL.createObjectURL(docObj.files[0]);
var srcStirng = window.URL.createObjectURL(docObj.files[0]);
$("#src").val(srcStirng);
$("#preview200").attr("src", srcStirng);
$("#preview100").attr("src", srcStirng);
}
else {
//IE下,使用滤镜
docObj.select();
var imgSrc = document.selection.createRange().text;
var localImagId = document.getElementById("localImag");
//必须设置初始大小
localImagId.style.width = "150px";
localImagId.style.height = "180px";
//图片异常的捕捉,防止用户修改后缀来伪造图片
try {
localImagId.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod=scale)";
localImagId.filters.item("DXImageTransform.Microsoft.AlphaImageLoader").src = imgSrc;
}
catch (e) {
alert("您上传的图片格式不正确,请重新选择!");
return false;
}
imgObjPreview.style.display = 'none';
document.selection.empty();
}
return true;
}
$(function () {
//一点激上传开始上传
$("#upload").click(function () {
// 获取文件路径
var filePath = $("#file1").val();
console.info(filePath);
// 获取“.”位置
//var extStart = filePath.lastIndexOf(".");
//// 获取文件格式后缀,并全部大写
//var ext = filePath.substring(extStart, filePath.length).toUpperCase();
//// 判断文件格式
//if (ext != ".BMP" && ext != ".PNG" && ext != ".JPG" && ext != ".JPEG") {
// alert("图片仅限于.BMP .PNG .JPG .JPEG文件。");
// return false;
//}
//else {
// 使用ajaxfileupload上传文件
$.ajaxFileUpload({
url: "SaveImg",
secureuri: false,
fileElementId: 'file1',
dataType: 'JSON',
data: { fileType: filePath },
success: function (data) {
// $("#src").val(data);
//$("#upload").submit();开始截图
////获取坐标并传值
var x1=$("#x1").val();
var x2=$("#x2").val();//截取得宽度
var y1=$("#y1").val();
var y2=$("#y2").val();//截取得高度
console.info(x1+x2+y1+y2);
$.ajax({
url: "imgEditHandler",
type: "Post",
data: { xx1: x1, xx2: x2, yy1: y1, yy2: y2 },
success: function (data) {
if (data.success==true) {
alert("上传成功");
}
}
});
},
error:
function (data, status, e) {
//alert(data + "," + status + "," + e);
alert("上传失败");
}
});
});
});
</script>
<style type='text/css'>
#container
{
position: absolute;
left: 40px;
background: #FFF;
border: #666 2px solid;
border-radius: 10px;
width: 600px;
height: 500px;
padding: 20px;
}
#selectdiv
{
width: 350px;
height: 550px;
float: left;
}
#uploaddiv
{
margin-top: 20px;
border-top: #CCC 1px solid;
}
#prediv200
{
height: 200px;
width: 200px;
overflow: hidden;
border: #CCC 3px dashed;
}
#prediv100
{
height: 100px;
width: 100px;
overflow: hidden;
border: #CCC 3px dashed;
}
#preview
{
position: relative;
overflow: hidden;
}
[type=button]
{
width: 50px;
}
</style>
</head>
<body>
<div>
<div id='container'>
<div id='selectdiv'>
<div id="localImag">
<img id="imgselect" style="border: 1px solid #f00;" alt=""
src="Images/t01.jpg" />
</div>
<div>
<p>图片上传:<font color='red'>*.BMP *.PNG *.JPG *.JPEG</font></p>
@* @using (Html.BeginForm("imgEditHandler", "EditUploadImg", FormMethod.Post, new { Area = "TestFunction" }))
{
<input type='file' name='imgFile' id='imgFile'><br />
*@<input type='text' name='x1' id="x1" value='0' />
<input type='text' name='y1' id="y1" value='0' />
<input type='text' name='x2' id="x2" value='0' />
<input type='text' name='y2' id="y2" value='0' /><br />
<input type="text" name="src" id="src" value="" />
<input type="file" id="file1" name="uploadImageFile" onchange="setImagePreview();" />
<input type="button" value='上传' id='upload' />
@*}*@
</div>
</div>
<div id='prediv200'>
<img id='preview200' src='~/Content/UploadImg/fdsfsdfsdfsd.jpg' width='200px' height='200px' />
</div>
<div id='prediv100'>
<img id='preview100' src='~/Content/UploadImg/fdsfsdfsdfsd.jpg' width='100px' height='100px' />
</div>
<div>
<form>
@* <input type='hidden' name='x1' value='0' />
<input type='hidden' name='y1' value='0' />
<input type='hidden' name='width' value='100' />
<input type='hidden' name='height' value='100' />
<br />
<br />*@
<input type='button' value='修改' id='button2' />
</form>
</div>
@if (ViewData["success"] != null)
{
<script type="text/javascript">
$(function () {
$(".success").slideDown();
$("#ok").slideUp();
});
</script>
<div style="display: none;position:absolute;top:200px;left:200px;z-index:1000;" class="success">
上传成功
<input type="button" id="ok" value="确定" />
</div>
}
else
{
<span>上传失败</span>
}
</div>
</div>
</body>
</html>
后台:
public ActionResult SaveImg(HttpPostedFileBase uploadImageFile)
{
//保存上传图片
// 随机数
string img = uploadImageFile.FileName;
int index = img.IndexOf('.');
string[] fileName = img.Split('.');
var rand = new Random().Next(0, 8999);
// 创建文件存放的文件路径,如果没有,创建该路径
string tempImg = "~/Content/UploadImg/";//路径模板
string folder = HttpContext.Server.MapPath(tempImg);
if (!Directory.Exists(folder))
{
Directory.CreateDirectory(folder);
}
// 保存全文件路径
string filePath = Path.Combine(folder, fileName[0] + rand + "." + fileName[1]);
//写cookie
//HttpContext.Response.Cookies["srcImg"].Value = filePath;
HttpCookie cookies = new HttpCookie("srcImg");
cookies.Value = HttpUtility.UrlEncode(filePath, Encoding.GetEncoding("UTF-8")); ;
cookies.Expires = DateTime.Now.AddHours(1);
HttpContext.Response.Cookies.Add(cookies);
uploadImageFile.SaveAs(filePath);
//return Json(new { success=true,pathsrc=filePath});
return Content(filePath);
//保存成功
}
/// <summary>
/// 截取
/// </summary>
/// <param name="forms"></param>
/// <returns></returns>
public ActionResult imgEditHandler(int xx1,int xx2,int yy1,int yy2)
{
string tempImg = "~/Content/UploadImg/";//路径模板
int x1 = Convert.ToInt32(xx1);
int y1 = Convert.ToInt32(yy1);
int x2 = Convert.ToInt32(xx2);//实际上是没有用的
int y2 = Convert.ToInt32(yy2);//实际上是没有用得
//string srcImg = tempImg + fileName[0] + rand + "." + fileName[1];//原图图片存在路径
//string srcImg = form["src"];
//到cookie 拿路径
//string srcImg = Common.DEncrypt.DEncrypt.Decrypt(HttpContext.Request.Cookies["srcImg"].Value);
string srcImg = HttpUtility.UrlDecode(Common.CommonClass.GetCookie("srcImg"), Encoding.GetEncoding("UTF-8")); ; ;
//string srcPath = HttpContext.Server.MapPath(srcImg);//实际路径
//创建图象,保存将来截取的图象
//Bitmap image = new Bitmap(Path);
//Graphics imgGraphics = Graphics.FromImage(image);
//设置截屏区域
//imgGraphics.CopyFromScreen(x1, y1, x2, y2, new Size(100, 100));
//保存
//SaveImage(image);
string[] fileName = srcImg.Split('.');
//string file = fileName[0]+fileName[1] + "caijinhao." + fileName[2];
string folders = HttpContext.Server.MapPath("~/Content/UploadImg/");//映射路径
string newpath = CutImage(srcImg, x1, y1, x2, y2, Guid.NewGuid().ToString("N"), folders, fileName[fileName.Length - 1]);
ViewData["success"] = "true";
return View("img3");
}
/// <summary>
/// 截取图片方法
/// </summary>
/// <param name="url">图片地址</param>
/// <param name="beginX">开始位置-X</param>
/// <param name="beginY">开始位置-Y</param>
/// <param name="getX">截取宽度</param>
/// <param name="getY">截取长度</param>
/// <param name="fileName">文件名称</param>
/// <param name="savePath">保存路径</param>
/// <param name="fileExt">后缀名</param>
public string CutImage(string url, int beginX, int beginY, int getX, int getY, string fileName, string savePath, string fileExt)
{
//if ((beginX < getX) && (beginY < getY))
//{
Bitmap bitmap = new Bitmap(url);//原图
//if (((beginX + getX) <= bitmap.Width) && ((beginY + getY) <= bitmap.Height))
//{
// Bitmap destBitmap = new Bitmap(getX, getY);//目标图 创建新图大小
Bitmap destBitmap = new Bitmap(100, 100);//要存储的图像的大小
Rectangle destRect = new Rectangle(0, 0, getX, getY);//我要在新图的开始画图的位置
Rectangle srcRect = new Rectangle(beginX, beginY, getX, getY);//我要在原图的这个位置复制
Graphics imgGraphics = Graphics.FromImage(destBitmap);
imgGraphics.DrawImage(bitmap, destRect, srcRect, GraphicsUnit.Pixel);
ImageFormat format = ImageFormat.Png;
switch (fileExt.ToLower())
{
case "png": format = ImageFormat.Png; break;
case "bmp": format = ImageFormat.Bmp; break;
case "gif": format = ImageFormat.Gif; break;
}
destBitmap.Save(savePath + "//" + fileName + "." + fileExt, format);
return savePath + "\\" + "*" + fileName.Split('.')[0] + "." + fileExt;
//}
//else
//{ return "截取范围超出图片范围"; }
//}
//else
//{ return "请确认(beginX < getX)&&(beginY < getY)"; }
}
截图上传功能 imageAreaselect的更多相关文章
- 【Bootstrap-插件使用】Jcrop+fileinput组合实现头像上传功能
作者:Dreawer链接:https://zhuanlan.zhihu.com/p/24465742来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 作者:梦游的龙猫(转 ...
- [Bootstrap-插件使用]Jcrop+fileinput组合实现头像上传功能
很久没有更新博客了,再不写点东西都烂了. 这次更新一个小内容,是两个插件的组合使用,实现头像上传功能. 业务需求: 头像上传功能,要对上传的文件进行剪切,且保证头像到服务器时必须是正方形的. 优化&l ...
- django下的ckeditor 5.0 文本编辑器上传功能。
完整的后台界面怎么可以没有文本编辑器,但是django的admin界面很疑惑,没有自带文本编辑器,好在网上有不少成型的库可以用 我用的是ckeditor编辑器,安装和配置我引用别人的博客 这篇博客配置 ...
- 头像截图上传三种方式之一(一个简单易用的flash插件)(asp.net版本)
flash中有版权声明,不适合商业开发.这是官网地址:http://www.hdfu.net/ 本文参考了http://blog.csdn.net/yafei450225664/article/det ...
- H5 利用vue实现图片上传功能。
H5的上传图片如何实现呢? 以下是我用vue实现的图片上传功能,仅供参考. <!DOCTYPE html> <html> <head> <meta chars ...
- PHPCMS_V9 模型字段添加单文件上传功能
后台有“多文件上传”功能,但是对于有些情况,我们只需要上传一个文件,而使用多文件上传功能上传一个文件,而调用时调用一个文件URL太麻烦了. 使用说明: 1.打开phpcms\modules\conte ...
- ASP.NET MVC4实现TinyMCE 4.0.20自定义上传功能
tinymce 插件不提供免费的本地图片上传功能,所以自己将uploadify这个上传插件整合到tinymce,实现本地上传,还用到了jquery.ui插件,先展示全部的代码 @model TinyM ...
- 配置php.ini实现PHP文件上传功能
本文介绍了如何配置php.ini实现PHP文件上传功能.其中涉及到php.ini配置文件中的upload_tmp_dir.upload_max_filesize.post_max_size等选项,这些 ...
- MVC5:使用Ajax和HTML5实现文件上传功能
引言 在实际编程中,经常遇到实现文件上传并显示上传进度的功能,基于此目的,本文就为大家介绍不使用flash 或任何上传文件的插件来实现带有进度显示的文件上传功能. 基本功能:实现带有进度条的文件上传功 ...
随机推荐
- 警告: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property 'source' to 'org.eclipse.jst.jee.server:Zhuo' did not find a matching property.
eclipse里面配置tomcat方法:window -- show view -- other -- 找到servers 点击finish 就会出现servers选项卡在选项卡中右键鼠标 new - ...
- linux-shell脚本命令之grep
版权声明: https://blog.csdn.net/zdp072/article/details/26015611 [ grep简单介绍: ] grep是用来过滤含有特定字符的行, 能使用正則表達 ...
- LeetCode:删除链表中的节点【203】
LeetCode:删除链表中的节点[203] 题目描述 删除链表中等于给定值 val 的所有节点. 示例: 输入: 1->2->6->3->4->5->6, val ...
- uboot 从sd卡加载文件并烧写到nand flash
uboot下可以从用tftp和nfs加载文件. 但是现在有个开发板配套uboot网络功能出现异常,执行ping命令就会导致开发板重启,只能选择先从sd卡加载文件 启动开发板,任意键进入uboot,然后 ...
- Spring Boot2.0之全局捕获异常
全局捕获异常,很明显的错误404返回给客户,很不好呀.整个web请求项目全局捕获异常,比如空指针直接返回给客户啊,那多操蛋呀~ 看这几个常用的注解: @ExceptionHandler 表示拦截异常 ...
- laravel基础课程---13、数据库基本操作2(lavarel数据库操作和tp对比)
laravel基础课程---13.数据库基本操作2(lavarel数据库操作和tp对比) 一.总结 一句话总结: 非常非常接近:也是分为两大类,原生SQL 和 数据库链式操作 学习方法:使用时 多看手 ...
- python学习笔记:第八天(模块)
Python3 模块 脚本上是用 python 解释器来编程,如果从 Python 解释器退出再进入,那么定义的所有的方法和变量就都消失了. 为此 Python 提供了一个办法,把这些定义存放在文件中 ...
- python学习笔记:第五天( 字典)
Python3 字典 字典是另一种可变容器模型,且可存储任意类型对象. 字典的每个键值(key=>value)对用冒号(:)分割,每个对之间用逗号(,)分割,整个字典包括在花括号({})中 ,格 ...
- Elasticsearch mapping文档相似性算法
Elasticsearch allows you to configure a scoring algorithm or similarity per field. The similarityset ...
- SpringBoot_00_资源汇总贴
一.精选 1.Spring Boot文档 二.参考资料 1.springboot-learning-example 2.Spring boot 那些事 3.Spring Boot干货系列 4.Spri ...