我使用ng-file-upload预览和上传图片。在我上传图片之前,我想让用户裁剪图片。我尝试使用ng-img-crop,但是它没有我想要的功能(宽高比自定义),但是cropper做了(https://github.com/fengyuanchen/cropper/)。我现在唯一的问题是如何使用裁剪器裁剪图像的预览。图像src最终是一个blob,即" blob:XYZ"。有没有人以这种方式成功使用过cropper?有可能吗?
答案 0 :(得分:0)
select = Select(driver.find_element_by_id('lbSources'))
# select by visible text
select.select_by_visible_text('UK_P')
# select by value
select.select_by_value('1')
中获得的blob附加到状态中,来保存它。this.cropper.getCroppedCanvas().toBlob()
,将其保存到File
函数内的save()
构造函数中fileBits
multer
import { AfterViewInit, Component, ElementRef, Input, OnDestroy, OnInit, ViewChild } from '@angular/core';
import { default as Cropper } from 'cropperjs';
import { FileItem, FileUploader } from 'ng2-file-upload';
import { UserService } from '../services/user.service';
import { User } from '../models/core';
@Component({
selector: 'app-image-cropper',
templateUrl: './image-cropper.component.html',
styleUrls: ['./image-cropper.component.scss']
})
export class ImageCropperComponent implements OnInit, AfterViewInit, OnDestroy {
@ViewChild('imageElement', {static: false})
public imageElement: ElementRef;
@Input()
public imageSource: string;
public imageBlob: Blob;
public uploader: FileUploader;
private cropper: Cropper;
public constructor(private userService: UserService) {}
public ngAfterViewInit() {
this.cropper = new Cropper(this.imageElement.nativeElement, {
zoomable: false,
scalable: false,
responsive: true,
autoCropArea: 1,
aspectRatio: 1,
viewMode: 1,
crop: (event) => {
this.cropper.getCroppedCanvas().toBlob((blob) => {
this.imageBlob = blob;
console.log('Crop saved as a Blob');
});
}
});
}
public save() {
const date: number = new Date().getTime();
// Put the blob into the fileBits array of the File constructor
const file = new File([this.imageBlob], 'photo', {type: 'image/png', lastModified: date});
const fileItem = new FileItem(this.uploader, file, {});
this.uploader.queue.push(fileItem);
fileItem.upload();
}
ngOnInit() {
this.userService.user$.subscribe((user: User) => {
this.uploader = new FileUploader({url: '/api/profile/' + user.username + '/avatar', itemAlias: 'photo'});
this.uploader.onAfterAddingFile = (file) => {
file.withCredentials = false;
};
this.uploader.onCompleteItem = (item: any, response: any, status: any, headers: any) => {
console.log(response);
};
});
}
ngOnDestroy(): void {
this.imageBlob = undefined;
this.imageSource = '';
}
}
<div class="modal-content">
<div class="modal-header">
<p class="modal-title font-weight-bold" id="crop-modal-title"><i></i>Crop</p>
<button type="button" class="close" data-dismiss="modal"
(click)="activeModal.close('Close click')">
<span aria-hidden="true">×</span>
</button>
</div>
<div class="modal-body">
<div class="img-container">
<img #imageElement [src]="imageSource" crossorigin>
</div>
<button type="button" class="button button-primary"
(click)="save()">
</button>
</div>
</div>