Ответ 1
Во-первых, это не имеет особого отношения к Rails. Вы можете использовать Ruby для решения этой проблемы.
Сначала выберите содержимое холста, как вы уже делаете:
var dataURL = canvas.toDataURL("image/png");
В этот момент вы можете просто открыть новое окно с помощью Javascript и открыть изображение прямо там (взаимодействие с сервером не требуется):
var window = window.open();
window.document.write('<img src="'+dataURL+'"/>');
$('a.my-link').click(function(){
open().document.write('<img src="'+dataURL+'"/>');
return false;
});
Вот небольшая скрипка, чтобы проиллюстрировать это: http://jsfiddle.net/XtUFt/
Или вы можете отправить чистую строку base64 на сервер и создать свое приложение для создания фактического изображения и использовать представление для его рендеринга:
var base64 = dataURL.replace(/^data:image\/(png|jpg);base64,/, "") ;
var window = window.open('http://www.yourapp.com/controller/action?base64='+base64);
! Это упрощенный пример и предполагает маленькое изображение очень. Если ваше изображение как-то больше, вам придется использовать запрос "post", потому что ваш URL-адрес не будет переносить данные, поскольку строка просто слишком длинная!
И на сервере вы можете использовать для создания изображения:
require 'base64'
File.open('your/image/path/and/name.gif', 'wb') do|f|
f.write(Base64.decode64(params[:base64]))
end
Тогда это просто вопрос об открытии изображения и визуализации представления соответственно.