涂图

  • 首页
  • 解决方案
    • 拍照和图片编辑
    • 视频录制和后期编辑
    • 模板视频
    • 人像美颜
    • 人脸特效
    • 滤镜特效
    • 贴纸特效
  • API服务
    • 人像服务
    • 视频融合
    • 人脸云
    • 在线滤镜
  • 客户案例
  • 下载
  • 文档
  • 关于我们
  • 控制台
  • 一、新手上路
  • 控制台操作说明
    • 控制台使用说明
    • 自定义资源上传说明
  • 二、SDK 文档
  • 图像 SDK
    • 产品说明
      • 产品指南
      • 性能测试报告
    • iOS 文档
      • 快速开始
      • 安装与更新
      • 集成向导
      • 相机组件的使用
      • 相册组件的使用
      • 照片美化组件的使用
      • 主题包基础使用
      • 自定义滤镜
      • 自定义贴纸
      • 自定义界面
      • 自定义 ProgressHUD 提示框(2.0.0~3.2.7)
      • 自定义 ProgressHUD 提示框
      • API 文档
      • 致谢
    • Android 文档
      • 快速开始
      • 安装与更新
      • 集成向导
      • 相机组件的使用
      • 照片美化组件的使用
      • 头像设置组件的使用
      • 多选相册组件的使用
      • 主题包基础使用
      • 自定义贴纸
      • 自定义滤镜
      • 自定义界面
      • 自定义进度信息提示框
      • 自定义 Activity 打开相机
      • API 文档
      • 致谢
    • iOS 技术问题
      • 「Incorrenct app key」
      • 更换滤镜效果图
      • 导航栏与状态栏
      • 组件中使用部分滤镜
      • Cocoapods 相关问题
      • 图片尺寸变化
      • Photos.framework 相关错误
      • 多包名发布
      • GPUImage 的相关错误
      • TuSDKTSALAsset 转换系统对象
      • 滤镜无法显示名称
      • 获取相机的点击事件
    • Android 技术问题
      • Incorrenct app key
      • 重复引用包
      • Recyclerview 库缺失
      • 方法数超出 65536 限制
      • 传入图片路径
      • 指定裁剪比例
      • 指定相册每行列数
      • 禁用相册自动跳转
      • 如何使用部分滤镜?
      • 代码混淆
      • TuSDK 使用的依赖库
      • 多渠道打包
      • 设置相机输出尺寸
      • 相机横屏设置
      • 自定义照片美化组件各功能模块效果默认参数值
    • 拼图设计
      • 拼图模板导出
    • 版本更新日志
      • iOS 版本更新日志
      • Android 更新日志
  • 视频剪辑 SDK
    • 产品说明
      • 产品指南
    • iOS文档
      • TuSDK Video Editor iOS 接入文档
    • Android文档
      • TuSDK Video Editor Android 接入文档
    • 版本更新日志
      • iOS 版本更新日志
      • Android 版本更新日志
  • 流处理(特效相机) SDK
    • 产品说明
      • 产品指南
    • iOS 文档
      • TuSDK特效相机接入文档-iOS
      • TuSDK直播特效接入说明-iOS
    • Android 文档
      • TuSDK特效相机接入文档-Android
      • TuSDK直播特效接入说明-Android
    • 版本更新日志
      • iOS 版本更新日志
      • Android 版本更新日志
  • 视频融合 SDK
    • 产品说明
      • 产品指南
      • 模板管理
    • iOS 文档
      • 快速开始
      • 安装与更新
      • TuSDK EVA 接入说明 2.0
      • API文档
    • Android 文档
      • 快速开始
      • 安装与更新
      • TuSDK EVA 接入说明 (2.0.0+)
      • API 文档
    • 模板设计
      • (新)标准模板设计规范
      • (旧)标准模板设计规范
      • 支持的 AE 功能和属性
      • 动态模板设计规范
    • 模板导出
      • (新)模板导出插件安装
      • (新)模板导出插件使用
      • (旧)模板导出插件安装
      • (旧)模板导出插件使用
      • (旧)模板效果查看器
      • (旧)模板打包规范
    • 版本更新日志
      • iOS 版本更新日志
      • Android 版本更新日志
      • 导出插件版本更新日志
      • 效果查看器更新日志
  • 短视频 SDK
    • 产品说明
      • 产品指南
      • 性能测试报告
    • iOS 文档
      • 快速开始
      • 集成向导
      • 录制相机的使用
      • 视频编辑器的使用
      • 功能 API 的使用
      • API 文档
    • Android 文档
      • 快速开始
      • 集成向导
      • 录制相机的使用
      • 视频编辑器的使用
      • 功能 API 的使用
      • API 文档
    • iOS 技术问题
      • 常见问题
    • Android 技术问题
      • 常见问题
    • 版本更新日志
      • iOS 版本更新日志
      • Android 版本更新日志
  • 三、云服务文档
  • 人像服务
    • 使用文档
      • 快速入门
      • 核心功能
    • API概述
      • API 概述
      • API 文档
    • 常见问题
      • 常见问题
  • 视频融合(云渲染)
    • 使用文档
      • 快速入门
      • 模板管理
    • API概述
      • API概述
      • API 文档
    • 模板设计
      • (新)标准模板设计规范
      • (旧)标准模板设计规范
      • 支持的 AE 功能和属性
      • 动态模板设计规范
    • 模板导出
      • (新)模板导出插件安装
      • (新)模板导出插件使用
      • (旧)模板导出插件安装
      • (旧)模板导出插件使用
      • (旧)模板效果查看器
      • (旧)模板打包规范
    • 常见问题
    • 版本更新日志
      • 导出插件版本更新日志
      • 效果查看器更新日志
  • 人脸云
    • 使用文档
      • 快速入门
      • 核心功能
    • API 概述
      • API 概述
    • 常见问题
      • 常见问题
  • 在线滤镜
    • 使用文档
      • 快速入门
      • 核心功能
      • FILTER API
      • API 错误码表
    • API概述
      • API 概述
    • 常见问题
      • 常见问题
  • 四、综合
  • 涂图隐私协议
  • 用户退出机制
  • 动态贴纸设计规范
  • 美妆贴纸设计规范
  • 云服务账单说明
  • 应用包名与密钥
  • 基础服务开发者升级流程
  • 五、常见问题
  • 常见问题
  • 遇到问题,怎么办?
  • 如何使用贴纸管理、滤镜管理?

