嗨,我想裁剪图像并上传到服务器上。
我正在使用croppie js插件,并使用**get()**方法通过使用WebImage类在服务器上获取点。
Asp.net MVC代码
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult ImageCrop(FormCollection fc)
{
WebImage data = WebImage.GetImageFromRequest();
if (data != null)
{
int x1, y1, x2, y2;
x1 = int.Parse(fc["x1"].ToString());
y1 = int.Parse(fc["y1"].ToString());
x2 = int.Parse(fc["x2"].ToString());
y2 = int.Parse(fc["y2"].ToString());
var fileName = Path.GetFileName(data.FileName);
fileName = Lawyer_id2 + ".jpeg";
var big = Server.MapPath("~/contents/ProfilePictures/big/" + fileName);
data.Crop(y1, x1, x2, y2);
data.Save(big);
}
}
字符串
Js代码
$uploadCrop = $('#upload-demo').croppie({
viewport: {
width: 200,
height: 200,
type: 'square'
},
boundary: {
width: 300,
height: 300
},
showZoomer: false,
mouseWheelZoom: false
});
readFile(fl);
$(".closeModal").on("click", function () {
$uploadCrop.croppie('result', {
type: 'canvas',
size: 'viewport'
}).then(function (resp) {
$('.upload-msg').css('display', '');
popupResult({
src: resp
});
});
var arr = $uploadCrop.croppie('get').points;
$("#x1").val(arr[0]);
$("#y1").val(arr[1]);
$("#x2").val(arr[2]);
$("#y2").val(arr[3]);
});
型
我在隐藏的输入字段中获得所有点,然后将此点传递给webimge对象进行裁剪,但问题是裁剪后的图像不保持长宽比并错误地裁剪,浏览器侧裁剪是完美的,但当我将点传递到服务器端进行裁剪时,它不像浏览器端那样工作,我没有解决这个问题的线索。
2条答案
按热度按时间eeq64g8w1#
裁剪已经在客户端发生,您应该只将结果发送到服务器端。不需要将裁剪点发送到服务器。
在html上定义
Select
和Upload
按钮,并使用id="main-cropper"
定义div字符串
在JS代码中,将croppie对象附加到dive,定义视点边界,最后将请求发送到服务器以将结果存储为blob。在服务器端,假设将有一个
Create
控制器与GetImage
操作等待请求。testFileName.png
被分配为文件名,您可以根据您的场景修改它。型
在服务器上,在
Create
控制器中:型
生成uuid字符串,并将其设置为文件名并存储在数据库中也是有意义的。
hs1ihplo2#
我发布了一个解决方案,通过Croppie.js上传裁剪到服务器,
也许将来能帮到别人
js
字符串
c#
型