【发布时间】:2015-06-17 21:03:07
【问题描述】:
编辑:我不想在客户端显示图像,目的是缩小图像和缩放...
我在调整图像大小时遇到了一些问题,该图像是在必须上传到服务器之前使用表单中的文件输入选择的。
我有以下代码监控我的文件输入:
// monitor file inputs and trigger event
$(document).on('change', '.btn-file :file', function() {
var F = this.files;
if(!isImage( F[0] ))
{
alert("Not an image file");
}
var fileurl = resizeImage(F[0]);
console.log(fileurl);
var input = $(this),label = input.val().replace(/\\/g, '/').replace(/.*\//, '');
input.trigger('fileselect', [label]);
});
此函数将调用 resizeImage,如下所示:
function resizeImage(file)
{
var MAX_WIDTH = 800;
var MAX_HEIGHT = 600;
var img = document.createElement("img");
img.src = window.URL.createObjectURL(file);
console.log(img.width);
var canvas = document.createElement('canvas');
var width = img.width;
var height = img.height;
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;
}
}
canvas.width = width;
canvas.height = height;
var ctx = canvas.getContext("2d");
ctx.drawImage(img, 0, 0, width, height);
console.log(ctx);
var dataurl = canvas.toDataURL("image/png");
return dataurl;
}
问题是,我的控制台日志告诉我,我的 resize 函数的返回值是“data:”。然后我开始使用控制台记录我的方法,以缩小问题所在。在我的 resizeImage 函数中,我记录了我的 img 元素的宽度,它给了我 0 的宽度,这不应该是正确的吗? ..我不知道我做错了什么..
【问题讨论】:
-
你为什么要用 JS 而不是 CSS?
-
@COOOL 如何使用 css 缩小/调整图像大小? ..
-
使用
background-image和background-size: cover或background-size: contain(取决于你的需要)? -
使用 PHP 服务器端。 PHP 可以很容易地做到这一点。 Javascript 不能。
-
@DTH,如果您在画布上绘制的 img 与网页不在同一个域中,则
toDataURL将返回一个空 url。禁止跨域是出于安全考虑。
标签: javascript php base64