【发布时间】:2013-07-18 21:48:54
【问题描述】:
我正在开发一个 Webworks 应用程序,我需要调整图像大小以上传到服务器。我正在使用 JQuery Mobile,该应用程序需要在 OS6 及更高版本上运行。用户可以使用相机或从设备中选择图像。相关代码如下:
function handleOpenedFile(fullPath, blobData) {
var image = new Image();
image.src = fullPath; //path to image
image.onload = function () {
var resized = resizeMe(image); // send it to canvas
//Do stuff with the DataURL returned from resizeMe()
};
}
function resizeMe(img) {
var canvas = document.createElement('canvas');
var width = Math.round(img.width / 2);
var height = Math.round(img.height / 2);
canvas.width = width;
canvas.height = height;
var ctx = canvas.getContext("2d");
ctx.drawImage(img, 0, 0, width, height);
return canvas.toDataURL("image/jpeg", 0.8);
}
然后我使用 DataURL 中的 Base64 来上传到服务器。图像被缩放,但它们出现乱码。部分图像四处移动,颜色变得奇怪。如果您在画布上绘制而不进行任何缩放,图像就会出现乱码,并不是缩放本身会弄乱图像。
我已经广泛搜索了 SO 和 BB Dev 论坛,但没有成功。
有没有人知道如何解决这个问题或有其他建议来调整图片大小以供上传?
【问题讨论】:
-
伙计,哦伙计。这个问题对我来说是一个讨厌的问题。 iOS 6 于去年秋天问世,增加了从相机/相机胶卷捕捉的能力。我还需要使用 Canvas 调整大小。执行调整大小/旋转时,画布调整大小会导致严重问题。看看这篇文章:stackoverflow.com/questions/11929099/…。最后,我写了一个修复问题的小库,类似于此(但在此之前):github.com/stomita/ios-imagefile-megapixel.
-
抱歉,笔记本电脑在我提交更相关的评论之前就死机了。在 iOS 上,这个问题只是由于对大图像进行二次采样而发生的。谷歌快速搜索显示,在黑莓上,至少有一个人对大图像supportforums.blackberry.com/t5/Web-and-WebWorks-Development/… 有一些问题。您可以将小图像(例如 100 x 100 像素)下载到您的设备上,选择该图像,然后查看是否存在相同的问题。
-
感谢您的建议,我查看了 BB 论坛主题,并尝试了该百万像素库,但没有成功。我已经用我找到的解决方案回答了我自己的问题。
-
太棒了,很高兴您找到了解决方案。这些问题在 iOS 上似乎也有奇怪的解决方案。在 Android 上,我们看到 toDataURL 的问题并非始终如一地包括数据 URL 中的 MIME 类型。如果他们都像他们应该的那样工作,那就太好了:)
标签: html jquery-mobile html5-canvas blackberry-webworks