0 / 0 / 0
Регистрация: 29.01.2013
Сообщений: 71
1

Копирование текста с градиентом на холст

25.11.2018, 19:06. Показов 514. Ответов 4

Студворк — интернет-сервис помощи студентам
Не получается после нажатия на кнопку copy скопировать с одного места на холсте текста с градиентом на другое.
Пробую испытать метод который копирует с холста getImageData и вставить методом putImageData, но почему то ничего не происходит, копия вторая не делается.

PHP/HTML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>Canvas в HTML5</title>
    </head>
    <body onload='myImage()'>
<button onclick="copy()">Copy</button>
<canvas id='test' width='1000px' height='1000px'></canvas>
 
<script>
    function myImage(){
    image = new Image()
    var image = document.createElement('img'),
    context = document.getElementById('test').getContext('2d');     
    image.onload = function() {
    context.fillStyle = context.createPattern(image, 'no-repeat');
    context.strokeStyle='red'
    context.beginPath()
    context.lineWidth=5;
    context.setLineDash([5,5])
    context.font = '200px Verdana'
    //Заполнение для букв 
    context.fillText('Hello', 0, 200);
    
    //Окантовка для букв
   context.strokeText('Hello', 0, 200);
};
 
  image.src = '1.jpg';
//Сдвиг тени право
  context.shadowOffsetX = 50
  //Сдвиг тени вниз
  context.shadowOffsetY = 100
  //размытость
  context.shadowBlur = 15
  context.shadowColor = 'brown'
}
 
 function copy()
{
var imgData=context.getImageData(10,10,200,200);
context.putImageData(imgData,800,800);
} 
        </script>
 
    </body>
</html>
При нажатии на кнопку должна сделаться копия.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.11.2018, 19:06
Ответы с готовыми решениями:

Цвет текста градиентом
Здравствуйте, можно ли сделать цвет текста градиентом? По типу: color: linear-gradient(160deg,...

Анимация заливки градиентом текста
Добрый делаю градиент у текста css взял от сюда http://shpargalkablog.ru/2013/11/gradient-text.html...

Градиент текста. Текст выводится, но буквы пустые с окантовкой, не залиты градиентом.
Другой эксперимент и вопрос касаемо градиента. Решил попробовать градиент текста.. Вроде текст...

Копирование определенного текста из файла, копирование и вставка в статичную переменную
Доброго вечера. Делаю программу которая бы выводила погоду на сегодня через данные сайта. Завис на...

4
632 / 474 / 170
Регистрация: 26.05.2016
Сообщений: 2,624
25.11.2018, 21:29 2
usa-1450, тег img Вы создали, но его не разместили appendChild в DOM. К тому же не понятно чьё содержимое Вы хотите скопировать и куда.
0
0 / 0 / 0
Регистрация: 29.01.2013
Сообщений: 71
25.11.2018, 21:35  [ТС] 3
Я делаю по примеру из документации только копирую текст залитый градиентом, вместо фигуры которая копируется в документации. https://www.w3schools.com/tags... gedata.asp
Ошибка: Uncaught ReferenceError: context is not defined
Хоть функция определена координатами с которых я копирую

Javascript
1
var imgData=context.getImageData(10,10,200,200);
Мне нужно сделать копию текста Hello и вставить на тот же холст после нажатия на кнопку
Миниатюры
Копирование текста с градиентом на холст  
0
0 / 0 / 0
Регистрация: 29.01.2013
Сообщений: 71
25.11.2018, 23:50  [ТС] 4
Цель разобраться как Javascript (-ом) это все можно сделать.
Решил все оформить в одной функции myImage()
И туда вставить эти 2 строки, первая которая копирует с позиции слово hello , а вторая вставляет его на том же холсте в нужную позицию, но в итоге при нажатии на кнопку copy наполняется только тень слова hello, не копируется hello. Пробовал глянуть как пользоваться addEventListener но он выдает ошибку в консоли что функция не определена. К примеру если написать так

PHP/HTML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>Canvas в HTML5</title>
    </head>
    <body onload='myImage()'>
<button onclick="myImage()">Copy</button>
<canvas id='test' width='1000px' height='1000px'></canvas>
 
<script>
    function myImage(){
    image = new Image()
    var image = document.createElement('img'),
    context = document.getElementById('test').getContext('2d');     
    image.onload = function() {
    context.fillStyle = context.createPattern(image, 'no-repeat');
    context.strokeStyle='red'
    context.beginPath()
    context.lineWidth=5;
    context.setLineDash([5,5])
    context.font = '200px Verdana'
    //Заполнение для букв 
    context.fillText('Hello', 0, 150);
    
    //Окантовка для букв
   context.strokeText('Hello', 0, 150);
context.addEventListener('click',function (){
    var imgData=context.getImageData(0,0,200,200);
    context.putImageData(imgData,1000,1000),false);
}) 
 
};
 
 
 
  image.src = '1.jpg';
//Сдвиг тени право
  context.shadowOffsetX = 50
  //Сдвиг тени вниз
  context.shadowOffsetY = 100
  //размытость
  context.shadowBlur = 15
  context.shadowColor = 'brown'
}
 
 
        </script>
 
    </body>
