Android 照片上传截断图像?

标签 android sql image asp.net-mvc-5 camera

我正在开发一款允许用户通过 HTML 从智能手机上传照片的应用程序输入元素。基本流程是他们点击输入元素,选择相机,拍照,然后它显示在预览窗口中。当他们提交表格时,图像是 scaled down to 1200x900base64 dataURL调整大小后的图像保存在 SQL 中数据库,所以我可以直接将它用作 <img> 的 src在详细信息页面上。

Razor /Html:

Attach Image:
<input type="file" accept="image/*;capture=camera" onchange="picChange(event)" style="width:100%;margin-bottom:5px;"/>
<span id="fileSizeinfo"></span>
<img id="capturedPhoto" src="~/Content/Images/cameraglyph_1x.png" style="border-radius:5px;background-color:darkgray;border:solid;display:block;margin:auto;width:100%;" />

@Html.TextBoxFor(model => model.Photo, new {  @hidden="hidden", id="photoData"})

JavaScript:

function picChange(evt) {
var fileInput = evt.target.files;
if (fileInput.length > 0) {
    var photoImg = document.getElementById("capturedPhoto");
    var photoData = document.getElementById("photoData");
    var filesizeSpan = document.getElementById("fileSizeinfo");

    var photo = evt.target.files[0];
    var reader = new FileReader();
    filesizeSpan.textContent = Math.round(photo.size * 0.000001) + 'Mb(s) - ' + Math.round(photo.size * 0.001) + 'kbs';

    reader.onload = function (theFile) {
        var img = new Image();
        img.onload = function () {

            var aspectRatio = img.width / img.height;
            var desiredWidth = 1200;
            var desiredHeight = desiredWidth / aspectRatio;

            var photoCanvas = document.createElement('canvas');
            photoCanvas.width = desiredWidth;
            photoCanvas.height = desiredHeight;

            var ctx = photoCanvas.getContext('2d');
            ctx.drawImage(img, 0, 0, desiredWidth, desiredHeight);

            var imageData = photoCanvas.toDataURL();
            photoImg.src = imageData;
            photoData.value = imageData; 
        }
        img.src = theFile.target.result;
    }
    var photoSrc = reader.readAsDataURL(photo);
}
}

当我点击手机上的元素时,我会看到正确的相机/图库对话框以从以下位置选择图片: enter image description here

如果我选择相机,然后保存它在预览窗口中正确显示的图像。预览是一个 img 元素,其 src 设置为刚刚拍摄的缩小图片的 dataURL。 enter image description here

提交后,如果我查看详细信息页面,我所有的相机图像如下所示: enter image description here

它们总是被突然切断,尽管它被正确地调整为 1200x900 .我想也许dataURL太长了,所以我用我的桌面上传了一张11Mb的图片,它调整大小并正常显示,所以它肯定与使用手机有关。降低相机的分辨率可以解决这个问题,但在缩小它们(精密工业工作)之前,我需要尽可能高分辨率的源图像。

相机照片通常在 3Mb 左右上传后。奇怪的是它们在预览窗口中正确显示,它使用保存到数据库中的相同 dataURL 字符串!

测试于:

Android KitKat 4.4.2
Android Web Browser & Chrome Mobile

最佳答案

原来答案是 Chrome 网络浏览器的问题。在 Android 上,HTML 文本框必须有某种字符限制,而 PC 上的 IE11 没有限制。我只是将提交 URI 的字段切换到 TextArea 字段,问题就消失了,不需要进行其他更改。

关于Android 照片上传截断图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29580505/

相关文章:

android - 如何在特定设备上运行命令 'ionic run android'?

Android:从任何屏幕启动 Intent

c# - Entity Framework 平均值,按查询分组

ImageMagick 不转换 PNG 位深度

iphone - iPhone 上的 FTP 与 HTTP 上传

java - 如何查询 CursorLoader?

android - 在 Android 应用程序中隐藏列表

mysql - 数据截断: '' While Inserting or Updating Value

java - Hibernate实体生成奇怪的sql并尝试保存重复的条目

python - 根据列表从文件夹导入图像 - python