【发布时间】:2021-03-16 22:09:50
【问题描述】:
我正在使用SixLabors.ImageSharp 使用 Javascript JQuery 裁剪图像,一切正常,但是当我需要裁剪图像时,我不知道如何在不刷新页面且不执行 POST 的情况下获取图像.
我正在使用Tutexchange 教程,他们通过 POST 方法获取图像(我不想那样做)我想运行一个方法并使用 Blazor 获取文件编码的 base64 但是当我这样做时无法获得reader.result,因为它位于 onloadend 事件中。
如何在没有 POST 方法且不将图像保存在文件夹中以使用 Blazor 读取的情况下获取图像 blob?
我尝试使用方法传递 onloadend reader.result 并使用 bucle 等待,而在完成时返回它,但值永远不会与 null 不同,我测试了裁剪器是否使用 console.log() 和一切都很好:
function InitializeCroppie(div_width, div_height) {
basic = $('#main-cropper').croppie
({
enableExif: true,
url: '/images/ChooseImage.png',
viewport: { width: div_width, height: div_height },
boundary: { width: div_width, height: div_height },
showZoomer: false,
format: 'png' //'jpeg'|'png'|'webp'
});
//Reading the contents of the specified Blob or File
function readFile(input) {
if (input.files && input.files[0]) {
var reader = new FileReader();
reader.onload = function (e) {
$('#main-cropper').croppie('bind', {
url: e.target.result
});
}
reader.readAsDataURL(input.files[0]);
}
}
// Change Event to Read file content from File input
$('#select').on('change', function () { readFile(this); });
}
var returnThisValue;
async function GetImageCroped() {
returnThisValue = null;
var blob = await basic.croppie('result', 'blob');
var reader = new FileReader();
if (blob != null) {
reader.readAsDataURL(blob);
reader.onloadend = function () {
SetValue(reader.result);
console.log(reader.result);
}
}
while (returnThisValue == null) {
//Waiting...
}
return returnThisValue;
}
function SetValue(value) {
returnThisValue = value;
}
function GetImageValue() {
return returnThisValue;
}
如果没有 POST 方法是不可能的,我如何在不重新加载页面的情况下接收它。
编辑: 我正在做一些测试,以了解 js 是否有可能让 blazor 知道何时将图像放入 localStorage 以使其与 Blazor 同步。 测试后:我尝试使用 Blazored.LocalStorage 获取图像,但 Chrome 无法解决“大数据”问题。
【问题讨论】:
-
图片是用户上传的还是后台获取的?图片是什么时候上传到页面的? (打开页面时?)
-
1)图片是从用户那里获取的。 2)用户将其放在容器上或选择图像后。
-
为什么不用 blazor 的 InputFile 来上传文件呢? document你可以添加一个javascript事件。当用户选择文件时,blazor 调用这个 javascript。
-
@user1986237 是的,我可以使用它,但它不会帮助我从 Javascript 获取图像。 Javascript 方法获取当前图像并在将 Blob 转换为 base64 后对其进行裁剪。添加一个 InputFile 对我有什么帮助?如果我将从裁剪的图像中获得的源代码放入 InputFile,我可以将其放入 Blazor 的数据库中。这是你想说的还是你的另一个想法?
-
它是基于你所指的code,因为我不知道你的blazor结构。
标签: javascript jquery asp.net-core blazor crop