我正在尝试创建一个小图像处理Web应用程序作为项目。我正在尝试将Drag画布图像从浏览器实现到桌面。我做了一些挖掘并找到了
http://www.thecssninja.com/javascript/gmail-dragout和http://jsfiddle.net/bgrins/xgdSC/(由TheCssNinja& Brian Grinstead提供)
function dragoutImages() {
if (!document.addEventListener) {
return;
}
document.addEventListener("dragstart", function(e) {
var element = e.target;
var src;
if (element.tagName === "IMG" && element.src.indexOf("data:") === 0) {
src = element.src;
}
if (element.tagName === "CANVAS") {
try {
src = element.toDataURL();
}
catch(e) { }
}
if (src) {
var name = element.getAttribute("alt") || "download";
var mime = src.split(";")[0].split("data:")[1];
var ext = mime.split("/")[1] || "png";
var download = mime + ":" + name + "." + ext + ":" + src;
e.dataTransfer.setData("DownloadURL", download);
}
}, false);
}
function drawCanvas(){
var canvas = document.getElementById('mycanvas');
var ctx = canvas.getContext('2d');
var lingrad = ctx.createLinearGradient(0,0,0,150);
lingrad.addColorStop(0, '#000');
lingrad.addColorStop(0.5, '#669');
lingrad.addColorStop(1, '#fff');
ctx.fillStyle = lingrad;
ctx.fillRect(0, 0, canvas.width, canvas.height);
var img = new Image();
img.src = canvas.toDataURL("image/png");
img.alt = 'downloaded-from-image';
$(img).appendTo("body");
}
dragoutImages();
drawCanvas();
这适用于作为HTML元素的文件,但我无法抓取画布图像并使用理论下载它。有没有人实现过这样的功能?
我已经使用canvas.toDataURL来获取图像数据,如果我发出警报,我会看到我的画布拖动开始编码的图像数据,但是当在浏览器外面时,图标会变回停止符号。
寻找有关如何实施此方法的方法和想法。
这是我设法实现并且运作良好的原因,
function download(e){
downloadImageData = eCanv.getImageData(750 - (scaledWidth / 2), 250 - (scaledHeight / 2), scaledWidth, scaledHeight);
dlcanvas = document.createElement('canvas');
dlcanvas.setAttribute('width',scaledWidth);
dlcanvas.setAttribute('height',scaledHeight);
dlcontext = dlcanvas.getContext("2d");
dlcontext.putImageData(downloadImageData, 0,0);
url = dlcanvas.toDataURL('image/jpg');
//name = document.getElementById("filename").value;
var mime = url.split(";")[0].split("data:")[1];
var name = mime.split("/")[0];
var ext = mime.split("/")[1] || "jpg";
var download = mime + ":" + name + "." + ext + ":" + url;
e.dataTransfer.setData("DownloadURL", download);
}
改编自cssninja和Brian Grinstead的代码。
答案 0 :(得分:0)
没有
出于安全原因,Javascript 无法写入本地文件系统。
Javascript可以使用filereader从本地文件系统中读取:http://www.html5rocks.com/en/tutorials/file/dndfiles/
它甚至可以写入沙盒浏览器文件(localstorage):http://www.w3schools.com/html/html5_webstorage.asp
您甚至可以将其从服务器上退回,然后询问用户是否要从服务器下载图像。
答案 1 :(得分:0)
对于基于本地Web的应用程序,您可以使用或编写本地Web服务器或服务,或使用php等功能来添加功能,以便通过javascript与本地文件系统进行交互。似乎这是被遗忘的,并非禁止在与浏览器相同的机器上安装网络服务器:)