图形交换格式为静态图像和动画图像工作GIF图像常用-常用GIFs-即多次循环运动许多人通过有效应用GIF自成网络名人
贝斯特2200娱乐云化平台强健云化端对端上传、存储、操作、优化和交付图像视频播放.以操作为特征, 通过重定位应用各种特效来转换视觉媒体
使用云化视频转换droid演示应用程序,用Kotlin写成GIF帮助性任务值得学习
第一创建云型账户.
第二Android Studio3.4+与Kotlin合作良好,IDE开发演示应用
droid客户端设置
Android开放工作室并创建 Android项目
- 内Android创建项目屏幕选择空活动模板化点击下个.
- 内配置您的项目屏幕显示,输入程序名、打包名等文本字段选择高特林语言化选择Android4.下拉菜单最小SDK,即由应用支持的最低Android版本点击结束.
配置云性详解
编辑您的项目
构建.grade
文件添加云依赖度以便访问云性特征实施组 : com.cloudary,名称:cloudiodroi
Androidmanifest.xml文件编辑并添加使用许可标签下的存储权限
创建类调用
App管理员
扩展应用
类 :公共类App管理员:应用(){覆盖Create{super.onCreate//初始化CloudinaryMediaManer.init/This}}
App管理员
初始化媒体管理器
存续周期内,搭建库时需要参数,例如云名定义AndroidManifest.xml
文件二进制添加
App管理员
类名应用标签AndroidManifest.xml
文件 :
代码片段布局
注意UI两个元素
- 进度栏上传或下载媒体时向前滑动
- 按钮从手机选择视频
云信提供两种上传方式:
- 签名上传中需要后端认证签名上传图像视频签名a客户端使用密钥不安全,很容易分解编译,后端强制使用
- 无签名上传安全性比签名安全,不需要签名文件大小限制和文件类型等选项可置入非签名预置非签名上传少数限制应用,例如,无法覆盖现有媒体
指定非签名上传演示应用
点击机牌板并发gear-wheel-shaped图标顶部设置
点击上传标签靠近顶部滚动上传预置段并点击启用非签名上传.
云形生成预设用随机字符串命名复制字符串并留待日后使用
从手机上传视频云化 转换视频GIF并下载GIF文件内存相关代码mainAcity.kt
文件 :
private val SELECT_VIDEO: Int = 100 lateinit var TAG:String override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) this.TAG = localClassName button_upload_video.setOnClickListener { if (checkStoragePermission()) { openMediaChooser() } else { requestPermission() } } } fun openMediaChooser() { val intent = Intent(Intent.ACTION_PICK, MediaStore.Video.Media.EXTERNAL_CONTENT_URI) startActivityForResult(intent, SELECT_VIDEO) } override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { if (requestCode == SELECT_VIDEO && resultCode == Activity.RESULT_OK) { progress_bar.visibility = VISIBLE button_upload_video.visibility = INVISIBLE MediaManager.get() .upload(data!!.data) .unsigned("YOUR_PRESET") .option("resource_type", "video") .callback(object : UploadCallback { override fun onStart(requestId: String) { Log.d(TAG, "onStart") } override fun onProgress(requestId: String, bytes: Long, totalBytes: Long) { } override fun onSuccess(requestId: String, resultData: Map<*, *>) { Toast.makeText(this@MainActivity, "Upload successful", Toast.LENGTH_LONG).show() } override fun onError(requestId: String, error: ErrorInfo) { Log.d(TAG,error.description) button_upload_video.visibility = VISIBLE progress_bar.visibility = INVISIBLE Toast.makeText(this@MainActivity,"Upload was not successful",Toast.LENGTH_LONG).show() } override fun onReschedule(requestId: String, error: ErrorInfo) { Log.d(TAG, "onReschedule") } }).dispatch() } }
上片段包含三大函数;
关于Create
:启动时,ap调用函数创建活动时使用布局AndroidManifest.xml
文件为活动默认布局点击包含监听器的按钮时,a检查是否有存储权限如果回答为是,ap调用函数openMediaChooser
.否则应用请求这些权限并接收后调用openMediaChooser
.细节解析
checkStoragePermission
,requestPermission
并onPermissionsResult
函数内见代码GitHub存储器.openMediaChooser
:此函数打开手机画廊选择视频,创建变量中唯一请求代码安全视频
.上头startActivityForResult
函数表示需要视频选择过程响应onActivityResult
函数.如果没有视频选择,ac取消操作onActivityResult
上视频选择值结果代码
华府市Activity.RESULT_OK
.否则值变换Activity.RESULT_CANCELLED
.函数检验请求代码是否匹配先前发送代码并验证结果代码读取Activity.RESULT_OK
.
成功视频选择触发通过发送云上传请求
需要几种方法共四组
上传
内含所选视频URI无签名
中包含主机预设名选项
中指定上传资源类型上传Callback
中跟踪上传进度
成功上传时应用调用成功
方法内含请求ID请求标识
和上传的其他细节可调用新上传视频的 URLresultData["url"]
.将视频转换为GIF简单修改视频文件扩展.gif
像这样
valpublicId:String=结果Data[“公共_id”)sringvalgifell:string=mediamanager.get ().url
>?>().videoSampling("12")!!.width("174").height("232").effect("loop:2")) .generate("$publicId.gif")
云情为每上传视频分配独有ID,通过调用可访问resultData["public_url"]
.正因如此,结果gifUrl
值指基于云名的URLres.www.aaaalireno.com/``<``cloud name``>``/
并附视频变换资源类型存取云存储独有ID及其输出格式(GIF文件扩展.gif
中例)
代码片段详解GIF文件变换:高度宽度分别压缩到232和174像素设置框架速率12fs并引导GIF循环两次GIF文件比上传视频大, 损耗GIFs的目的, GIFs文件大小应总小于视频对应方
详细视频转换云化,见相关文档来
立即通过GIF文件下载PRDown加载器
库里执行下列操作:
- 添加
PRDown加载器
依赖点构建.grade
文件 :
implementation 'com.mindorks.android:prdownloader:0.2.0'
- 初始化
PRDown加载器
中AppController.kt
文件 :
public class AppController : Application() { override fun onCreate() { super.onCreate() // Initialize Cloudinary MediaManager.init(this) // Initialize the PRDownload library PRDownloader.initialize(this) } }
- 创建函数调用
下载GIF
处理下载
private fun downloadGIF(url: String, name: String) { val downloadId = PRDownloader .download(url, getRootDirPath(), name).build() .setOnStartOrResumeListener(object : OnStartOrResumeListener { override fun onStartOrResume() { Log.d(TAG,"download started") } }) .setOnPauseListener(object : OnPauseListener { override fun onPause() { } }) .setOnCancelListener(object : OnCancelListener { override fun onCancel() { } }) .setOnProgressListener(object : OnProgressListener { override fun onProgress(progress: Progress) { } }) .start(object : OnDownloadListener { override fun onDownloadComplete() { progress_bar.visibility = INVISIBLE Toast.makeText(this@MainActivity,"Download complete",Toast.LENGTH_LONG).show() } override fun onError(error: Error) { Log.d(TAG,error.toString()) } }) } private fun getRootDirPath(): String { return if (Environment.MEDIA_MOUNTED == Environment.getExternalStorageState()) { val file = ContextCompat.getExternalFilesDirs(this@MainActivity, null)[0] file.absolutePath } else { this@MainActivity.filesDir.absolutePath } }
PRDownload.download
取三大参数:待下载文件的URL、置放目录和文件名正因如此 后代gifUrl
程序调用PRDownload.download
中成功
函数集上传Callback
中显示
excess(repId:String,结果Data:map++++++++++++++++++++下载GIF(gifUrl,$publicId.gif)
最后,app将下载文件放进目录Android/data/app包名++/file
手机里
云化提供无数实用直觉API操作并存储视觉媒体演示应用本文章描述 仅仅是冰山一角检查细节云型APIs和其他功能.ac全源码见GitHub存储器.