vue-picture-cut 2.x
vueとtypescriptをベースにしたイメージ切り抜き処理ツールの開発
利点:ネイティブ、軽量、使いやすい、フル機能、拡張可能
現在の機能:ズーム、折りたたみ、回転、エッジチェック、矩形切り抜き、任意円切り抜き
ズームについて:マウス、タッチスクリーン
使い方
npm経由でプラグインをインストール
npm install vue-picture-cut
vueで使う
1、main.jsのグローバル・リファレンスで
import Vue from 'vue';
import 'vue-picture-cut/lib/vue-picture-cut.css';
import VuePictureCut from 'vue-picture-cut';
Vue.use(VuePictureCut);
2、または.vueファイル内で個別に参照
<template>
<div>
<input type="file" accept="image/*" @change="inputChange"/>
<vue-picture-cut :src="src" @on-change="cutChange"/>
</div>
</template>
<script>
import { VuePictureCut } from 'vue-picture-cut';
export default {
// ...
components: {
VuePictureCut
},
data () {
return {
src: null,
blob: null,
base64: null
}
},
methods: {
inputChange(e) {
const file = e.target.files[0];
this.src = URL.createObjectURL(file);
},
/**
* @param blob BLOB
* @param base64 base64
*/
cutChange({ blob, base64 }) {
this.blob = blob;
this.base64 = base64;
}
}
// ...
}
</script>
<style>
@import "~vue-picture-cut/lib/vue-picture-cut.css";
</style>
3.注意
コンポーネントが使用されているとき、幅と高さは親ラベルに従いますので、親ラベルの幅と高さを設定する必要があります。
API
露出オブジェクト
グローバル・イントロダクション
import VuePictureCut from 'vue-picture-cut';
Vue.use(VuePictureCut);
独立参照
import {
VuePictureCut,
VuePictureCutMask,
VuePictureCutMenu,
Bezier,
createAnimation,
Tool,
createUtils
} from 'vue-picture-cut';
コンポーネント:VuePictureCut、VuePictureCutMask、VuePictureCutMenu。 ツール:Bezier、createAnimation、Tool、createUtils。
VuePictureCutコンポーネント
スロットスロット: デフォルト、メニュー
ご利用ください:
<template>
<vue-picture-cut
ref="pictureCut"
:src="src"
:magnification="magnification"
:init-angle="initAngle"
:msk-option="mskOption"
:max-pixel="maxPixel"
:encoder-options="encoderOptions"
:format="format"
:rotate-control="rotateControl"
:menu-position="menuPosition"
:menu-thickness="menuThickness"
:background-color="backgroundColor"
@on-change="onChange"
/>
</template>
属性:
- src:
タイプ: string
デフォルト:null
説明:イメージへのリンク - 倍率
タイプ: 数字
デフォルト:1.5
説明:キャンバスの描画倍率、値は0より大きく、値が大きいほど論理ピクセルが高く描画されます。 - initAngle:
タイプ: 数
必須: 不要
説明: 読み込まれたイメージの初期回転角度 - maxPixel:
タイプ: 数
必須:不要
説明: エクスポートされたイメージのハイサイドとワイドサイドの長い方のピクセル、送信されない場合、イメージの実際のサイズに応じて適応されます。 - エンコーダオプション
タイプ: 数
必須: 不要
説明: エクスポートイメージの圧縮率、転送されない時は0.8で計算されます、値の範囲は0~1です。 - フォーマットで指定します:
タイプ: string
デフォルト:false
説明:書き出されるイメージのフォーマット。フォーマットは "image/jpeg"、値は "image/png "又はブラウザがサポートする他のフォーマット。 - rotateControl:
タイプ: boolean
デフォルト:false
説明: 回転コントロールを表示するか否か。 - メニューの厚さ
タイプ: 数
必須: 不要
説明: menuPosition が top または bottom の場合のメニューバーの高さ、menuPosition が left または right の場合のメニューバーの幅、値が 0 より大きく 0 に等しい場合はメニューバーを非表示。 - backgroundColor:
タイプ: string
必須:不要
説明: コンポーネントの背景色。
イベント
{ width: 1, height: 1, isRound: false, resize: true}書き出されたイメージの最終的な切り抜きイベントをリスンします。
blob: エクスポートされたイメージのblobオブジェクト。
base64: エクスポートされたイメージのbase64文字列。
方法:
onChange ({ blob, base64 })ズームイメージ
パラメータ zoom: ズームされたサイズと現在のサイズの比率、0より大きい値を取り、0と1の間でズームアウト、1より大きい値でズームイン。
VuePictureCutMask コンポーネント
VuePictureCutMaskはVuePictureCutのデフォルトのスロットコンポーネントで、マスクのクロップボックスの制御に関連するコンポーネントです。
ご利用ください:
<template>
<vue-picture-cut
:src="src"
:magnification="magnification"
:init-angle="initAngle"
:rotate-control="rotateControl"
:max-pixel="maxPixel"
:encoder-options="encoderOptions"
:format="format"
:background-color="backgroundColor"
@on-change="onChange"
>
<vue-picture-mask
:width="width"
:height="height"
:is-round="isRound"
:resize="resize"
:color="color"
:border-color="borderColor"
/>
</vue-picture-cut>
</template>
属性:
- 幅
タイプ: number
デフォルト: 1
説明:クロップボックスのプロポーショナル幅。 - 高さ
タイプ: number
デフォルト: 1
説明: クロップフレームのスケールの高さ - isRound:
タイプ: boolean
デフォルト: false
説明: 矩形は真、楕円は偽 - リサイズ
タイプ: boolean
デフォルト:false
説明: サイズをドラッグしてクロップボックスのサイズを変更できるかどうか。 - 色
タイプ: 文字列
必須:不要
説明: マスクの色 - borderColor:
タイプ: string
必須:不要
説明:切り取り枠の色
VuePictureCutMenu コンポーネント
メニューバーコンポーネント、効果についてはデモをご覧ください。
ご利用ください:
/demo/demo4.html
/デモ5.html
<template>
<vue-picture-cut
:src="src"
:magnification="magnification"
:init-angle="initAngle"
:rotate-control="rotateControl"
:msk-option="mskOption"
@on-change="cutChange"
>
<vue-picture-menu
slot="menu"
:cancel="false"
:max-pixel="maxPixel"
:encoder-options="encoderOptions"
:format="format"
:theme="theme"
confirm-name="Ok"
cancel-name="Cancel"
size-auto-name="auto"
size-raw-name="raw"
menu-rotate-name="Rotate"
@on-change="onChange"
@on-cancel="onCancel"
/>
</vue-picture-cut>
</template>
属性:
- キャンセル
タイプ: boolean
デフォルト:false
説明: キャンセルボタンを表示するかどうか。 - maxPixel:
タイプ: 数
必須:不要
説明: エクスポートされたイメージのハイサイドとワイドサイドの長い方のピクセル、送信されない場合、イメージの実際のサイズに応じて適応されます。 - エンコーダオプション
タイプ: 数
必須: 不要
説明: エクスポートイメージの圧縮率、転送されない時は0.8で計算されます、値の範囲は0~1です。 - フォーマットで指定します:
タイプ: string
デフォルト:false
説明:書き出されるイメージのフォーマット。フォーマットは "image/jpeg"、値は "image/png "又はブラウザがサポートする他のフォーマット。 - テーマ
タイプ: 文字列
default: 'default'
説明: メニューバーのテーマ。値: 'default', 'dark', 'grey' - confirmName:
タイプ: string
デフォルト:'OK'
説明: 確認ボタンのテキスト - cancelName:
タイプ: string
デフォルト:'cancel'
説明: キャンセルボタンのテキスト - sizeAutoName:
タイプ: string
デフォルト: 'auto'
説明: メニューバーボタンのテキスト - sizeRawName:
型: string
デフォルト:'raw'
説明: メニューバーボタンのテキスト - menuRotateName:
タイプ: string
デフォルト: 'Rotate'
説明: メニューバーボタンのテキスト - ルート
タイプ:オブジェクト
Must: スロットを介して外部で使用しない場合は必ず渡さなければなりません。
説明: VuePictureCutインスタンスの値を取ります。
イベント
onChange ({ blob, base64 }): エクスポートされたイメージの最終的なトリミング、つまり確認ボタンをクリックするイベントをリスンします。
blob: エクスポートされたイメージのblobオブジェクト。
base64: エクスポートされたイメージのbase64文字列。onCancel():キャンセル・ボタンのクリックをリッスンします。
ベジェオブジェクト
import { Bezier } from 'vue-picture-cut';
const bezier = Bezier();
bezier.setOpt(Bezier.BEZIER['ease-in-out']);
const y = bezier.getPoint(0.5);
console.log(y);
静的属性のBEZIERは、いくつかのプリセット値を含むキーと値のペアです。
| リニア | [0.0, 0.0, 1.0, 1.0] | 線形遷移 |
| ease | [0.25, 0.1, 0.25, 1.0] | スムーズな移行 |
| ease-in | [0.42, 0, 1.0, 1.0] | ゆっくりから速く |
| setOpt | [0, 0, 0.58, 1.0] | 速いから遅いへ |
| ease-in-out | [0.42, 0, 0.58, 1.0] | スロー→ファスト→スロー。 |
コンストラクタ
setOptByString('ease')パラメータなしのコンストラクタ。
メソッド
| setOpt | ベジェ曲線タイプの設定 | ベジェオブジェクトそのもの | |
| setOptByString | ベジェ曲線タイプの設定 | BEZIER | ベジェオブジェクトそのもの |
| setOptByArr | ベジェ曲線タイプの設定 | ベジェオブジェクトそのもの | |
| ゲットポイント | getPoint | 0から1の間 | 0~1 |
パラメータ ParamsInterface 説明
ParamsInterface は、4 つの数値型を含む配列です。
createAnimation メソッド
import { createAnimation } from 'vue-picture-cut';
const animation = createAnimation(option);
createAnimation は Animation オブジェクトを返します。
パラメータオプション
| 対応y座標,0~1 | アニメーション時間(ミリ秒 | -- | -- | false | 0010 |
| delay | アニメーションの遅延時間(ミリ秒単位 | number | -- | false | 0 |
| direction | アニメーションがループの中で逆方向に動くかどうか | 列 | normal(デフォルト、順方向)、reverse(逆方向)、alternate(順方向、次に逆方向、交互)、alternate-reverse(逆方向、次に順方向、交互)。 | false | normal |
| change | 0から1の間のパラメータxを受け取るコールバック関数。 | Function | -- | false | -- |
| false | アニメーションの最後に実行されるコールバック関数。 | delay | -- | false | -- |
Animationオブジェクトメソッド
| false | アニメーション開始 | -- | アニメーションオブジェクト |
| -- | ストップアニメーション | -- | -- |
ツールオブジェクト
import { Tool } from 'vue-picture-cut';
Tool.loadImg('http://..xxx/.jpg')
.then(image => {
// イメージの読み込みに成功
// imageイメージオブジェクト用
}, () => {
// イメージの読み込みに失敗した
});
メソッドが含まれています
loadImg (src: string): Promise<HTMLImageElement>
説明: イメージの読み込み
引数 src: イメージへのリンク
リターンプロミス: 省略rotatePoint(x: number, y: number, angle: number): Point
説明:原点を中心に角度度回転した後の新しい点の座標を計算します。
パラメータ x: 点の x 座標
パラメータ y: 点の y 座標
パラメータ angle: 回転角度
return Point: {x: 数, y: 数} 新しい点。clipBy (img: HTMLImageElement, width: number, height: number, showRect: RectFull, encoderOptions = 0.8, format = 'image/jpeg', pathDone?: PathDone): string
説明:座標に応じてイメージを切り出します。
パラメータ img: イメージオブジェクト
パラメータ width: エクスポートされるイメージの幅
パラメータ height: 書き出されるイメージの高さ
パラメータ showRect: RectFullオブジェクト
パラメータ encoderOptions: 圧縮率
parameter format: エクスポートイメージのフォーマット 'image/jpeg', 'image/png', etc.
パラメータ pathDone: カスタムパスメソッド PathDone
戻り値 String: base64clipByRound (img: HTMLImageElement, width: number, height: number, showRect: RectFull, encoderOptions = 0.8, format = 'image/jpeg'): string
説明: base64 を blob オブジェクトに変換します。
パラメータ base64: 省略
パラメータ format: base64 のフォーマット
return Blob | null: Blob オブジェクトまたは null を返します。clipByMax (img: HTMLImageElement, max = 2000, encoderOptions = 1): ClipResult | void
説明:正方形矩形の内側の楕円を角度度だけ回転させ、その外側の正方形矩形を計算します。
パラメータ w: 正方形の初期幅
パラメータ h: 正方形の初期高さ
パラメータ angle: 反時計回りの回転角度
return Rect: Rect オブジェクトを返します。base64ToBlob (base64: string, format = 'image/jpeg'): Blob | null
説明:正方形の矩形を角度度単位で回転させ、その外側の正方形の矩形を計算します。
パラメータ w: 正方形の初期幅
パラメータ h: 初期正方形長方形の高さ
パラメータ angle: 反時計回りの回転角度
return Rect: Rect オブジェクトを返します。
CreateUtils メソッド
<template>
<div>
<input type="file" accept="image/*" @change="inputChange"/>
<vue-picture-cut ref="pictureCut" :src="src"/>
<button @click="doCut"> </button>
</div>
</template>
<script>
import { VuePictureCut, createUtils } from 'vue-picture-cut';
export default {
// ...
components: {
VuePictureCut
},
data () {
return {
utils: null,
src: null,
blob: null,
base64: null
}
},
mounted() {
this.utils = createUtils(this.$refs['pictureCut']);
},
methods: {
inputChange(e) {
const file = e.target.files[0];
this.src = URL.createObjectURL(file);
},
doCut() {
const res = this.utils.cut();
if (res) {
this.blob = res.file; // BLOB
this.base64 = res.src; // base64
}
}
}
// ...
}
</script>
<style>
@import "~vue-picture-cut/lib/vue-picture-cut.css";
</style>
メソッドが含まれています
cut(maxPixel?: number, encoderOptions?: number, format?: string): ClipResult | null
説明:クロップ
パラメータ maxPixel: エクスポートされたイメージの長い方のピクセル、送信されない場合、イメージの実際のサイズに応じて適応されます。
パラメータ encoderOptions: 圧縮率。
パラメータ format: 'image/jpeg'、'image/png'など、書き出されるイメージのフォーマット。
return ClipResult | null: 省略。cut(opt?: { maxPixel?: number, encoderOptions?: number, format?: string }): ClipResult | null
説明: 切り抜き
parameter opt.maxPixel: the pixel of the longer side of the width of the exported image, or the pixel of the longer side of the exported image, or the pixel of the longer side of the exported image, or the pixel of thelongerside of the exported image if it is not transmitted.
パラメータ opt.encoderOptions: 圧縮率。
パラメータ opt.format: 'image/jpeg'、'image/png'などのエクスポートイメージのフォーマット。
戻り値 ClipResult | null: 省略setMaskRound(isRound = true): void
説明:クロップボックスの形状を設定します。
引数 isRound: true , false.setMaskSize(w: number, h: number): void
説明:クリッピングボックスのサイズを設定します。
パラメータw:スケール幅
パラメータh:スケールの高さsetMaskSizeToOriginal (): void
説明:イメージの幅と高さの比率に応じて、トリミングボックスのサイズを設定します。setMaskResize (resize = true): void
説明:ボックスをドラッグしてサイズを変更できるかどうかを設定します。
パラメータ resize:省略rotate (angle: number, animation = false): number | void
説明:写真回転
パラメータ角度:反時計回りの角度
パラメータ animation: アニメーションが実行されるかどうか
return number | null: 回転したイメージの反時計回りの角度。rotateTo (angle: number, animation = false): void
説明: 指定した角度でイメージを回転します。
パラメータ angle: 反時計回りの角度
パラメータ animation: アニメーションを行うかどうかsetFlipV(animation?: boolean): boolean | void
説明:イメージを垂直方向に反転します。
引数 animation: アニメーションが実行されるかどうか。
return boolean | null: 元のイメージと比較してイメージが反転するかどうか、true または false。setFlipH(animation?: boolean): boolean | void
説明:イメージを水平に反転します。
引数 animation: アニメーションを行うかどうか。
return boolean | null: 元のイメージと比較してイメージが反転するかどうか、true または false。setFlip (sV: boolean, sH: boolean, animation?: boolean): void
説明:イメージを反転
パラメータ sV: 垂直, true , false.
パラメータ sH: 水平, true, false.
パラメータ animation: アニメーションかどうかscale(zoom: number): void
説明:写真ズーム
パラメータズーム:ズーム倍率リセット(): void
説明: イメージの状態をリセットreset(): void
説明: コンポーネント内の現在の状態を取得するパラメータです。
戻り値: CutOptions | null: 省略。
内部オブジェクトの説明
カスタム拡張機能
カスタム切り抜き
カスタムメニューバー
Ⅲ、皆さんに使っていただけると嬉しいです。
VuePictureCut あなた!



