我在移动设备(即 iPad 和 iPhone 的 Safari/Chrome)上运行 CamanJS 脚本时遇到问题,我已经尝试解决了好几天。
测试脚本非常简单: 1) 接受浏览器文件选择图像 2) 使用 FileData 获取图像源,然后将其绘制到画布中,然后实例化一个 Caman("#sample") 对象 3) 运行一些过滤器(在onLoad 该图像,或通过单击按钮手动)
它在所有桌面浏览器上都运行良好,过滤器也成功应用,但是当我在 iOS Safari 等移动设备上尝试它时,当我尝试实例化 Caman 对象时,我现有的画布 #sample 变为空白并恢复为原始画布默认背景颜色,根本没有加载图像。我尝试在画布上绘制图像之前实例化 Caman 对象,图像 onLoad 或画布图像成功绘制后按需实例化,但最终结果仍然相同 - 画布变为空白。
以下是我的示例代码,有人可以建议吗?感谢您的友好帮助。
<script>
var caman = null;
function handleUpload(evt) {
var target = (evt.target) ? evt.target : evt.srcElement;
var files = target.files; // FileList object
var field = target.id;
var curCount = target.id.replace(/\D+/, "");
for (var i = 0, f; f = files[i]; i++) {
var reader = new FileReader();
reader.onload = (function(theFile) {
return function(e) {
renderImage(e.target.result);
};
})(f);
reader.readAsDataURL(f);
}
}
function renderImage(imagedata) {
var canvas = document.getElementById("sample");
var ctx = canvas.getContext("2d");
// Render Preview
var previewImage = new Image();
previewImage.src = imagedata;
previewImage.onload = function() {
ctx.drawImage(previewImage, 0, 0, previewImage.width, previewImage.height);
caman = Caman("#sample", function () { this.sunrise().render(); });
};
}
function testProcess() {
//caman = Caman("#sample", function () { this.sunrise().render(); });
if (caman) {
caman.sunrise().render();
}
}
</script>
<form>
<input id="photo" name="photo" value="" type=file size="30" maxlength="50">
</form>
<canvas id="sample" width=300 height=300 style="background-color: #aaaaaa;"></canvas>
<br><br><a href="javascript:void(0);" onClick="testProcess();">Test Process</a><br><br>
<script>
document.getElementById('photo').addEventListener('change', handleUpload, false);
</script>