常见问题

1.如何更换新的滤镜

(1)如果用户更换新滤镜,用户需要在控制台重新打包下载资源文件,然后替换到对应位置。操作步骤参考集成向导「安装与更新」。

(2)替换资源文件后,查看资源文件(TuSDK.bundle/others/lsq_config.json)中滤镜的 filerCode,替换到项目中对应的位置。

(3)替换滤镜资源后,需要根据新的 filterCode 更改对应滤镜效果缩略图文件的名称。

(4) "name":"lsq_filter_VideoFair",VideoFair 就是该滤镜的filterCode ,在_videoFilters = @[@"VideoFair"]; 可以进行选择使用滤镜的设置。

2.有关 GPUImage

如果用户工程已使用 GPUImage 的部分功能,建议用户使用 Github 提供的 完整版GPUImage 。如果在使用完整版 GPUImage 的过程中有什么问题,可以参考文档 GPUImage 的相关错误。

3.有关滤镜封面缩略图和文案显示

滤镜封面图

用户需要自行设计滤镜封面图。SDK demo 中滤镜栏展示的滤镜的封面图 Resources/Images 文件夹中,缩略图图片有固定的命名格式需要和代码中调用的滤镜的代号匹配(filterCode),命名规则为lsq_filter_thumb_「filterCode」,例如lsq_filter_thumb_jelly.jpg。

文案显示

SDK demo 中的文案在Resources/Localized文件夹中,用户可以根据实际需求修改文案的显示或者可以直接在 UI 代码中进行直接修改,使用文案时请务必不要将 *InfoPlist.strings* 文件复制到工程中,以免造成应用名显示问题。

4.录制相机全屏展示

需要进行以下设置

    // 不启动相机预览画面区域显示算法,注释掉该行代码
    // _camera.regionHandler = [[CustomTuSDKCPRegionDefaultHandler alloc]init];
    // 比例设置为 1.0 ,预览画面为 1:1 方形画幅。
    // 比例设置为 0,预览画面为全屏画幅
    _camera.cameraViewRatio = 0;
    // 最终输出的视频尺寸由 outputSize 控制
    // 需要将输出尺寸修改为均为 16 的倍数
    // _camera.outputSize = CGSizeMake(640, 640);

5.输出文件体积

