【问题标题】:Vue.js Konva library to display a simple image, what am I missing?Vue.js Konva 库显示一个简单的图像,我错过了什么?
【发布时间】:2018-02-02 18:28:40
【问题描述】:

所以我浏览了 vue-konva 页面上列出的示例代码。尽管它对创建形状进行了采样,但我对它的理解足以尝试显示一个简单的图像来开始。这是基本代码。我的问题在于如何将实际图像文件附加到“图像”属性。或者如果我错过了其他东西。

 <template>
  <div id="app">
    <h1>Display Image via Konva</h1>
    <div>
      <v-stage ref="stage" :config="configKonva">
        <v-layer ref="layer">
          <v-image :config="configImg"></v-image>
        </v-layer>
      </v-stage>
    </div>
  </div>
</template>

<script>
  import Vue from 'vue';
  import VueKonva from 'vue-konva'
  Vue.use(VueKonva)

export default {
  data() {
    return {
      testImg: new Image(),
      configKonva: {
        width: 500,
        height: 500
      },
      configImg: {
        x: 20,
        y: 20,
        image: this.testImg,
        width: 200,
        height: 200,
      },
    }
  }
</script>

根据 Konva Docs,这是如何做到的:

var imageObj = new Image();
imageObj.onload = function() {
  var image = new Konva.Image({
    x: 200,
    y: 50,
    image: imageObj,
    width: 100,
    height: 100
  });
};
imageObj.src = '/path/to/image.jpg'

因此,我认为问题在于我如何将实际图像文件附加到图像属性。

I tried the all following:

#1
image: "/path/to/image.jpg"
#2
mounted(){
   this.testImg.src = "/path/to/image.jpg"
}
#3
data(){
  return{
    testImg: "/path/to/image.jpg"
    }
  }
}

似乎没有任何效果。我确定我缺少一个步骤。

【问题讨论】:

  • 顺便说一下,我试图显示的图像位于我的 vue.js 项目的“静态”文件夹中。如果有帮助的话。
  • 需要 Vue.js 版本 2.4+ - 你的 Vue 版本是否正确?
  • 我刚刚检查过,我正在运行 Vue.js v2.5.13

标签: vue.js konvajs


【解决方案1】:

诀窍似乎是通过将configImg 放入计算属性中来使其具有反应性,因为图像将在安装后加载。

export default {
  data() {
    return {
      testImg: new Image(100, 100),
      configKonva: {
        width: 200,
        height: 200
      }
    }
  },
  computed: {
    configImg: function() {
      return {
        x: 20,
        y: 20,
        image: this.testImg,
        width: 200,
        height: 200,
      }
    }
  },
  mounted() {
    this.testImg.src = "https://konvajs.github.io/assets/lion.png"
  }
}   

【讨论】:

  • 这就像一个魅力!我认为这与将图像附加到 Konva 图像的“图像”属性有关,我只是不明白如何正确实施该过程。谢谢!
  • 这很好用,但是如果我将路径更改为资产../assets/image.png 中的图像文件,它就找不到它。在 &lt;img&gt; 标签中加载图像时,我必须执行 require(path/to/img 但这在这里也不起作用。
  • 您是否尝试过将图像放入“静态”文件夹并从那里读取它们?我从那里读取文件没有问题。
  • 是的——这就是诀窍。如果您尝试在 标记中设置属性,它们似乎不是反应性的,但如果您使用 :config 和计算属性,它们就是。
  • 对不起,但这对我不起作用,this.testImg.src 分配需要在created() 中显示,而不在回调中使用draw()
【解决方案2】:
  mounted() {
    this.testImg.onload = () => this.$refs.layerImg.getStage().draw()
    this.testImg.src = "https://konvajs.github.io/assets/lion.png"
  }

【讨论】:

  • 代码总是好的,但它也有助于围绕如何解决原始问题添加一些 cmets/context。
  • 我不会说英语
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多