uni-app 实现视频和图片添加滤镜等功能

发布于 1周前 作者 yibo5220 来自 Uni-App

uni-app 实现视频和图片添加滤镜等功能

对视频和图片添加滤镜等功能

4 回复

全局哀悼日全局灰、灰度滤镜、vue和nvue都是可用(ios、andorid):https://ext.dcloud.net.cn/plugin?id=7513


公司承接项目外包开发、双端(Android,iOS)原生插件开发。
为什么选择我们: 1、1000+项目开发积累,数百种商业模式开发经验,更懂您的需求,沟通无障碍。 2、一年免费技术保障,系统故障或被攻击,2小时快速响应提供解决方案落地。 3、软件开发源码定制工厂,去中间商降低成本,提高软件开发需求沟通效率。 4、纯原生开发,拒绝模板和封装系统,随时更新迭代,增加功能,无需重做系统。 5、APP定制包办软件著作权申请,30天内保证拿到软著证书,知识产权受保护。 6、中软云科技导入严谨的项目管理系统,确保项目准时交付,快速抢占市场商机。 7、软件开发费、维护费、第三方各种费用公开透明,不花冤枉钱,不玩套路。
已有大量双端插件、App、小程序、公众号、PC、移动端、游戏等案例。
行业开发经验:银行、医疗、直播、电商、教育、旅游、餐饮、分销、微商、物联网、零售等
商务QQ:1559653449 商务微信:fan-rising
7x24小时在线,欢迎咨询了解

要好的效果 建议用第三方美颜SDK 我们有多家美颜SDK的插件 可以联系看效果
智密科技承接安卓/IOS双端插件开发、安卓/IOS App外包开发、项目整体外包、各类硬件产品开发
我们的优势: 1、全职UI、前端、安卓、IOS、后端、硬件工程师,每个岗位都是专职开发更专业,选择智密您就拥有了一个完整的技术支持团队; 2、定制的产品无论是插件、APP、整套系统,一年内免费Bug修复; 3、定制的APP和整体项目软件著作权归客户所有,并协助软件著作权申请; 4、软件开发源头工厂,定价合理,与开发人员直接沟通,避免需求理解问题,提高开发效率; 5、软件均为自主开发,不基于网上代码进行二次开发,保障系统安全性; 6、软件源码自己开发,出现BUG能快速修复,新需求能快速实现; 7、签订开发合同,通过条款约定双方权利义务,服务和售后有保障; 8、我们的插件尽可能做到让用户UI自定义,用户改变UI之后无需联系我们修改插件,只要前端调整UI即可。
我们唯一的劣势:价格可能会比别人高 我们不提供廉价的插件和服务,服务和收费是成正比的。 我们的插件定价基本都在千元以上,插件使用成本=插件购买费用 插件集成成本 插件填坑成本 后续更新成本 在没有好的技术支持前提下,后面三项成本将远远大于插件购买费用,选择智密科技,实现双赢
经过几年积累,已拥有大量双端插件,常见功能的插件几乎都能直接试用,欢迎各位进群了解
插件沟通交流群:755910061(欢迎进群了解我们的技术支持方式及我们的技术能力) 商务QQ:57570616(这是传说中的搅屎棍,光动嘴皮子不干活的,进群最实在) 商务微信:ZhimiTec(同上…)

在uni-app中实现视频和图片添加滤镜功能,可以借助一些第三方库或者原生插件。由于uni-app支持使用H5、小程序、App等多种平台,以下代码示例将主要聚焦于在App端实现这一功能,因为小程序和H5端对原生功能的支持相对有限。

图片添加滤镜

对于图片,我们可以使用Canvas API来实现滤镜效果。以下是一个简单的示例,展示如何给图片添加灰度滤镜:

// 在页面的onLoad或mounted生命周期中
onReady() {
    const ctx = uni.createCanvasContext('myCanvas'); // 假设你的canvas id为myCanvas
    uni.getImageInfo({
        src: 'path/to/your/image.jpg',
        success: (res) => {
            const imageData = ctx.createImageData(res.width, res.height);
            const data = imageData.data;

            for (let i = 0; i < data.length; i += 4) {
                const avg = (data[i] + data[i + 1] + data[i + 2]) / 3;
                data[i] = avg;     // Red
                data[i + 1] = avg; // Green
                data[i + 2] = avg; // Blue
                // Alpha channel remains unchanged
            }

            ctx.putImageData(imageData, 0, 0);
            ctx.draw(false, () => {
                // 绘制完成后,可以将canvas转为图片显示或保存
                uni.canvasToTempFilePath({
                    canvasId: 'myCanvas',
                    success: (result) => {
                        console.log('Filtered image path:', result.tempFilePath);
                    },
                    fail: (err) => {
                        console.error('Failed to convert canvas to image:', err);
                    }
                });
            });
        },
        fail: (err) => {
            console.error('Failed to get image info:', err);
        }
    });
}

视频添加滤镜

对于视频,由于处理复杂度较高,通常需要使用原生插件或FFmpeg这样的强大工具。以下是一个使用FFmpeg插件的示例(假设你已经集成了FFmpeg插件):

// 引入FFmpeg插件
const ffmpeg = uni.requireNativePlugin('FFmpeg');

// 执行滤镜命令,例如将视频转为灰度
ffmpeg.exec('-i', 'input.mp4', '-vf', 'grayscale', 'output.mp4', (err, res) => {
    if (err) {
        console.error('FFmpeg error:', err);
    } else {
        console.log('Filtered video saved as output.mp4');
    }
});

注意:实际开发中,FFmpeg命令和插件的使用可能会因平台差异而有所不同,需要仔细阅读插件文档并根据具体平台进行调整。同时,由于FFmpeg处理视频时可能会占用较多资源,建议在后台线程中执行相关操作。

回到顶部