Ошибка HTML5 Canvas DrawImage Safari 12.0 (протестировано на iOS 12.1 / Mac OS Mojave) - PullRequest
0 голосов
/ 25 ноября 2018

Недавно обнаружил эту ошибку при работе с CanvasRenderingContext2D.drawImage() методом Canvas 2D API

void ctx.drawImage(image, sx, sy, sWidth, sHeight, dx, dy, dWidth, dHeight);

enter image description here

sx и sy параметры, которые должны быть x-axis и y-axis координатами левый верхний угол под прямоугольника исходного изображения , для рисования в контексте назначения,(источник: Mozilla ) работает по-разному в браузерах Safari, если предоставляется значение меньше 0 (отрицательные значения).

Отрицательные значения для sx и sy в других браузерах ( протестированных Chrome и Microsoft Edge ) работают должным образом, переставляя упомянутый верхний левый угол вдоль отрицательных сторон x-axis и y-axis

enter image description here


Но на Safari , отрицательные значения для sx и sy сбрасывают верхние левые координаты на 0,0 и влияют наRIGHT BOTTOM CORNER под прямоугольника исходного изображения , для рисования в контексте назначения.

enter image description here

Вот какприлагаемый демонстрационный фрагмент холста отображается на Chrome и Safari (контур является границей холста) : enter image description here

const canvas = document.getElementById('canvas');
const ctx = canvas.getContext('2d');
const image = document.getElementById('source');

onload = e =>
  ctx.drawImage(image, -40, -160, 300, 290, 0, 0, 300, 290);
canvas {
  border: 1px solid black;
}
<canvas id="canvas" width="300" height="290"></canvas>
<div style="display:none;">
  <img id="source" src="https://i.stack.imgur.com/NS35G.jpg">
</div>

Любой обходной путь для этого определенно поможет.

РЕДАКТИРОВАТЬ: Ширина источника и высота источника не превышает фактического изображенияширина или высота.

...