Trước hết, điều này không liên quan nhiều đến Rails. Tuy nhiên, bạn có thể sử dụng Ruby để giải quyết vấn đề này.
Đầu tiên lấy nội dung của bức tranh như bạn đã thực hiện:
Tại thời điểm này bạn chỉ có thể mở một cửa sổ mới với Javascript và mở hình ảnh thẳng trong đó (không tương tác máy chủ cần thiết) :
var window = window.open();
window.document.write('<img src="'+dataURL+'"/>');
$('a.my-link').click(function(){
open().document.write('<img src="'+dataURL+'"/>');
return false;
});
Dưới đây là một fiddle nhỏ để minh họa điều này: http://jsfiddle.net/XtUFt/
Hoặc bạn có thể gửi các chuỗi base64 tinh khiết đến máy chủ một nd có ứng dụng của bạn tạo ra một hình ảnh thực tế và sử dụng nhằm làm cho nó:
var base64 = dataURL.replace(/^data:image\/(png|jpg);base64,/, "") ;
var window = window.open('http://www.yourapp.com/controller/action?base64='+base64);
Đây là một ví dụ đơn giản và giả định một hình ảnh rất nhỏ. Nếu hình ảnh của bạn lớn hơn, bạn sẽ phải sử dụng yêu cầu 'đăng' vì URL của bạn sẽ không mang dữ liệu vì chuỗi chỉ đơn giản là quá dài!
Và trên máy chủ sau đó bạn có thể sử dụng để tạo ra các hình ảnh:
require 'base64'
File.open('your/image/path/and/name.gif', 'wb') do|f|
f.write(Base64.decode64(params[:base64]))
end
Sau đó, nó chỉ là một vấn đề mở hình ảnh và render một cái nhìn phù hợp.
Cảm ơn bạn đã trả lời lời nhắc cực nhanh. Nhưng tại sao phương pháp sau được đề xuất trong bài trước đó mở cửa sổ hiển thị biểu tượng cho biết trang vẫn đang tải? var window = window.open(); window.document.write ("thẻ hình ảnh có src = dataURL"); Mục đích chính của tôi là cho phép người dùng lưu biểu đồ mà anh nhìn thấy trong canvas dưới dạng hình ảnh. Sau khi nhìn thấy hình ảnh biểu đồ đã chọn xuất hiện trong cửa sổ khác, người dùng có thể nhấp chuột phải vào hình ảnh để lưu. Vì vậy, tôi đoán phương pháp trên là đủ. Nhưng hãy sửa tôi nếu tôi sai. Xin cảm ơn trước. – Mich
Tôi đã thêm một ví dụ về cách liên kết có thể làm gì. Dường như làm việc. Nhưng bạn nói đúng - biểu tượng tải không biến mất. Bạn có thể cố gắng xác định các tham số mà hàm 'window.open' thực hiện và xem nó có giúp ích gì không. – polarblau
Cảm ơn bạn một lần nữa vì câu trả lời nhanh chóng. Sau nhiều google-ing, tôi phát hiện ra rằng chúng ta phải sử dụng window.document.close(); sau khi viết vào cửa sổ mới để biểu thị rằng chúng tôi đã ngừng ghi vào cửa sổ. Vì vậy, sau khi tôi thêm hàm close(), biểu tượng tải biến mất khi hình ảnh đang được hiển thị. – Mich