首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在node-canvas中水平旋转图像?

在node-canvas中水平旋转图像?
EN

Stack Overflow用户
提问于 2020-07-21 23:11:47
回答 1查看 515关注 0票数 1

我需要用node-canvas做这样的事情的帮助。只是将图像翻转成另一种方式。

EN

回答 1

Stack Overflow用户

发布于 2020-07-21 23:42:23

您可以通过将图像平移到最右侧,然后沿x轴从右向左缩放来反转图像。

代码语言:javascript
复制
const drawImage = (ctx, image) => {
  let { width, height } = image
  Object.assign(ctx.canvas, { width, height })
  ctx.save()
  ctx.translate(width, 0);
  ctx.scale(-1, 1);
  ctx.drawImage(image, 0, 0)
  ctx.restore()
}

演示

代码语言:javascript
复制
const getContext = (selector) =>
  document.querySelector(selector).getContext('2d')

/* Derived from: https://stackoverflow.com/a/52060802/1762224 */
const loadImage = (url) => {
  return new Promise(resolve => {
    const image = new Image()
    image.addEventListener('load', () => resolve(image))
    image.src = url
  })
}

const drawImage = (ctx, image, flipX, flipY) => {
  let { width, height } = image
  Object.assign(ctx.canvas, { width, height })
  ctx.save()
  if (flipX || flipY) {
    ctx.translate(flipX ? width : 0, flipY ? height : 0)
    ctx.scale(flipX ? -1 : 1, flipY ? -1 : 1)
  }
  ctx.drawImage(image, 0, 0)
  ctx.restore()
}

loadImage('https://i.stack.imgur.com/wF6Vr.png')
  .then(image => {
    drawImage(getContext('.original'), image)
    drawImage(getContext('.flipped-x'), image, true)
    drawImage(getContext('.flipped-y'), image, false, true)
    drawImage(getContext('.flipped-both'), image, true, true)
  })
代码语言:javascript
复制
.in-line {
  display: inline-block;
  width: 20%;
}
代码语言:javascript
复制
<canvas class="in-line original"></canvas>
<canvas class="in-line flipped-x"></canvas>
<canvas class="in-line flipped-y"></canvas>
<canvas class="in-line flipped-both"></canvas>

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63017607

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档