私の目的:
- 私のブラウザで画像ファイルをアップロードするには、編集(切り抜きと回転)してダウンロード/アップロードします。
これまでに達成したこと:
- 画像を回転させることはできますが、一度だけです。
私が直面している問題:
- 公式ドキュメントに記載されているように、使用できません。
this.angularCropper.cropper.rotate(degreeInNumber);
このエラーが発生しますCannot read property 'rotate' of undefined
。 - これは、人気のある JS 画像ライブラリであるCropperJSのラッパーであるため、CropperJS の構文
this.cropper.rotate(degreeInNumber);
(rotateLeft()
関数内)を試してみましたが、機能するのは 1 回だけです。関数を 2 回目に呼び出すとrotateLeft()
、機能しません。 crossorigin
また、で言及したにもかかわらず<input>
、私は得ていますCannot read property 'checkCrossOrigin' of undefined
これが私のコードですapp.component.html
:
<input crossorigin type='file' (change)="readUrl($event)">
<img crossorigin id="img" [src]="url">
<div id="target"></div>
<div [hidden]="!(url != null)">
<angular-cropper crossorigin [cropperOptions]="cropper" [imageUrl]="url" #angularCropper></angular-cropper>
</div>
<br><br>
<button (click)="rotateLeft()">Left</button>
そして、私のapp.component.ts
:
import { Component } from '@angular/core';
import { AngularCropperjsComponent } from 'angular-cropperjs';
import { ViewChild } from '@angular/core';
import * as Cropper from 'cropperjs/dist/cropper';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})
export class AppComponent {
@ViewChild('angularCropper') public angularCropper: AngularCropperjsComponent;
title = 'app';
tilt = 0;
url: string = null;
cropper: Cropper;
rotateLeft() {
let image = document.querySelector('#img');
let canvas = document.querySelector('#canvas');
let target = document.querySelector('#target');
this.tilt -= 90;
let that = this;
this.cropper = new Cropper(image, {
minContainerWidth: 400,
minContainerHeight: 400,
minCanvasWidth: 250,
minCanvasHeight: 250,
ready: function() {
this.cropper.rotate(that.tilt); <--- This works, but only for ONCE
}
});
this.angularCropper.cropper.rotate(66); <--- This does NOT work
console.log(this.cropper)
}
// This is for showing the uploaded image to <img crossorigin id="img" [src]="url">
readUrl(event: any) {
if (event.target.files && event.target.files[0]) {
const reader = new FileReader();
reader.onload = (e: any) => {
this.url = e.target.result;
};
reader.readAsDataURL(event.target.files[0]);
}
}
}
私はこれにかなり慣れていないので、誰かが私が見逃している/間違っていることを指摘できますか?
また、トリミングされた画像を元に戻すにはどうすればよいですか?