(1)相机控制

    // 输出视频的画质,主要包含码率、分辨率等参数 (默认为空,采用系统设置)
    _camera.videoQuality = [TuSDKVideoQuality makeQualityWith:TuSDKRecordVideoQuality_Low1];
    // 可以进行输出视频文件的码率自定义,配置参数请参考 TuSDKVideo/TuSDKVideoQuality.h
    TuSDKVideoQuality *customVideoQuality = [[TuSDKVideoQuality alloc]init];
    customVideoQuality.lsqVideoBitRate = 1200 * 1000;
    _camera.videoQuality = customVideoQuality;

(2)编辑器控制

         TuSDKMovieEditorOptions *options = [TuSDKMovieEditorOptions defaultOptions];
         .......
        // 设置编码视频的画质
        options.encodeVideoQuality = [TuSDKVideoQuality makeQualityWith:TuSDKRecordVideoQuality_Low1];

6.相机的模式

录制相机的模式

    // 需要配置相机的录制模式,如果沿用 demo 提供的示例 UI,需要同时配置底部栏的 recordMode
    /**
        录制模式
     */
    typedef NS_ENUM(NSInteger,lsqRecordMode)
    {
        /** 正常模式 */
        lsqRecordModeNormal,
        /** 续拍模式 */
        lsqRecordModeKeep,
    };
    _camera.recordMode = _inputRecordMode;
    _bottomBar.recordMode = _inputRecordMode;
    // 拍照录制相机的录制模式为正常模式

7.相机默认加载一款滤镜

录制相机初始化,默认选择一款滤镜

    // 需要配置相机的默认选择滤镜,如果沿用 demo 提供的示例 UI ,需要同时配置滤镜栏的默认滤镜
    // 设置默认滤镜  对应filterView创建时默认的 currentFilterTag 和相机保持一致
    [_camera switchFilterWithCode:_videoFilters[1]];
    // 注: currentFilterTag 基于200 即:200 + 滤镜列表中某滤镜的对应下标
    _filterView.currentFilterTag = 201;

8.MoviePreviewAndCutViewController 设置全屏

全屏/视频比例自适应展示设置

    // 可以设置全屏/视频比例自适应展示,如果沿用 demo 提供的示例 UI ,需要进行以下更改
    // 需要将控制器内 - (void)initPlayerView 方法中的部分代码注释
    // _videoScroll 和 _videoView 默认是 frame 为屏幕宽度的 1:1 区域
    // 设置全屏展示时,需要将两者的 frame 设置为屏幕宽高,如不设置将视频按照比例自适应展示。
    // 调整其他控件的背景色的 alpha 值,以防止遮挡视觉效果
    // 需要注释代码如下
       /*
        AVAssetTrack *videoTrack = [_item.asset tracksWithMediaType:AVMediaTypeVideo][0];
        CGSize videoSize = videoTrack.naturalSize;
        // 根据朝向判断是否需要交换宽高
        CGAffineTransform transform = videoTrack.preferredTransform;
        BOOL isNeedSwopWH = NO;
        if (transform.a == 0 && transform.b == 1.0 && transform.c == -1.0 && transform.d == 0) {
            // Right
            isNeedSwopWH = YES;
        }else if (transform.a == 0 && transform.b == -1.0 && transform.c == 1.0 && transform.d == 0){
            // Left
            isNeedSwopWH = YES;
        }else if (transform.a == -1.0 && transform.b == 0 && transform.c == 0 && transform.d == -1.0){
            // Down
            isNeedSwopWH = NO;
        }else{
            // Up
            isNeedSwopWH = NO;
        }
        if (isNeedSwopWH) {
            // 交换宽高
            videoSize = CGSizeMake(videoSize.height, videoSize.width);
        }
        // 如需比例自适应,需要注释下方代码块
        // 此处的宽高计算仅适用于 1:1 情况下,若有其他的适配,请重新修改计算方案
        if (videoSize.width > videoSize.height) {
            // 定高适配宽
            CGSize newSize = CGSizeMake(_videoView.lsqGetSizeHeight*videoSize.width/videoSize.height, _videoView.lsqGetSizeHeight);
            CGFloat offset = (newSize.width - _videoView.lsqGetSizeWidth)/2;
            [_videoView lsqSetSize:newSize];
            _videoScroll.contentSize = newSize;
            _videoScroll.contentOffset = CGPointMake(offset, 0);
        }else{
            // 定宽适配高
            CGSize newSize = CGSizeMake(_videoView.lsqGetSizeWidth, _videoView.lsqGetSizeWidth*videoSize.height/videoSize.width);
            CGFloat offset = (newSize.height - _videoView.lsqGetSizeHeight)/2;
            [_videoView lsqSetSize:newSize];
            _videoScroll.contentSize = newSize;
            _videoScroll.contentOffset = CGPointMake(0, offset);
        }
        */

