在我的角10项目中,我使用ngx-image-cropper来裁剪图像。裁剪后,图像ngx-图像裁剪器给我们base64字符串值。但是我想将这个base64值转换为文件,并在另一个图像预览器中显示这个文件。稍后,我希望将转换后的图像上传到服务器,而不是将base64保存到数据库中。要将base64转换为图像文件,我使用了以下代码:
convertBase64ToFile(data, filename) {
const arr = data.split(',');
const mime = arr[0].match(/:(.*?);/)[1];
const bstr = atob(arr[1]);
let n = bstr.length;
let u8arr = new Uint8Array(n);
while (n--) {
u8arr[n] = bstr.charCodeAt(n);
}
return new File([u8arr], filename, { type: mime });
}现在,在imageCropped事件中,我尝试将转换后的图像文件设置为图像预览器。守则是:
imageCropped(event: ImageCroppedEvent) {
this.croppedImage = event.base64;
this.fileToReturn = this.convertBase64ToFile(event.base64, this.imageChangedEvent.target.files[0].name)
console.log(this.fileToReturn);
var reader = new FileReader();
reader.onload = (event: any) => {
this.croppedImage = this.fileToReturn;
};
reader.onerror = (event: any) => {
console.log("File could not be read: " + event.target.error.code);
};
reader.readAsDataURL(this.fileToReturn);
return this.fileToReturn;
}如果我将这个变量fileToReturn值打印到控制台,就会得到以下对象:

HTML:
<div id="preview" class="text-center col-md-4">
<h5>Preview</h5>
<img [src]="croppedImage" />
</div>但问题是形象并没有显现出来。相反,我在控制台中得到以下消息:
GET http://localhost:4200/[object%20File] 404 (未找到)
现在有谁能建议我
如何将转换后的文件显示给previewer
我的完整代码是:
<div class="container">
<div class="row" style="margin-top: 5%;">
<div class="text-center col-md-12">
<input type="file" (change)="fileChangeEvent($event)" />
</div>
</div>
<div class="row" style="margin-top: 5%;">
<div class="text-center col-md-8">
<h5>Crop Image</h5>
<image-cropper
[imageChangedEvent]="imageChangedEvent"
[maintainAspectRatio]="true"
[aspectRatio]="4 / 4"
[resizeToWidth]="256"
format="png"
(imageCropped)="imageCropped($event)"
(imageLoaded)="imageLoaded()"
(cropperReady)="cropperReady()"
(loadImageFailed)="loadImageFailed()">
</image-cropper>
</div>
<div id="preview" class="text-center col-md-4">
<h5>Preview</h5>
<img [src]="croppedImage" />
</div>
</div>
</div>TS文件:
import { Component, OnInit } from '@angular/core';
import { ImageCroppedEvent } from 'ngx-image-cropper';
@Component({
selector: 'app-image-cropper1',
templateUrl: './image-cropper1.component.html',
styleUrls: ['./image-cropper1.component.css']
})
export class ImageCropper1Component implements OnInit {
constructor() { }
ngOnInit(): void {
}
imageChangedEvent: any = '';
croppedImage: any = '';
fileToReturn: any;
fileChangeEvent(event: any): void {
this.imageChangedEvent = event;
//console.log(event);
}
imageCropped(event: ImageCroppedEvent) {
this.croppedImage = event.base64;
this.fileToReturn = this.convertBase64ToFile(event.base64, this.imageChangedEvent.target.files[0].name)
//console.log(this.imageChangedEvent.target.files[0]);
console.log(this.fileToReturn);
var reader = new FileReader();
reader.onload = (event: any) => {
this.croppedImage = this.fileToReturn;
};
reader.onerror = (event: any) => {
console.log("File could not be read: " + event.target.error.code);
};
reader.readAsDataURL(this.fileToReturn);
return this.fileToReturn;
}
imageLoaded() {
// show cropper
}
cropperReady() {
// cropper ready
}
loadImageFailed() {
// show message
}
convertBase64ToFile(data, filename) {
const arr = data.split(',');
const mime = arr[0].match(/:(.*?);/)[1];
const bstr = atob(arr[1]);
let n = bstr.length;
let u8arr = new Uint8Array(n);
while (n--) {
u8arr[n] = bstr.charCodeAt(n);
}
return new File([u8arr], filename, { type: mime });
}
}发布于 2021-03-12 12:03:53
若要将已裁剪的图像转换为文件而不是base64字符串ngx-image-cropper有base64ToFile方法
imageCropped(event: ImageCroppedEvent) {
this.croppedImage = event.base64;
let File = base64ToFile(this.croppedImage);
}https://stackoverflow.com/questions/66588473
复制相似问题