首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >调整图像大小并附加到HTML表单的正确方法?

调整图像大小并附加到HTML表单的正确方法?
EN

Stack Overflow用户
提问于 2016-11-21 00:17:01
回答 1查看 366关注 0票数 1

因此,我尝试在提交表单之前调整图像客户端的大小,然后将其附加到表单。

目前,我有以下内容:

代码语言:javascript
运行
复制
<form method="post" action="abc.php">
    <input id="image-1" type="file" name="image-1" onchange="resizeImage('image-1')">
    <input id="image-2" type="file" name="image-2" onchange="resizeImage('image-2')">
    <input type="submit" value="Submit">
</form>

图像是动态添加和删除的-因此可能根本没有或有20个。

我把这个放在一起(它可以调整图像的大小,并且看起来工作正常):

代码语言:javascript
运行
复制
function resizeImage(inputID) {
    //Read in file
    var file = event.target.files[0];

    //Ensure it's an image
    if (file.type.match(/image.*/)) {
        // Load the image
        var reader = new FileReader();
        reader.onload = function (readerEvent) {
            var image = new Image();
            image.onload = function (imageEvent) {

                // Resize the image
                var canvas = document.createElement('canvas'),
                    max_size = 1200,
                    width = image.width,
                    height = image.height;
                if (width > height) {
                    if (width > max_size) {
                        height *= max_size / width;
                        width = max_size;
                    }
                } else {
                    if (height > max_size) {
                        width *= max_size / height;
                        height = max_size;
                    }
                }
                canvas.width = width;
                canvas.height = height;
                canvas.getContext('2d').drawImage(image, 0, 0, width, height);

                document.getElementById(inputID).src = canvas.toDataURL('image/png');
            };
            image.src = readerEvent.target.result;
        };
        reader.readAsDataURL(file);
    }
}

当我提交这篇文章时--最初它看起来工作正常。但在服务器端验证中,图像的大小与原始图像相同,即使从3000x3000px裁剪到1200x1200px。就像它还在上传原件一样。

在添加这个新调整大小的图像之前,我需要删除源吗?我现在做得对吗?希望这是可能的!

EN

回答 1

Stack Overflow用户

发布于 2017-02-19 05:28:12

我是在解决同样的问题时才注意到这篇文章的。不能用调整大小的输入替换用户选择的'file‘类型的输入。出于安全原因,浏览器不允许这样做。表单是使用HTTP POST发布的,它是同步的。根据一些文章,修改后的图片应该是异步发布的。所有示例都使用XHR或Ajax实现这一点。可能的解决方案似乎是这样的: 1)调整图像大小并将画布转换为dataUrl或blob;2)向表单添加新的隐藏字段或将图像上传到表单之外;3)使用XHR或Ajax发布调整大小的图像;4)从原始输入的'file‘类型中删除名称属性(这将阻止其提交)或忽略服务器端;5)在服务器上解码dataUrl并将图像保存在上传文件夹中。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40706331

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档