9.MovieEditorViewController 设置全屏

全屏/视频比例自适应展示设置

    // 可以设置全屏/视频比例自适应展示,如果沿用 demo 提供的示例 UI ,需要进行以下更改
    // 启动时候需要设置参数如下
    MovieEditorFullScreenController *vc = [MovieEditorFullScreenController new];
    vc.inputURL = _inputURL;
    vc.startTime = _startTime;
    vc.endTime = _endTime;
    vc.cropRect = CGRectMake(0, 0, 0, 0);
    // 同时将控制器内 - (void)lsqInitView 中视频展示 _previewView 的 frame 设置为屏幕宽高,画面即为全屏展示
    // 如不设置 _previewView 的 frame 将进行视频比例的自适应的展示
    // 调整其他控件的背景色的 alpha 值,以防止遮挡视觉效果

10.组件连接使用:拍照录制相机

    // 拍照录制相机连接视频编辑功能,需要进行一些调整
    -(void)viewWillDisappear:(BOOL)animated
    {
        [super viewWillDisappear:animated];
        // 进行页面跳转需要注释销毁相机的代码
        // 相机页面销毁的时候,不要忘记销毁相机
        // [self destroyCamera];
        [self destroyVideoPlayer];
    }

    // 在保存照片或录制的视频的方法中,进行相关控制器的开启
    - (void)savePictureOrVideo
    {
        if (!_takePictureIV.hidden) {
            // 保存照片
            [TuSDKTSAssetsManager saveWithImage:_takePictureIV.image compress:0 metadata:nil toAblum:nil completionBlock:^(id<TuSDKTSAssetInterface> asset, NSError *error) {
                if (!error) {
                    _takePictureIV.image = nil;
                    _takePictureIV.hidden = YES;
                    [[TuSDK shared].messageHub showSuccess:NSLocalizedString(@"lsq_save_saveToAlbum_succeed", @"保存成功")];
                }
            } ablumCompletionBlock:nil];

        }
        if (_videoPlayer && _videoPath) {
            // 保存视频,同时删除临时文件
            [TuSDKTSAssetsManager saveWithVideo:[NSURL fileURLWithPath:_videoPath] toAblum:nil completionBlock:^(id<TuSDKTSAssetInterface> asset, NSError *error) {
                if (!error) {
                    // 需要注释销毁临时文件的方法
                    // 相机最终销毁的时候,不要忘记将临时文件删除
                    // [TuSDKTSFileManager deletePath:_videoPath];
                    // _videoPath = nil;
                    [self destroyVideoPlayer];
                    // [[TuSDK shared].messageHub showSuccess:NSLocalizedString(@"lsq_save_saveToAlbum_succeed", @"保存成功")];
                }
            } ablumCompletionBlock:nil];
            // 开启时间裁剪
            MoviePreviewAndCutRatioAdaptedController *vc = [MoviePreviewAndCutRatioAdaptedController new];
            vc.inputURL = [NSURL fileURLWithPath:_videoPath];
            [self.navigationController pushViewController:vc animated:YES];
        }
        _preView.hidden = YES;
    }

11.组件连接使用:断点续拍相机

    // 断点续拍相机连接视频编辑功能,需要进行一些调整
    -(void)viewWillDisappear:(BOOL)animated
    {
        [super viewWillDisappear:animated];
        // 进行页面跳转的时候,需要注释下方销毁相机的方法。
        // 相机页面销毁,不要忘记销毁相机
        // [self destroyCamera];
    }
    // 在视频录制完成的代理方法中,进行相关控制器的开启
    - (void)onVideoCamera:(TuSDKRecordVideoCamera *)camerea result:(TuSDKVideoResult *)result;
    {
        // 通过相机初始化设置  _camera.saveToAlbum = NO;  result.videoPath 拿到视频的临时文件路径
        if (result.videoPath) {
            // 进行自定义操作,例如保存到相册
            // UISaveVideoAtPathToSavedPhotosAlbum(result.videoPath, nil, nil, nil);
            // [[TuSDK shared].messageHub showSuccess:NSLocalizedString(@"lsq_save_saveToAlbum_succeed", @"保存成功")];
            // 开启视频编辑添加滤镜
            MovieEditorFullScreenController *vc = [MovieEditorFullScreenController new];
            vc.inputURL = [NSURL fileURLWithPath:result.videoPath];
            // 视频编辑如需全屏展示,参数需要设置 vc.cropRect = CGRectMake(0, 0, 0, 0); 画面展示会进行比例自适应
            vc.cropRect = CGRectMake(0, 0, 0, 0);
            vc.startTime = 0;
            vc.endTime = result.duration;
            [self.navigationController pushViewController:vc animated:true];
        }else{
            // _camera.saveToAlbum = YES; (默认为 :YES)将自动保存到相册
            [[TuSDK shared].messageHub showSuccess:NSLocalizedString(@"lsq_save_saveToAlbum_succeed", @"保存成功")];
        }

        if (_camera && _camera.recordMode == lsqRecordModeNormal) {
            [_bottomBar recordBtnIsRecordingStatu:NO];
        }
        // 自动保存后设置为 恢复进度条状态
        [self changeNodeViewWithLocation:0];
    }

