NoD*_*chi 5 javascript html5 canvas
我正在缩小图像以使其适合画布内部,我正在努力做的事情就是将其置于canavas元素内部,有人知道如何做到这一点吗?任何帮助,将不胜感激
https://jsfiddle.net/n7xL5c37/
var canvas = document.getElementById('canvas');
var image = new Image();
image.src = 'http://placehold.it/300x550';
image.onload = function () {
var canvasContext = canvas.getContext('2d');
var wrh = image.width / image.height;
var newWidth = canvas.width;
var newHeight = newWidth / wrh;
if (newHeight > canvas.height) {
newHeight = canvas.height;
newWidth = newHeight * wrh;
}
canvasContext.drawImage(image,0,0, newWidth , newHeight);
};
Run Code Online (Sandbox Code Playgroud)
小智 5
var canvas = document.getElementById('canvas');
var image = new Image();
image.src = 'http://placehold.it/300x550';
image.onload = function () {
var canvasContext = canvas.getContext('2d');
var wrh = image.width / image.height;
var newWidth = canvas.width;
var newHeight = newWidth / wrh;
if (newHeight > canvas.height) {
newHeight = canvas.height;
newWidth = newHeight * wrh;
}
var xOffset = newWidth < canvas.width ? ((canvas.width - newWidth) / 2) : 0;
var yOffset = newHeight < canvas.height ? ((canvas.height - newHeight) / 2) : 0;
canvasContext.drawImage(image, xOffset, yOffset, newWidth, newHeight);
};Run Code Online (Sandbox Code Playgroud)
<canvas id="canvas" width="500" height="500" style="border: 1px solid black" />Run Code Online (Sandbox Code Playgroud)
适用于水平和垂直的解决方案。
首先找到适合宽度或高度的最小比例尺
var scale = Math.min(canvas.width / img.width, canvas.height / img.height);
Run Code Online (Sandbox Code Playgroud)
使用该比例来获取 img 的宽度和高度
var w = img.width * scale;
var h = img.height * scale;
Run Code Online (Sandbox Code Playgroud)
然后使用该比例将左上角计算为距中心距离的一半
var left = canvas.width / 2 - w / 2;
var top = canvas.height / 2 - h / 2;
Run Code Online (Sandbox Code Playgroud)
如果你想要类似的东西,路人的解决方案可以很好地工作object-fit: contain
如果您愿意,此解决方案可以正常工作object-fit: cover
const fitImageToCanvas = (image,canvas) => {
const canvasContext = canvas.getContext("2d");
const ratio = image.width / image.height;
let newWidth = canvas.width;
let newHeight = newWidth / ratio;
if (newHeight < canvas.height) {
newHeight = canvas.height;
newWidth = newHeight * ratio;
}
const xOffset = newWidth > canvas.width ? (canvas.width - newWidth) / 2 : 0;
const yOffset =
newHeight > canvas.height ? (canvas.height - newHeight) / 2 : 0;
canvasContext.drawImage(image, xOffset, yOffset, newWidth, newHeight);
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3679 次 |
| 最近记录: |