Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 29.02.2020, 20:35
Интересующийся
Отправить личное сообщение для AndrewKokorev Посмотреть профиль Найти все сообщения от AndrewKokorev
 
Регистрация: 25.02.2020
Сообщений: 19

Canvas. Качество картинки при сохранении.
Привет, парни.

Канвасу задаю небольшие размеры по типу 50 на 50 допустим и растягиваю в CSS, чтобы получить большие пиксели. CSS свойство image-rendering: pixelated убирает размытие, которое появляется из-за того что канвас растянут.

Уже 3 недели делаю свою пиксельную рисовалку для анимации и вообще не подумал как я буду сохранять потом всё это. И сегодня столкнулся с проблемой то что метод canvas.toDataURL() по сути сохраняет картинку просто в пикселях, которые соответственно равны заданному размеру канваса, то бишь 50 ширина и 50 высота сохранённой картинки. Соответственно понимаете что будет, если её растянуть - то же мыло что и было бы на канвасе без image-rendering: pixelated.

Думал обмануть систему и выиграть так в производительности: много слоёв, кадров, которые будут постоянно сохраняются и рендерятся , там на один массив Uint8ClampedArray имеет over 10k значений. И кароче знатно я объ... походу

Есть какие-то способы сохранить картинку с нормальным разрешением?

Если нет, то придётся перелапачивать всё алгоритмы инструментов, подстраивание размеров канваса под родителя и возможно сохранения слоёв делать через toDataURL() т.к он как понял более производительный. Кароче жопа-па))Хэлп

Последний раз редактировалось AndrewKokorev, 29.02.2020 в 20:38.
Ответить с цитированием
  #2 (permalink)  
Старый 29.02.2020, 20:40
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,565

Ну конкретно на сохранении делаешь отдельный canvas нужного размера, из первого получаешь ImageData, дублируешь пиксели, кладёшь во второй, toDataURL(лучше toBlob).
Это если хочется гарантии.

В принципе можно пропустить шаг с ImageData и дублированием пикселей и просто отключить imageSmoothingEnabled перед отрисовкой:
<canvas id="drawingCanvas" width="20" height="20"></canvas>
<canvas id="canvas" width="400" height="400"></canvas>
<script>
var image = new Image();
image.onload = function () {
  drawingCanvas.width = image.width;
  drawingCanvas.height = image.height;
  drawingCanvas.getContext('2d').drawImage(image, 0, 0);
  
  var width = drawingCanvas.width * 7;
  var height = drawingCanvas.height * 7;
  
  canvas.width = width;
  canvas.height = height;
  
  var ctx = canvas.getContext('2d');
  ctx.imageSmoothingEnabled = false;
  ctx.drawImage(drawingCanvas, 0, 0,  width,  height);
}
image.src = "https://javascript.ru/forum/images/smilies/tongue.gif";
</script>

Но imageSmoothingEnabled - больно мутное свойство.
__________________
29375, 35

Последний раз редактировалось Aetae, 29.02.2020 в 21:02.
Ответить с цитированием
  #3 (permalink)  
Старый 29.02.2020, 23:45
Профессор
Отправить личное сообщение для Rise Посмотреть профиль Найти все сообщения от Rise
 
Регистрация: 07.11.2013
Сообщений: 4,672

Сообщение от AndrewKokorev
делаю свою пиксельную рисовалку для анимации
Такую? Полезно смотреть аналоги.
Ответить с цитированием
  #4 (permalink)  
Старый 01.03.2020, 20:28
Интересующийся
Отправить личное сообщение для AndrewKokorev Посмотреть профиль Найти все сообщения от AndrewKokorev
 
Регистрация: 25.02.2020
Сообщений: 19

Спасибо, вставил на codeopen, вижу что пример рабочий, но применяю это в своём коде и нифига не отображается))Ладно буду копать в чем причина)
Ответить с цитированием
  #5 (permalink)  
Старый 01.03.2020, 20:31
Интересующийся
Отправить личное сообщение для AndrewKokorev Посмотреть профиль Найти все сообщения от AndrewKokorev
 
Регистрация: 25.02.2020
Сообщений: 19

Что-то типа)) Я уже выкачивал код с этого сайта, там 15к строк кода одним файлом, пока я разберу что там к чему, можно самому всё написать)
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
замена картинки при наведении курсора на область sasha1427 Элементы интерфейса 22 28.04.2017 08:22
Увеличение картинки при увеличении счётчика в ней дилетант Events/DOM/Window 2 28.05.2016 14:39
Смена фона и картинки при клике solobutova@mail.ru Элементы интерфейса 4 06.04.2016 15:50
Переключения type=checked при нажатии на картинки subbziro Общие вопросы Javascript 3 02.08.2015 17:22
Изменение картинки при ховере на ссылку DImaN Общие вопросы Javascript 0 25.12.2008 12:13