12.视频文件自定义保存

获取到视频的临时文件后,需要保存到指定的相册

    // 录制完成后,拿到临时文件地址可通过以下方法,保存到指定位置
        if (_videoPlayer && _videoPath) {
            // 保存视频,同时删除临时文件
            [TuSDKTSAssetsManager saveWithVideo:[NSURL fileURLWithPath:_videoPath] toAblum:@"自定义相册" completionBlock:^(id<TuSDKTSAssetInterface> asset, NSError *error) {
                if (!error) {
                    // 删除临时文件地址
                    [TuSDKTSFileManager deletePath:_videoPath];
                    _videoPath = nil;
                }
            } ablumCompletionBlock:nil];
        } 

13.区分不同比例的贴纸

  • 控制台资源会提供比例类型的贴纸,目前提供的有:尺寸比例 1:1 和全屏的贴纸。
  • 用户可以在屏幕比例为 1:1 的相机中添加方形或者圆形贴纸。在全屏相机中添加全屏的贴纸。
  • 用户可以在 Demo 中的 Resource/Assets 文件去配置 fullScreenSticker.json和squareSticker.json。
  • 配置方法可参考文件中的示例格式,贴纸 ID 可以在官网控制台 产品服务 - SDK - 应用管理 - 我的资源库 - 智能贴纸下点击查看获取贴纸的详情。
// 初始化贴纸栏
- (void)createStikerView
{
    if (!_stickerView) {
        CGFloat stickerViewHeight = _bottomBackView.lsqGetSizeHeight - 10;
        _stickerView = [[StickerScrollView alloc]initWithFrame:CGRectMake(0, (_bottomBackView.lsqGetSizeHeight - stickerViewHeight), self.view.lsqGetSizeWidth, stickerViewHeight)];
        _stickerView.stickerDelegate = self;

        // 初始化相机贴纸栏的贴纸类型(默认:加载全部贴纸)
        // 显示方形或圆形贴纸
        // _stickerView.cameraStickerType = lsqCameraStickersTypeSquare;
        // 显示全屏贴纸
        // _stickerView.cameraStickerType = lsqCameraStickersTypeFullScreen;

        _stickerView.backgroundColor = [UIColor whiteColor];
        [_bottomBackView addSubview:_stickerView];
    }
}

14.在线下载动态贴纸资源

  • demo 项目中 Source/Views/StickerScrollView.m 查看 TuSDKOnlineStickerDownloader 相关逻辑示例

  • 1.如何更换新的滤镜
  • 2.有关 GPUImage
  • 3.有关滤镜封面缩略图和文案显示
  • 4.录制相机全屏展示
  • 5.输出文件体积
  • 6.相机的模式
  • 7.相机默认加载一款滤镜
  • 8.MoviePreviewAndCutViewController 设置全屏
  • 9.MovieEditorViewController 设置全屏
  • 10.组件连接使用:拍照录制相机
  • 11.组件连接使用:断点续拍相机
  • 12.视频文件自定义保存
  • 13.区分不同比例的贴纸
  • 14.在线下载动态贴纸资源
  • 在线技术支持
  • 专业售前售后团队
  • 版本定期更新
  • 全方位解决方案

商务合作

  • 177-6716-7529
  • 2969573855
  • sales@tusdk.com
  • 浙江省 杭州市 西湖区 西斗门9号 福地创业园1号楼3楼301室

关注我们

qrcode

©2019-2025 TUTUCLOUD. All Rights Reserved. 杭州元凡视觉智能科技有限公司 | 浙ICP备14040447号-1 | 浙公网安备33010602001649号

  • 177-6716-7529
  • sales@tusdk.com
  • 2969573855