</html>
Вариант 2. тоже не хочет работать, только наполняется тень, как бы я координаты не указывал копирования все равно только походу копируется тень и все.

PHP/HTML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>Canvas в HTML5</title>
    </head>
    <body onload='myImage()'>
<button onclick="myImage()">Copy</button>
<canvas id='test' width='1000px' height='1000px'></canvas>
 
<script>
    function myImage(){
    image = new Image()
    var image = document.createElement('img'),
    context = document.getElementById('test').getContext('2d');     
    image.onload = function() {
    context.fillStyle = context.createPattern(image, 'no-repeat');
    context.strokeStyle='red'
    context.beginPath()
    context.lineWidth=5;
    context.setLineDash([5,5])
    context.font = '200px Verdana'
    //Заполнение для букв 
    context.fillText('Hello', 0, 150);
    
    //Окантовка для букв
   context.strokeText('Hello', 0, 150);
var imgData=context.getImageData(0,0,200,200);
context.putImageData(imgData,1000,1000);
 
};
 
 
 
  image.src = '1.jpg';
//Сдвиг тени право
  context.shadowOffsetX = 50
  //Сдвиг тени вниз
  context.shadowOffsetY = 100
  //размытость
  context.shadowBlur = 15
  context.shadowColor = 'brown'
}
 
 
        </script>
 
    </body>
</html>
0
632 / 474 / 170
Регистрация: 26.05.2016
Сообщений: 2,624
26.11.2018, 07:44 5
usa-1450, Вы сначала разберитесь, откуда, что и куда копируете. Вот Вам пример, всё прекрасно копируется:

HTML5
1
2
3
4
5
6
7
8
9
10
11
<html>
    <head>
        <meta charset="utf-8">
        <title>Canvas в HTML5</title>
    </head>
    <body>
        <img id = "test1" src="74.jpg" style="width:15%;">
        <canvas id='test' width='100px' height='100px'></canvas>
        <button>Copy</button>
    </body>
<script type="text/javascript" src = "100.js"></script>
Javascript
1
2
3
4
5
6
7
8
9
document.addEventListener('DOMContentLoaded', getReady);
function getReady()
{
  document.getElementsByTagName('button')[0].addEventListener('click', copyToCanvas);
}
function copyToCanvas()
{
  document.getElementById('test').getContext('2d').drawImage(document.getElementById('test1'), 0, 0);
}
0
26.11.2018, 07:44
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.11.2018, 07:44
Помогаю со студенческими работами здесь

Автоматическое копирование данных по цвету текста вместо текста обычного
Вечер добрый. Подскажите как составить формулу для следующей ситуации. Есть столбец с текстами в...

Копирование текста блокнота в textbox1 и сохранение текста в блокноте
Всем привет, прошу помочь с решение задания. Вообщем, суть в том, чтобы из Блокнота(test.txt)...

Изменить холст изображения
Доброго времени суток. Сразу говорю, что в PHP не очень силён и в основном мои отношения с ним были...

Холст мешает нажатиям
Здравствуйте, я столкнулся с проблемой - один холст canvas не дает мне нажимать на другой холст...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru