转换后的图像应该有一些小的 url 而不是基本代码
Converted image should have some small url instead of BaseCode
现在我正在将图像上传到画布,上传图像后,画布由 toDataURl 转换为图像。如果我通过 toDataURL 将画布转换为图像,那么我得到的是基本代码(基本代码会很大)。我想要一些小网址而不是基本代码。
var canvas = new fabric.Canvas('canvas');
document.getElementById('file').addEventListener("change", function (e) {
var file = e.target.files[0];
var reader = new FileReader();
reader.onload = function (f) {
var data = f.target.result;
var img = document.createElement('img');
img.src = data;
img.onload = function () {
if (img.width < 300 || img.height < 300)
{
alert("upload image should be greater");
canvas.getActiveObject().remove();
}
};
fabric.Image.fromURL(data, function (img) {
var oImg = img.set({left: 50, top: 100,width:100, height:100, angle: 00}).scale(0.9);
canvas.add(oImg).renderAll();
var a = canvas.setActiveObject(oImg);
var dataURL = canvas.toDataURL({format: 'png', quality: 0.8});
console.log("aaaaaaaaaaa" + dataURL);
// console.log("Canvas Image " + dataURL);
// document.getElementById('txt').href = dataURL;
});
};
reader.readAsDataURL(file);
});
document.querySelector('#txt').onclick = function (e) {
e.preventDefault();
canvas.deactivateAll().renderAll();
document.querySelector('#preview').src = canvas.toDataURL();
var b= canvas.toDataURL();
console.log(b);
}
canvas{
border: 1px solid black;
}
<script src="https://rawgit.com/kangax/fabric.js/master/dist/fabric.min.js"></script>
<input type="file" id="file">
<canvas id="canvas" width="400" height="400"></canvas>
<a href='' id='txt' target="_blank">Click Me!!</a>
<br />
<img id="preview" />
JSFiddle: https://jsfiddle.net/varunPes/8gt6d7op/23/
魔鬼在细节中 - 问题中没有任何地方甚至建议你想将图像发送到某个地方 - 下面的代码仅限于客户端 - 您只能在客户端上使用短格式 url,并且如评论中所述,仅用于会话(重新启动浏览器,url 是无用的),或者直到调用
revokeObjectURL
你可以 - 如果浏览器支持它,请使用 Blob,它的 URL 很短
// converts a dataURI to a Blob
function dataUriToBlob(dataURI) {
var byteString = atob(dataURI.split(',')[1]);
var mimeString = dataURI.split(',')[0].split(':')[1].split(';')[0];
var arrayBuffer = new ArrayBuffer(byteString.length);
var _ia = new Uint8Array(arrayBuffer);
for (var i = 0; i < byteString.length; i++) {
_ia[i] = byteString.charCodeAt(i);
}
var dataView = new DataView(arrayBuffer);
var blob = new Blob([dataView], { type: mimeString });
return blob;
}
// cross browser cruft
var get_URL = function () {
return window.URL || window.webkitURL || window;
};
// ... your code, which eventually does this
var b = canvas.toDataURL();
// get an URL from the Blob
var blob = dataUriToBlob(b);
var url = get_URL().createObjectURL(blob);
console.log(url);
//
// ... when finished with the object URL
URL.revokeObjectURL(url);
如果要
避免发送数据URL,可以使用此函数将其转换为DataForm:
function dataURItoBlob(dataURI) {
// convert base64/URLEncoded data component to raw binary data held in a string
var byteString;
if (dataURI.split(',')[0].indexOf('base64') >= 0)
byteString = atob(dataURI.split(',')[1]);
else
byteString = unescape(dataURI.split(',')[1]);
// separate out the mime component
var mimeString = dataURI.split(',')[0].split(':')[1].split(';')[0];
// write the bytes of the string to a typed array
var ia = new Uint8Array(byteString.length);
for (var i = 0; i < byteString.length; i++) {
ia[i] = byteString.charCodeAt(i);
}
return new Blob([ia], {type:mimeString});
}
然后,调用它:
var dataURL = canvas.toDataURL('image/jpeg', 0.5);
var blob = dataURItoBlob(dataURL);
var fd = new FormData(document.forms[0]);
fd.append("canvasImage", blob);
最后,发送此表单(常规或 ajax)。
来源答案
相关文章:
- 如何检查这个代码点火器php函数是否工作,该函数是否在ajax url中使用
- 使用php或javascript根据某种url代码更改网页中的图片
- 使用现有代码更改基于浏览器宽度的图像url
- "“用户友好”;vimeo嵌入,从url获取嵌入代码
- 代码点火器在访问 URL 时提交表单
- 请我需要一个可以编辑mp3 URL的JavaScript代码
- 在Javascript代码中插入URL参数
- URL中包含特殊字符的HTTP状态代码
- 如何使用python在URL中捕获javascript代码注入
- 将javascript代码添加到URL
- 读取URL参数时,代码未获得预期值
- 所有悬停的Javascript url代码
- 如何应用youtube嵌入代码(如果字符串是youtube url)
- MVC - JS window.location.href 将代码插入 URL
- 在 JavaScript/AJAX 中传递带有附加到 URL 的查询字符串中的值的代码
- 如何通过 URL 将参数传递给 GAE 上的 JavaScript 代码
- 输出代码后更改链接中的 URL
- 如何在单击按钮并执行PHP代码后自动打开URL
- 带有JavaScript URL代码的电子邮件文本区域
- 如何获取博客中下一篇和上一篇文章的url代码