|
|
@@ -0,0 +1,68 @@
|
|
|
+import { fabric } from 'fabric';
|
|
|
+import cameraActiveImg from '@/assets/camera/camera-active.png';
|
|
|
+import cameraImg from '@/assets/camera/camera.png';
|
|
|
+import favoritesImg from '@/assets/camera/favorites.png';
|
|
|
+import { CameraImage } from './types';
|
|
|
+
|
|
|
+const cameraImageName = 'cameraImage';
|
|
|
+const favImageName = 'favImageImage';
|
|
|
+
|
|
|
+const cameraInfo = { width: 60, height: 40 };
|
|
|
+const favInfo = { width: 10, height: 10 };
|
|
|
+
|
|
|
+export function createGroup(): Promise<fabric.Group> {
|
|
|
+ return new Promise((resolve) => {
|
|
|
+ fabric.Image.fromURL(cameraActiveImg, (cImg) => {
|
|
|
+ cImg.set({
|
|
|
+ left: 0,
|
|
|
+ top: 0,
|
|
|
+ width: cameraInfo.width,
|
|
|
+ height: cameraInfo.height,
|
|
|
+ imageName: cameraImageName,
|
|
|
+ });
|
|
|
+ console.log('cameraActiveImg', cImg);
|
|
|
+
|
|
|
+ fabric.Image.fromURL(favoritesImg, (favImg) => {
|
|
|
+ favImg.set({
|
|
|
+ width: favInfo.width,
|
|
|
+ height: favInfo.height,
|
|
|
+ left: 40,
|
|
|
+ top: -10,
|
|
|
+ visible: false,
|
|
|
+ imageName: favImageName,
|
|
|
+ });
|
|
|
+ resolve(
|
|
|
+ new fabric.Group([cImg, favImg], {
|
|
|
+ width: cameraInfo.width,
|
|
|
+ height: cameraInfo.height,
|
|
|
+ // 不要缓存,否则无法修改图片地址
|
|
|
+ objectCaching: false,
|
|
|
+ }),
|
|
|
+ );
|
|
|
+ });
|
|
|
+ });
|
|
|
+ });
|
|
|
+}
|
|
|
+
|
|
|
+/** 设置是否是选中后的效果 */
|
|
|
+export function toggleGroupSelected(group: fabric.Group, isSelected: boolean) {
|
|
|
+ return new Promise((resolve, reject) => {
|
|
|
+ const groupCamera = group.getObjects()[0] as fabric.Image;
|
|
|
+ // .find((item) => item.imageName === cameraImageName) as fabric.Image;
|
|
|
+ if (!groupCamera) {
|
|
|
+ reject();
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ const src = isSelected ? cameraActiveImg : cameraImg;
|
|
|
+ groupCamera.setSrc(src, () => {
|
|
|
+ resolve();
|
|
|
+ });
|
|
|
+ });
|
|
|
+}
|
|
|
+
|
|
|
+/** 设置是否为默认摄像头 */
|
|
|
+export function toggleCameraDefault(group: fabric.Group, visible: boolean) {
|
|
|
+ const star = group.getObjects()[1];
|
|
|
+ if (!star) return;
|
|
|
+ star.set({ visible });
|
|
|
+}
|