画布 - 如何为画布内的图像设置 css

Posted

技术标签:

【中文标题】画布 - 如何为画布内的图像设置 css【英文标题】:canvas - how to set css for image inside canvas 【发布时间】:2021-06-12 02:34:20 【问题描述】:

团队,

我有画布,可以上传多张图片,但我的 css 只反映在主画布上

但我正在尝试画布内的图像。

这是我的html代码

<div class="col-lg-8 col-md-6">
<div class="canvas-container" (drop)="handleDropOnCanvas($event)" (dragover)="handleDragOverCanvas($event)">
  <canvas id="canvas"></canvas>
</div>

文件上传html代码

    <div class="panel panel-default panel-upload">
  <div class="panel-heading">Upload Picture</div>
  <div class="panel-body text-center">
    <img id="testImage"  (dragover)="false"(dragend)="false"
    (drop)="handleDrop($event)" class="images-item-upload" *ngFor='let url of urls' [src]="url?.url"  (click)="addImageOnCanvas(url.url);"/>
    <label class="btn btn-default btn-block file-container">
      <i class="fa fa-fw fa-upload"></i> Choose a file
      <input type='file' [disabled]="urls.length >= 16"  multiple (change)="readUrl($event);">
    </label>

  </div>
</div>

有了这个 html 代码,我可以在一个画布上看到图像

ts 代码

    readUrl(event): void 
    let files = event.target.files;
    if (files) 
        for (let file of files) 
            let reader = new FileReader();
            reader.onload = (e: any) => 
                this.urls.push(
                    url: e.target.result,
                    isClicked: false
                );
            ;
            reader.readAsDataURL(file);
        
    


使用我当前的代码,如果我应用 css,我不知道如何为图像设置 css,它应用的是画布而不是图像。

【问题讨论】:

【参考方案1】:

CSS 不能应用于在画布上绘制的图像,因为 CSS 仅适用于 DOM 中存在的对象。 canvas 的目的是提供一个高效的系统来绘制和操作像素,而无需考虑 DOM 空间中的对象。

使用 FabricJS 的好处是,您可以像处理 DOM 对象一样处理画布中的对象(没有像 FabricJS 这样的框架,画布只是一块空白,不知道那里绘制了什么) .

要将样式自定义添加到 FabricJS 对象,您需要使用可用的 FabricJS 图像属性。有关所有属性,请参阅 http://fabricjs.com/docs/fabric.Image.html。

【讨论】:

以上是关于画布 - 如何为画布内的图像设置 css的主要内容,如果未能解决你的问题,请参考以下文章

Tkinter:如何为画布矩形的轮廓着色?

画布中路径的动画填充颜色

如何在画布内的文本周围绘制矩形

如何为点击处理程序获取 HTML-5 画布的 event.target/event.currentTarget

如何使用 CSS 过滤器从画布中保存图像

如何为 emscripten 制作无边框的 HTML 画布