gpt4 book ai didi

javascript - 如何在 ngx-image-cropper 上加载图像而不调用 imageChangedEvent 事件?

转载 作者:行者123 更新时间:2023-12-01 08:32:12 28 4
gpt4 key购买 nike

我开发了一个基于 ngx-image-cropper 的裁剪器,它允许裁剪/旋转一些图像。对于冲刺的演示,我希望在应用程序启动时显示图像,所以我需要在 ngx-image-cropper 上启动图像而不调用 fileChangeEvent() 事件。

这是实际结果,效果很好。

我单击其中一个链接(照片 - 签名 - ...),文件 uploader 将打开以选择要裁剪的照片。

enter image description here

这就是我想要的:

在开始访问页面时,从我的磁盘加载文件,而无需单击链接。

enter image description here

PS:我正在使用 Angular 8

这里是裁剪器的代码:

       <mat-card-content style="padding:3% 5%; text-align: center; ">
<image-cropper [ngClass]=" loaded && showCropper && !cropped ? 'showCropper' : 'hideCropper' "
[imageChangedEvent]="imageChangedEvent"
[maintainAspectRatio]="false"
[containWithinAspectRatio]="containWithinAspectRatio"
[aspectRatio]="5 / 3"
[cropperMinWidth]="128"
[onlyScaleDown]="true"
[roundCropper]="false"
[canvasRotation]="canvasRotation"
[transform]="transform"
[alignImage]="'center'"
[style.display]="showCropper ? null : 'none'"
format="png"
(imageCropped)="imageCropped($event)"
(imageLoaded)="imageLoaded()"
(cropperReady)="cropperReady($event)"
(loadImageFailed)="loadImageFailed()"
>
</image-cropper>
<img
*ngIf="loaded && !showCropper && cropped"
class="document-photo"
[src]="croppedImage"
/>
<div *ngIf="!loaded" class="divNone"></div>
<div class="icon-image">
<mat-icon (click)="rotateLeft()">rotate_left</mat-icon>
<mat-icon (click)="rotateRight()">rotate_right</mat-icon>
<mat-icon (click)="activateCrop()">crop</mat-icon>
<mat-icon (click)="clearImage()">clear</mat-icon>
<mat-icon (click)="validate()">check</mat-icon>
<mat-icon>note_add</mat-icon>
</div>
</mat-card-content>
<小时/>
        <mat-list-item class="item-doc text-blue-in">
<mat-icon class="icon-info" matTooltipPosition="above" matTooltip="Info about the photo">info</mat-icon>
<mat-icon *ngIf="!photo" class="text-grey-in">check_box_outline_blank</mat-icon>
<mat-icon *ngIf="photo" class="text-grey-in">check_box</mat-icon>
<input style="visibility: hidden; display: none;" #linkPhoto type="file" (change)="fileChangeEvent($event, 'photo')"/>
<mat-label class="doc-title text-grey-in" (click)="onLoadPhoto()" >Photo</mat-label>
<mat-icon *ngIf="photoSent" class="icon-edit" (click)="editPhoto()">edit</mat-icon >
</mat-list-item>
<小时/>

所以问题是:如何在 ngx-image-cropper 中从磁盘加载图像而不调用 fileChangedEvent ?

最佳答案

1) 如果您不想使用 uploader /打开窗口(从输入文件)选择图像并从项目目录加载图像(例如 Assets /图像)或将其作为字符串输入 (base64),您必须添加一个输入:

[imageBase64] = "imageBase64String"

其中 imageBase64String 不是 (../../assets/image.jpg)

但是base64的值(date:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQA.....)

2)作者写道:

"All inputs are optional. Either the imageChangedEvent, imageBase64 or imageFile should be set to load an image into the cropper."

还有

输入imageBase64(字符串):

"If you don't want to use a file input, you can set a base64 image directly and it will be loaded into the cropper"

3) 为了不在控制台中出现错误:

"ERROR Error: Uncaught (in promise): Event: {" isTrusted ": true}"

最好的补充是 ngIf (所有可能看起来像这样):

<image-cropper
*ngIf="imageBase64String"
[imageChangedEvent]="imageChangedEvent"
[imageBase64]="imageBase64String"
...
></image-cropper>

4)如何添加base64?

您可以创建一个函数,例如getBase64FromFile(img) {...} 并使用 XMLHttpRequest() + FileReader()并将结果分配给this.imageBase64String = (base64 as any).result

当 ngx-image-cropper 加载时,例如

ngAfterViewInit (): void {
  this.getBase64FromFile('../../assets/image.jpg');
}

看,这里很有趣 http://www.programmersought.com/article/52582038406/

关于javascript - 如何在 ngx-image-cropper 上加载图像而不调用 imageChangedEvent 事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60148555/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com