图片

门锁的相册列表、告警列表、日志列表中会有需要展示图片的能力,由于安全考虑,涂鸦提供的数据是经过加密处理的,在展示图片时,需要进行解密处理。

安装依赖

请在开发者开发工具(IDE)中加入 IPCKit,且版本要求: 6.4.5以上

解密并下载图片

需要使用 API downloadEncryptionImage 对图片进行解密,并下载到 App 缓存中

ray 中实现

import { ipc } from '@ray-js/ray';
import { md5 } from 'js-md5';

const filename = md5(fileUrl); // 建议使用 md5 加密生成图片名称
ipc.downloadEncryptionImage({
    url: fileUrl,  // 相册、告警、日志数据中的图片地址
    encryptKey: fileKey, //  相册、告警、日志数据中的图片 key
    deviceId: devId, // 设备 id
    fileName: `${filename}.png`,
    success: res => {
        console.log('图片地址', res.path);
    },
    fail:(err) => {
        console.log('解密并下载图片失败', err)
    }
})

旋转图片

由于锁的摄像头会存在旋转的情况,此时就需要对图片做旋转处理。

获取旋转角度


import { getMediaRotate } from '@ray-js/lock-sdk';

// 获取图片旋转角度
const { imageAngle } = getMediaRotate();

处理图片尺寸,需要先通过 getImageInfo 获取到图片的实际尺寸,然后结合图片展示最大尺寸和旋转角度计算出图片实际的展示尺寸。

import { getImageInfo } from '@ray-js/ray';

// 图片支持的最大展示尺寸
const { width: originWidth, height: originHeight } = originSize;
// 缩放类型:width 表示宽度填满优先 height 表示高度填满优先,auto 表示自动填充,根据宽度或高度自动填充
const fillType = 'width';

getImageInfo({
    src: res.path, // 解密并下载的图片地址
    success: ({ width, height }) => {
        // 处理图片缩放
        let imageWidth = width;
        let imageHeight = height;
        const ratio = imageWidth / imageHeight;
        let baseSideWidth = originWidth;
        let isWidthPriority = true;
        if (fillType === 'width') {
            if (rotate === 90 || rotate === 270) {
            isWidthPriority = false;
            }
        } else if (fillType === 'height') {
            baseSideWidth = originHeight;
            if (rotate === 0 || rotate === 180) {
            isWidthPriority = false;
            }
        } else if (rotate === 0 || rotate === 180) {
            if (originWidth / originHeight > ratio) {
            baseSideWidth = originHeight;
            isWidthPriority = false;
            }
        } else if (rotate === 90 || rotate === 270) {
            if (originHeight / originWidth > ratio) {
            isWidthPriority = false;
            } else {
            baseSideWidth = originHeight;
            }
        }

        if (isWidthPriority) {
            imageWidth = baseSideWidth;
            imageHeight = imageWidth / ratio;
        } else {
            imageHeight = baseSideWidth;
            imageWidth = imageHeight * ratio;
        }



        return {
            width: `${imageWidth}px`,
            height: `${imageHeight}px`,
            backgroundImage: `url(${res.path})`,
            backgroundSize: '100% 100%',
            backgroundPosition: 'center',
            backgroundRepeat: 'no-repeat',
        };
    },
    fail: err => {
        console.error(err);
    },
});