Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 14.07.2017, 15:44
Аспирант
Отправить личное сообщение для АнонимныйПарень Посмотреть профиль Найти все сообщения от АнонимныйПарень
 
Регистрация: 17.03.2017
Сообщений: 67

Помощь с Base64!!!
Как разшифровать base64 строку?

Вот что есть:

var canvas = document.getElementById('my_canvas'); 
		var context = canvas.getContext('2d');
		var pic = new Image();

		pic.onload = function(){
			canvas.width = pic.width;
			canvas.height = pic.height;
			context.drawImage(pic, 0, 0, pic.width, pic.height);

			context.fillStyle = "black";
			context.font = 'bold 30px sans-serif';
			context.fillText("Autor Famyly", 290, 235);
		};

		pic.src = '../images/account_info/certificates/item_2.jpg';

		var dataURL = canvas.toDataURL("image/png"); //это base64 как его перевести в бинарник?

		function save_canvas () {
			var a = document.createElement('a');
			a.href = dataURL;
			a.download = 'Certificate';

			a.click();
		};


После нужно будет полученый бинарник закинуть в a.href, что-бы пользователь мог скачать CANVAS. Методы btoa, atob не работают! Нужна помощь!

Последний раз редактировалось АнонимныйПарень, 14.07.2017 в 18:54.
Ответить с цитированием
  #2 (permalink)  
Старый 14.07.2017, 22:59
Интересующийся
Отправить личное сообщение для fearmear.wrk Посмотреть профиль Найти все сообщения от fearmear.wrk
 
Регистрация: 14.07.2017
Сообщений: 21

Вроде рабоатет.
https://jsfiddle.net/fearmearwrk/0Lxbgtk1/2/
Поменял pic.src на 'https://jsfiddle.net/img/logo.png' и вызвал save_canvas();
Ответить с цитированием
  #3 (permalink)  
Старый 14.07.2017, 23:19
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,109

Сообщение от fearmear.wrk
Вроде рабоатет.
в каком браузере?
Ответить с цитированием
  #4 (permalink)  
Старый 14.07.2017, 23:22
Интересующийся
Отправить личное сообщение для fearmear.wrk Посмотреть профиль Найти все сообщения от fearmear.wrk
 
Регистрация: 14.07.2017
Сообщений: 21

Проблема в том, что pic.onload это асинхронный код, а все ниже написано синхоронно. Соответственно нужно завернуть в callback, а лучше Promise.
var canvas = document.createElement('canvas'); 
var context = canvas.getContext('2d');

function loadImage(src, cb){
  var pic = new Image();
  pic.onload = function(){
    canvas.width = pic.width;
    canvas.height = pic.height;
    drawImage(pic, cb);
  }
  pic.crossOrigin = 'anonymous';
  pic.src = src;
}

function drawImage(pic, cb){
  context.drawImage(pic, 0, 0, pic.width, pic.height);	
  context.fillStyle = "black";
  context.font = 'bold 30px sans-serif';
  context.fillText("Autor Famyly", 290, 235);
  cb();
}

function saveImage(dataURL) {
  var a = document.createElement('a');
  a.href = dataURL;
  a.download = 'Certificate';
  a.click();
};

loadImage('http://i.imgur.com/fHyEMsl.jpg', function(){
	saveImage(canvas.toDataURL("image/png"));
});

Последний раз редактировалось fearmear.wrk, 16.07.2017 в 19:45.
Ответить с цитированием
  #5 (permalink)  
Старый 14.07.2017, 23:29
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,109

fearmear.wrk,
в Google Chrome сработало
Ответить с цитированием
  #6 (permalink)  
Старый 14.07.2017, 23:34
Интересующийся
Отправить личное сообщение для fearmear.wrk Посмотреть профиль Найти все сообщения от fearmear.wrk
 
Регистрация: 14.07.2017
Сообщений: 21

Пример с Promise. JSFiddle
var canvas = document.createElement('canvas'); 
var context = canvas.getContext('2d');

function loadImage(src){
	return new Promise(function(resolve){
  	var pic = new Image();
    pic.onload = function(){
      canvas.width = pic.width;
      canvas.height = pic.height;
      resolve(pic);
    }
    pic.crossOrigin = 'anonymous';
    pic.src = src;
  });
}

function drawImage(pic){
  context.drawImage(pic, 0, 0, pic.width, pic.height);	
  context.fillStyle = "black";
  context.font = 'bold 30px sans-serif';
  context.fillText("Autor Famyly", 290, 235);
  return canvas.toDataURL("image/png");
}

function saveImage(dataURL) {
  var a = document.createElement('a');
  a.href = dataURL;
  a.download = 'Certificate';
	a.click();
};

loadImage('http://i.imgur.com/fHyEMsl.jpg').then(drawImage).then(saveImage);

Последний раз редактировалось fearmear.wrk, 16.07.2017 в 19:43.
Ответить с цитированием
  #7 (permalink)  
Старый 15.07.2017, 10:39
Аспирант
Отправить личное сообщение для АнонимныйПарень Посмотреть профиль Найти все сообщения от АнонимныйПарень
 
Регистрация: 17.03.2017
Сообщений: 67

Спасибо, огромное! Но мне нужно что-бы окно "сохранения" вылезало по нажатию на кнопку с id="saver_btn". Что-то никак не могу настроить. Я использую 1 способ с callback'ом
Ответить с цитированием
  #8 (permalink)  
Старый 15.07.2017, 10:43
Аспирант
Отправить личное сообщение для АнонимныйПарень Посмотреть профиль Найти все сообщения от АнонимныйПарень
 
Регистрация: 17.03.2017
Сообщений: 67

И почему когда я вставляю свой путь к картинке, мне выдает ошибку? Я так понимаю дело в crossОrigin'е? Вот путь к моей картинке ../images/account_info/certificates/item_1.jpg
Ответить с цитированием
  #9 (permalink)  
Старый 15.07.2017, 14:40
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от АнонимныйПарень
Я так понимаю дело в crossОrigin'е?
Это регулирует доступ к стороннему домену, а его пути никак не могут быть относительными. То есть ваши относительные пути к вашим же изображениям не имеют никакого отношения к crossОrigin, они ваши и доступны. Путь неверный поэтому и ошибка.
Ответить с цитированием
  #10 (permalink)  
Старый 15.07.2017, 14:48
Аспирант
Отправить личное сообщение для АнонимныйПарень Посмотреть профиль Найти все сообщения от АнонимныйПарень
 
Регистрация: 17.03.2017
Сообщений: 67

Ошибка вылазит!

your_cerificate.html:89 Uncaught DOMException: Failed to execute 'toDataURL' on 'HTMLCanvasElement': Tainted canvases may not be exported.
at file:///D:/Courselogy/tabs/your_cerificate.html:89:26
at drawImage (file:///D:/Courselogy/tabs/your_cerificate.html:78:7)
at Image.pic.onload (file:///D:/Courselogy/tabs/your_cerificate.html:68:9)
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Требуется помощь с прошивкой баннеров HTML5 Canvas kambodge Работа 0 08.07.2016 13:55
Повтор фото (getUserMedia(),HTML5 Canvas) aspex Элементы интерфейса 1 27.12.2014 16:46
canvas рисование окружности imedia Элементы интерфейса 2 30.05.2014 17:40
Создание экземпляра Canvas не затрагивая HTML Tails Общие вопросы Javascript 2 09.03.2012 13:55
Добавить на canvas еще один елемент greengarlic Общие вопросы Javascript 5 22.09.2010 10:16