Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Загружаем информацию в canvas из базы данных! (https://javascript.ru/forum/dom-window/28390-zagruzhaem-informaciyu-v-canvas-iz-bazy-dannykh.html)

nataLi-li 17.05.2012 17:27

Загружаем информацию в canvas из базы данных!
 
Есть такая задача для построения мини-онлайн-фоторедактора:
нужно загрузить в canvas последовательно фото и текст из базы данных. Получается, но текст всегда оказывается ниже картинки. Как избежать этого? И вообще, как управлять слоями в canvas?

vadim5june 17.05.2012 18:56

Цитата:

Сообщение от nataLi-li (Сообщение 174997)
Есть такая задача для построения мини-онлайн-фоторедактора:
нужно загрузить в canvas последовательно фото и текст из базы данных. Получается, но текст всегда оказывается ниже картинки. Как избежать этого? И вообще, как управлять слоями в canvas?

Все зависит от того как вы загружаете
Если в один и тот же канвас загрузить и текст и картинку то взаимным положением легко манипулировать

Раед 17.05.2012 19:43

Цитата:

Сообщение от nataLi-li
как управлять слоями в canvas?

Это вам не фотошоп, в канвазе слоёв нет.
Взаиморасположение текста и картинки зависит от того, что раньше выведите.

vadim5june 17.05.2012 20:01

Цитата:

Сообщение от Раед (Сообщение 175039)
Это вам не фотошоп, в канвазе слоёв нет.
Взаиморасположение текста и картинки зависит от того, что раньше выведите.

Там все равно что раньше выведем
Там просто координаты задаются и картинке и тексту

Раед 17.05.2012 20:09

Цитата:

Сообщение от vadim5june
Там все равно что раньше выведем
Там просто координаты задаются и картинке и тексту

Там картинка на текст накладывается, потому, что текст выводится раньше картинки. Координаты тут не причём

vadim5june 17.05.2012 20:13

Цитата:

Сообщение от Раед (Сообщение 175046)
Там картинка на текст накладывается, потому, что текст выводится раньше картинки. Координаты тут не причём

Ну вы наверно с кавасом не работали
картинка выводится
ctx.drawImage(img, x, y) -x y rкоординаты
Текст выводится
ctx.fillText(text,x,y)-x y rкоординаты

razerxxx 17.05.2012 20:15

Была похожая проблема, правда я использовал либу fabric.js.
Так вот, у меня при инициализации загружалось в канвас некоторое количество картинок. По идее они должны были загружаться по порядку, то есть в каком порядке они пришли в json-е - в таком и должны быть на холсте. На деле - те картинки которые загружались быстрее в DOM - оказывались на холсте раньше и соответсвенно путались позиции.
Проблему решил таким хаком - на страничке создал картинку размером 1 пиксель. И собственно ее и грузил вместо необходимых картинок на холст, то есть получалось объекты занимали позицию в порядке очередности, а уже потом менял изображения загруженных объектов.

Скорее всего у вас похожая проблема - текст оказывается ниже - потому что картинка еще не загрузилась в dom. Решение: сначала загрузить картинки в dom, а потом уже загружать все в канвас, либо сделать как я, сначала грузить картинку которая уже есть на странице, а потом подменить на свою

Раед 17.05.2012 20:18

Цитата:

Сообщение от vadim5june
Ну вы наверно с кавасом не работали

Работал
Цитата:

Сообщение от vadim5june
картинка выводится
ctx.drawImage(img, x, y) -x y rкоординаты
Текст выводится
ctx.fillText(text,x,y)-x y rкоординаты

И что? А если я хочу, чтобы у меня текст был поверх картинки?
Правильно. Я буду делать fillText после drawImage.
Координаты никак не относятся к проблеме, которую изложил ТС

vadim5june 17.05.2012 20:24

Цитата:

Сообщение от Раед (Сообщение 175049)
Я буду делать fillText после drawImage.
Координаты никак не относятся к проблеме, которую изложил ТС

Чтобы текст был поверх картинки нужно чтобы координаты текста были внутри картинки-я это имел ввиду

Раед 17.05.2012 20:28

Цитата:

Сообщение от vadim5june
Чтобы текст был поверх картинки нужно чтобы координаты текста были внутри картинки-я это имел ввиду

Цитата:

Сообщение от nataLi-li
Получается, но текст всегда оказывается ниже картинки.

vadim5june,
Судя по всему они там и есть

dmitriymar 17.05.2012 20:41

а вы по русски говорить можете? как ниже? по кокой оси?
по Y или по Z? ниже может быть как ниже по оси y ,так и перекрываться по оси z
Цитата:

Сообщение от Раед
Это вам не фотошоп, в канвазе слоёв нет.
Взаиморасположение текста и картинки зависит от того, что раньше выведите.

ну как нет, если можно управлять наложением слоёв ?(как они будут складываться)
другой момент в том что нельзя обратится к пред слою,но ничего не мешает их эмулировать

Цитата:

Сообщение от Раед
И что? А если я хочу, чтобы у меня текст был поверх картинки?
Правильно. Я буду делать fillText после drawImage.

не факт,смотря как настроить наложение слоёв(графики)
globalCompositeOperation

Раед 17.05.2012 20:43

Цитата:

Сообщение от dmitriymar
ну как нет, если можно управлять наложением слоёв?

Каких слоёв? Мы не можем ничего передвинуть, после того, как нарисовали. Ни по какой оси. Можем только всё перерисовать. И где тут слои?

dmitriymar 17.05.2012 20:48

Цитата:

Сообщение от dmitriymar
globalCompositeOperation

доки читай-каждый "рисунок" это слой
Цитата:

Сообщение от Раед
Мы не можем ничего передвинуть, после того, как нарисовали.

-мы можем это эмулировать- читай что написано, а не то, что тебе хочется прочитать
Цитата:

Сообщение от dmitriymar
другой момент в том что нельзя обратится к пред слою,но ничего не мешает их эмулировать


vadim5june 17.05.2012 21:07

Цитата:

Сообщение от dmitriymar (Сообщение 175062)
доки читай-каждый "рисунок" это слой
-мы можем это эмулировать- читай что написано, а не то, что тебе хочется прочитать

C помощью globalCompositeOperation слои не эмулируются
она предназначена для вывода пересечения двух объектов а слои это наложение двух и более групп объектов

dmitriymar 17.05.2012 21:29

Цитата:

Сообщение от vadim5june
C помощью globalCompositeOperation слои не эмулируются
она предназначена для вывода пересечения двух объектов а слои это наложение двух и более групп объектов

ещё один. читать то умеешь ,что написано выше?
Цитата:

Сообщение от dmitriymar
Сообщение от Раед
И что? А если я хочу, чтобы у меня текст был поверх картинки?
Правильно. Я буду делать fillText после drawImage.

Цитата:

Сообщение от dmitriymar
не факт,смотря как настроить наложение слоёв(графики)
globalCompositeOperation

где там хоть слово что это эмулирует слои? по русски ведь написано что управляет наложением слоёв(графики)
Цитата:

Сообщение от vadim5june
а слои это наложение двух и более групп объектов

чего это только групп? для каждого "рисунка". проверь наличие пикселя через стандартную функцию проверки пиксела канвы-после каждого "рисунка" пред пикселы не будут регистрироваться

vadim5june 17.05.2012 21:39

Цитата:

Сообщение от dmitriymar (Сообщение 175067)
ещё один. читать то умеешь ,что написано выше?

Есть общепринятое понятие что такое слой-и в канвасе их нет
Если у Вас свое собственное то не навязывайте его другим

dmitriymar 17.05.2012 21:42

Цитата:

Сообщение от vadim5june
Если у Вас свое собственное то не навязывайте его другим

открываем информацию достоверную и читаем-каждый раз рисуется сверху на новом слое. слои значит есть, но слоёв нет?
Цитата:

Сообщение от vadim5june
Есть общепринятое понятие что такое слой-и в канвасе их нет

кстати просветите что такое слой по вашему. помниться прошлый раз у вас rect канвы были===div
http://ru.wikipedia.org/wiki/%D0%A1%D0%BB%D0%BE%D0%B9 -я думаю, у вас пространства более чем, чтоб придумать "общепринятое" определение слоя
Цитата:

Сообщение от vadim5june
Есть общепринятое понятие что такое слой-и в канвасе их нет


vadim5june 17.05.2012 21:54

Цитата:

Сообщение от dmitriymar (Сообщение 175070)
rect канвы были===div

Вы посмотрите в ответ на какую вашу реплику я сказал-и Вам стенет понятно
Вы там сказали что то про то как можно элемент див повернуть в канвасе
так как див в канвас никак не затащишь то я и ответил что аналогия дива это rect-и то и другое рисует пряяоугольники

dmitriymar 17.05.2012 21:57

Цитата:

Сообщение от vadim5june
Вы там сказали что то про то как можно элемент див повернуть в канвасе
так как див в канвас никак не затащишь то я и ответил что аналогия дива это rect-и то и другое рисует пряяоугольники

С каких это стало так? А аналогия самолёта это велосипед-потому что у него тоже есть крылья:lol:

vadim5june 17.05.2012 22:01

Цитата:

Сообщение от dmitriymar (Сообщение 175073)
С каких это стало так? А аналогия самолёта это велосипед-потому что у него тоже есть крылья:lol:

Это у Вас надо спросить как Вы див в канвасе повернуть хотели

dmitriymar 17.05.2012 22:03

Цитата:

Сообщение от vadim5june
Это у Вас надо спросить как Вы див в канвасе повернуть хотели

а вот контекст перевирать не нужно-не оценит никто:nono:

vadim5june 17.05.2012 22:12

Цитата:

Сообщение от dmitriymar (Сообщение 175075)
а вот контекст перевирать не нужно-не оценит никто:nono:

вот Ваша реплика
"ну поверни мне div и его любое содержимое в канве"

dmitriymar 17.05.2012 22:14

Цитата:

Сообщение от vadim5june
вот Ваша реплика
"ну поверни мне div и его любое содержимое в канве"

вырванная из контекста. надоел ты уже .

vadim5june 17.05.2012 22:17

Цитата:

Сообщение от dmitriymar (Сообщение 175077)
вырванная из контекста. надоел ты уже .

Взаимно

dmitriymar 17.05.2012 22:42

vadim5june,
да уж блеснул так блеснул своим критинизмом ты у меня в карме...
если ты сам не понимаешь что ты несёшь-тебе никто уже не поможет.....

nataLi-li 18.05.2012 08:47

Цитата:

Сообщение от razerxxx (Сообщение 175048)
Была похожая проблема, правда я использовал либу fabric.js.
Так вот, у меня при инициализации загружалось в канвас некоторое количество картинок. По идее они должны были загружаться по порядку, то есть в каком порядке они пришли в json-е - в таком и должны быть на холсте. На деле - те картинки которые загружались быстрее в DOM - оказывались на холсте раньше и соответсвенно путались позиции.
Проблему решил таким хаком - на страничке создал картинку размером 1 пиксель. И собственно ее и грузил вместо необходимых картинок на холст, то есть получалось объекты занимали позицию в порядке очередности, а уже потом менял изображения загруженных объектов.

Скорее всего у вас похожая проблема - текст оказывается ниже - потому что картинка еще не загрузилась в dom. Решение: сначала загрузить картинки в dom, а потом уже загружать все в канвас, либо сделать как я, сначала грузить картинку которая уже есть на странице, а потом подменить на свою

Да-да, fabricjs и использую. Попробую воспользоваться вашим способом. Спасибо!

nataLi-li 18.05.2012 14:33

Цитата:

Сообщение от razerxxx (Сообщение 175048)
Была похожая проблема, правда я использовал либу fabric.js.
...
Скорее всего у вас похожая проблема - текст оказывается ниже - потому что картинка еще не загрузилась в dom. Решение: сначала загрузить картинки в dom, а потом уже загружать все в канвас, либо сделать как я, сначала грузить картинку которая уже есть на странице, а потом подменить на свою

Цитата:

Сообщение от nataLi-li (Сообщение 175137)
Да-да, fabricjs и использую. Попробую воспользоваться вашим способом. Спасибо!

хм-м, не получается подменить.

razerxxx 18.05.2012 23:14

Цитата:

Сообщение от nataLi-li (Сообщение 175200)
хм-м, не получается подменить.

Я делал так:
setNewImage = function(c_object, src) {
    var img = new Image(); 
    img.src = src;
    // если просто сменить фон, то могут быть глюки, поэтому надо сперва загрузить картинку. 
    img.onload = function() { 
        c_object.setElement(img).setCoords(); // смена фона происходит здесь
        canvas.renderAll(); 
    };
}

здесь c_object - канвас элемент, canvas - холст на котором располагаются все элементы


Часовой пояс GMT +3, время: 05:35.