我想集成Dropzone。js具有客户端图像大小调整功能。我知道有一个函数可以调整缩略图的大小,但我想在上传之前创建一个函数来调整主图像的大小。有人能帮我吗?
Dropzone版本5是最近发布的,所以如果您升级到dropzone 5,那么您可以简单地使用resizeWidth
和resizeHeigh
来压缩您在客户端的图像。
如果您只提供其中之一,那么dropzone将尊重原始宽高比,例如,如果您只是添加选项:reszeWidth: 800
,那么您的图像将被压缩到宽=800
像素,并且您的原始图像的方面比例将被尊重。
关于预上传调整大小功能的Dropzone文档令人困惑。按照它的阅读方式,你可以限制宽度,限制高度,或者限制两者并牺牲纵横比,从而扭曲图像。事实并非如此。这是:
resizeWidth: 1000, resizeHeight: 1000,
resizeMethod: 'contain', resizeQuality: 1.0,
将宽度或高度限制在最大1000px以内——以较大者为准。另一个将根据宽高比缩小,而不会扭曲图像。例如,在我的测试中,我上传了一张2688x1512的图像。Dropzone裁剪了缩略图并将其大小调整为默认的120x120,但是发送到服务器的文件由Dropzone单独调整为1000x562,然后发送到服务器。
这里有一个有趣的警告。JPEG将被重新压缩,有损,所以即使是1.0的resizeQuality也会导致丢失。我认为这是一种防止文件过大的方法,但如果可以避免的话,应该小心调整两次大小(一次在服务器上,一次在客户端)。
如果这对你来说还不够——而且你真的想让transform方法过载——那么值得注意的是,在Dropzone中遵循代码路径有点让人困惑,因为每次上传都会使用createThumbnail
codepath两次,一次是按照你的预期创建一个缩略图,在将图像传递给服务器之前,再次在此处预调整图像大小。同样地,resize
方法的名称也很混乱;resizeWidth etc指的是准备上传图像,resize指的是调整缩略图的大小,而对发送到服务器的图像不做任何处理。
下面介绍了如何在不从addedfile
上传文件的情况下执行此操作。
重要的是将autoQueue
选项设置为false
,这样dropzone
就不会自动上传用户选择的文件。
var dropzone = new Dropzone (".dropzone", {
...
autoQueue: false,
...
});
下一步是在addedfile
事件中调整大小并将调整大小的版本排队。
dropzone.on("addedfile", function(origFile) {
var MAX_WIDTH = 800;
var MAX_HEIGHT = 600;
var reader = new FileReader();
// Convert file to img
reader.addEventListener("load", function(event) {
var origImg = new Image();
origImg.src = event.target.result;
origImg.addEventListener("load", function(event) {
var width = event.target.width;
var height = event.target.height;
// Don't resize if it's small enough
if (width <= MAX_WIDTH && height <= MAX_HEIGHT) {
dropzone.enqueueFile(origFile);
return;
}
// Calc new dims otherwise
if (width > height) {
if (width > MAX_WIDTH) {
height *= MAX_WIDTH / width;
width = MAX_WIDTH;
}
} else {
if (height > MAX_HEIGHT) {
width *= MAX_HEIGHT / height;
height = MAX_HEIGHT;
}
}
// Resize
var canvas = document.createElement('canvas');
canvas.width = width;
canvas.height = height;
var ctx = canvas.getContext("2d");
ctx.drawImage(origImg, 0, 0, width, height);
var resizedFile = base64ToFile(canvas.toDataURL(), origFile);
// Replace original with resized
var origFileIndex = dropzone.files.indexOf(origFile);
dropzone.files[origFileIndex] = resizedFile;
// Enqueue added file manually making it available for
// further processing by dropzone
dropzone.enqueueFile(resizedFile);
});
});
reader.readAsDataURL(origFile);
});
下面是一个将dataURL
转换为dropzone
文件的函数。如果使用canvas,过程可能会更简单。toBlob()而不是canvas。toDataURL(),以获取已调整大小的文件的内容,但并非所有浏览器都支持后者。
它只是这个函数的修改版本。
function base64ToFile(dataURI, origFile) {
var byteString, mimestring;
if(dataURI.split(',')[0].indexOf('base64') !== -1 ) {
byteString = atob(dataURI.split(',')[1]);
} else {
byteString = decodeURI(dataURI.split(',')[1]);
}
mimestring = dataURI.split(',')[0].split(':')[1].split(';')[0];
var content = new Array();
for (var i = 0; i < byteString.length; i++) {
content[i] = byteString.charCodeAt(i);
}
var newFile = new File(
[new Uint8Array(content)], origFile.name, {type: mimestring}
);
// Copy props set by the dropzone in the original file
var origProps = [
"upload", "status", "previewElement", "previewTemplate", "accepted"
];
$.each(origProps, function(i, p) {
newFile[p] = origFile[p];
});
return newFile;
}
我正在尝试调整缩略图中的图像大小,以固定框的大小。我试过这个: 这是原始图像的外观:http://files.parsetfss.com/12917a88-ac80-4e5e-a009-fc634161b79c/tfss-6c59b59f-8f57-4610-966e-31bbc203707b-samsung-galaxy-note-4-7290-002.jpg 我也试过: 但是没有任何变化,没有
有dropzone的调整大小功能的例子吗。js?我真的不明白它是如何工作的,它说:“Resize是被调用来创建调整大小信息的函数。它将文件作为第一个参数,并且必须返回一个包含srcX、srcY、srcWidth和srcHeight的对象,对于trg*。这些值将被ctx.drawImage()使用。” 但是我真的不知道如何使用它。到目前为止,我正在服务器端调整图像的大小,但是我想在客户端这样做,我认
我是JS新手,最近几天我一直在压缩客户端的图像。我想做的是,用户在dropzone上放置一堆图像(可以超过10个),它们应该使用JIC进行压缩,一旦用户点击一个按钮上传所有压缩文件,就会上传到服务器上。 到目前为止,我的代码只能在删除一个图像时压缩和上传,但当我删除多个图像时,所有图像都保持未压缩状态,只有一个图像。我不确定我做错了什么。我试着从这篇文章中找到解决方案,但没能实现我的目标。我使用的
我已经实现了一个Dropzone页面使用http://www.dropzonejs.com/ 我在调整大小功能上遇到了麻烦。如果我的图像宽高比错误,它们会不断被裁剪。 我想知道两件事: 我可以将dropzone配置为将图片(而不是拉伸或裁剪)放入预览元素中吗 我是否可以在预览被删除后调整预览的大小(即查看小型、中型或大型预览) 我已经通过调整css实现了2,但我想知道是否有更好的方法使用dropz
问题内容: 我在这里使用Go调整大小包:https://github.com/nfnt/resize 我正在从S3中提取图像,如下所示: // this gives me data []byte 之后,我需要调整图像大小: // problem is that the original_image has to be of type image.Image 将图像上传到我的S3存储桶 // pro
我有一个尺寸为800x800的图像,其大小为170 kb。我想将此图像调整为600x600。调整大小后,我希望缩小图像大小。我该怎么做?