Adobe After Effects工程使用aep格式来存储
写页面的时候发现好几处的按钮都是这种样式,于是把这个按钮的样式单独提取出来放着全局css文件中
.base-btn {
display: block;
width: 90%;
height: 54px;
line-height: 54px;
text-align: center;
background-color: #14B5A9;
color: #fff;
font-size: 1.4rem;
margin: 0 auto;
}
但这绝对是个不正确的做法,还不如不提取,因为写的太死,这也就是新手为什么不喜欢用面向对象的方式写代码的原因,因为新手很难考虑周全,最后反而还不如直接写的好。看看这个页面的按钮。
图片资源的引用是封装在<Pin>标签里面的<fileReference>里面,直接以路径的形式引用。确定了这些东西,就可以开始编码来定位文本和图片了。这里采用了一个C++ XML解析库TinyXML,不依赖其他外部库,接口简单。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
|
void XMLParser::parseTemplateItem(XMLNode* rootElement, int & index) { if (rootElement == nullptr ) { return ; } XMLElement* str = rootElement->FirstChildElement( "string" ); const char * txt = str->GetText(); XMLElement* idtaNode = rootElement->FirstChildElement( "idta" ); if (idtaNode != nullptr ) { const char * idatBdata = idtaNode->Attribute( "bdata" ); ItemType itemType = whichType(idatBdata); if (itemType == NORMAL_ITEM) { XMLElement* pinNode = idtaNode->NextSiblingElement( "Pin" ); if (pinNode != nullptr ) { XMLElement* sspcNode = pinNode->FirstChildElement( "sspc" ); if (sspcNode == nullptr ) { return ; } const char * sspcBdata = sspcNode->Attribute( "bdata" ); bool isNormalFormat = isImageFormat(sspcBdata); if (isNormalFormat) { XMLElement* Als2Node = sspcNode->NextSiblingElement( "Als2" ); if (Als2Node == nullptr ) { return ; } XMLElement* fileReferenceNode = Als2Node->FirstChildElement( "fileReference" ); if (fileReferenceNode == nullptr ) { return ; } const char * fullPath = fileReferenceNode->Attribute( "fullpath" ); m_imageMap.insertMulti(fullPath, index); index++; } } } else if (itemType == COMPOSITE_ITEM) { XMLElement* LayrNode = idtaNode->NextSiblingElement( "Layr" ); while (LayrNode != nullptr ) { XMLElement* stringNode = LayrNode->FirstChildElement( "string" ); if (stringNode) { // 文本为空的层直接跳过不要 const char * layerStr = stringNode->GetText(); if (layerStr != nullptr && strcmp (layerStr, "" )) { XMLElement* tdgpOuter = stringNode->NextSiblingElement( "tdgp" ); if (tdgpOuter) { XMLElement* tdmnOuter = tdgpOuter->FirstChildElement( "tdmn" ); if (tdmnOuter) { const char * tdmnOuterBdata = tdmnOuter->Attribute( "bdata" ); // 'ADBE Text Properties' if (tdmnOuterBdata != nullptr && ! strcmp ( "4144424520546578742050726f706572746965730000000000000000000000000000000000000000" , tdmnOuterBdata)) { XMLElement* tdgpInner = tdmnOuter->NextSiblingElement( "tdgp" ); if (tdgpInner != nullptr ) { XMLElement* tdmnInner = tdgpInner->FirstChildElement( "tdmn" ); if (tdmnInner != nullptr ) { const char * tdmnInnerBdata = tdmnInner->Attribute( "bdata" ); // 'ADBE Text Document' if (tdmnInnerBdata != nullptr || ! strcmp ( "41444245205465787420446f63756d656e7400000000000000000000000000000000000000000000" , tdmnInnerBdata)) { m_textMap.insertMulti(layerStr, index); index++; } } } } } } } } LayrNode = LayrNode->NextSiblingElement( "Layr" ); } } else if (itemType == FOLDER_ITEM) { XMLElement* SfdrNode = idtaNode->NextSiblingElement( "Sfdr" ); if (SfdrNode == nullptr ) { return ; } XMLElement* tempItem = SfdrNode->FirstChildElement( "Item" ); while (tempItem != nullptr ) { parseTemplateItem(tempItem, index); tempItem = tempItem->NextSiblingElement( "Item" ); } } else { return ; } } } |
要实现的功能是点击一个“开始”按钮,可以显示影像,再点击“停止”按钮,可以停止显示。
因为实时显示影像需要在一个循环里执行,为了在显示影像的同时还可以干别的(比如,点击“停止”按钮),这里需要用到多线程,即显示影像的代码放到子线程中,与主线程并发执行。
这篇文章的目的是向你展示你如何在文件组间移动数据。首先我会谈下聚集和非聚集索引,然后我会谈下如何在堆表里移动数据。让我们开始吧!
移动聚集和非聚集索引
一般来说在你的表上通常应该有一个聚集索引。有了现存的聚集索引就很容易移动表数据(即聚集索引)到不同的文件组。下列代码我为表创建了一个简单的聚集和非聚集索引,并插入近800MB的测试数据到表。
开本系列,讨论一些有趣的 CSS 题目,抛开实用性而言,一些题目为了拓宽一下解决问题的思路,此外,涉及一些容易忽视的 CSS 细节。
解题不考虑兼容性,题目天马行空,想到什么说什么,如果解题中有你感觉到生僻的 CSS 属性,赶紧去补习一下吧。
不断更新,不断更新,不断更新,重要的事情说三遍。
这里说明一下,为什么sass的后缀是scss?其实,sass有两种语法形式。 http://www.cnblogs.com/jwgsrtuj/
首先是scss,也就是我们这个后缀形式的语法。这种格式在 CSS3 语法的基础上进行扩展,这意味着每个CSS样式表是一个同等的SCSS文件。此外,SCSS 也支持大多数 CSS hacks 写法 以及浏览器专属前缀语法,这种语法的样式表文件需要以 .scss 作为拓展名。
另一种,也是最早的语法,被称为缩进语法。它提供了一种更加简介的方式来书写CSS。它使用缩进而不是花括号来表示选择器的嵌套,用换行而不是分号来分隔属性,一些人认为这样做比 SCSS 更容易阅读,书写也更快速。缩排语法具有 Sass 的所有特色功能, 虽然有些语法上稍有差异。 使用此种语法的样式表文件需要以 .sass 作为扩展名。
其实不管哪种语法,任何一种语法的文件可以直接导入 到另一种语法的文件中使用,同时还可以通过sass-convert 命令行工具,进行互相转换。
备份需要保证数据库的一致性,即在某一时刻,整个数据库的状态是一致的,这样可以通过备份进行恢复成为另一个从库。数据库目前使用最多的存储引擎是InnoDB,也有可能部分是MyISAM,建议把MyISAM存储引起改成InnoDB。现在重点说明关于InnoDB的备份。 http://www.cnblogs.com/chrtuw/
MyISAM表的备份选项:上面提过因为mysqldump默认开启--opt选项,而--opt里包含--lock-tables的选项,这个选项不能保证在多个数据库下数据备份的一致性,所以要么--skip-opt,再把需要的选项添加进去,要么就再使用--lock-all-tables的选项(开启之后会关闭--lock-tables的选项),要是在从库备份则只需要添加--master-data选项(开启之后自动打开--lock-all-tables选项)即可。
不知不觉在前端领域马上一个年头就要过去了,然而再看看自己的代码,果然够烂,那么为什么代码一直没有用面向对象的思维去写CSS呢?首先有两点:一点就是感觉没必要,还有一点就是难控制。为什么这么说呢?作为刚入门的人来说,第一写的代码就少,平时也不会感觉到代码有什么问题,等开发多了,虽然感觉到问题了,但是你还是很难去按照面向对象的思维去写,因为按照面向对象去思维写需要你把握全局观,更是面向未来编程,把握不好,越写越乱。所以很多新手一直都还是按照面向过程来写。今天我主要用一些实际的例子讲解面向对象的CSS以及JS让你写更少的代码,让你越来越懒。这篇文章绝对不是侃侃而谈,这些例子都是我实际开发中的问题,写这篇文章的目的就是让自己以后写更好的代码,同时分享给大家一起共勉。
Adobe After Effects工程使用aep格式来存储的更多相关文章
- 用AE (Adobe After Effects) 处理视频
这话要从年会说起,我们组的年会节目需要一段场外亲友团的评价视频,于是我们就靠在公司门口的logo前拍了这么一段.但是呢,有很多的不理想: 画面抖动 杂音好烦(中午吃饭时拍的,还有好大的微波炉好了的声音 ...
- Adobe After Effects CS6 操作记录
安装 After Effects CS6 在Mac OS 10.12.5 上无法直接安装, 需要浏览到安装的执行文件后才能进行 https://helpx.adobe.com/creative-clo ...
- Adobe After Effects 2017-14.0安装教程
Adobe After Effects 2017-14.0安装教程 第一步:首先请将电脑的网络断开,很简单:禁用本地连接或者拔掉网线,这样就可以免除登录Creative Cloud帐号,安装更方便快捷 ...
- 视音频编解码学习工程:AAC格式分析器
=====================================================视音频编解码学习工程系列文章列表: 视音频编解码学习工程:H.264分析器 视音频编解码学习工 ...
- 看逐浪CMS技术小哥做SVG动画(附使用Bodymovin和Lottie将Adobe After Effects(AE)程式转为 HTML5/Android/iOS原生的动画全过程-即AE转svg\canvas\html5动画)
名词解解释 adobe After Effects AE:adobe After Effects,adobe公司的专业视频制作软件. Bodymovin插件预览 Bodymovin:是一个AE的插 ...
- redis’五种格式的存储与展示
Redis支持持久化只是它的一件武器,另外,它针对不同的需求也提供了多达5种数据存储方式,以最大效率上的实现你的需求,下面分别说一下: 一 string(字符串) string是最简单的类型,你可以 ...
- 在Linux系统中使用ntfs、fat32格式的存储设备
在Linux系统中使用ntfs.fat32格式的存储设备 我们通常使用的移动硬盘或U盘一般都是ntfs或fat32的文件系统,作为一名运维工程师,经常会遇到把移动硬盘或者U盘上的内容拷贝的Linu ...
- 【体验】在Adobe After Effects CC 2018中使用脚本创建窗口
1.主界面 2.脚本编辑器主界面 3.对象浏览器 在脚本编辑器中按F1 4.写一段 ScriptUI var win = new Window('window', 'my win', [100, 10 ...
- CAS工程用redis集群存储票据ticket Spring整合
maven jar包版本: <dependency> <groupId>redis.clients</groupId> <artifactId>jedi ...
随机推荐
- 封装pyMysql
#!/usr/bin/python import MySQLdb class SpiderPDO: def __init__(self): db_host = '127.0.0.1' db_user ...
- 简单尝试利用vultr vps自架PPTP上网用于工作学习需要
因为学习和工作的需要用到登陆海外网站查阅相关的资料和文档,之前有需要使用的时候是问网友索要的账户登录本地电脑拨号的,但是老是跟别人要还是不好,决定自己尝试搭建一个长期使用.看到有不少的介绍提到VULT ...
- C# dll加载,抽象方法的使用
抽象类! dll的使用 /// <summary> /// 返回类型--插件 /// </summary> /// <param name="baseName& ...
- 存储过程详解与java调用(转)
存储过程的一些基本语法: --------------创建存储过程----------------- CREATE PROC [ EDURE ] procedure_name [ ; number ] ...
- 谈谈黑客攻防技术的成长规律(aullik5)
黑莓末路 昨晚听FM里谈到了RIM这家公司,有分析师认为它需要很悲催的裁员90%,才能保证活下去.这是一个意料之中,但又有点兔死狐悲的消息.可能在不久的将来,RIM这家公司就会走到尽头,或被收购,或申 ...
- Android深度探索--HAL与驱动开发----第十章读书笔记
printk函数的用法于-printf 函数类似,只不过printk函数运行在内核空间, printf函数运行在用户空间.也就是说,像Linux 驱动这样的Linux内核程序只能使用printk 函数 ...
- 获取局域网中指定IP或是主机名称的所有文件夹及其搜索文件
最近做个功能在局域网中所有指定文件,于是花了点精力完成了部分功能,先贴上 using System; using System.Collections.Generic; using System.Co ...
- 样式PC和手机页面
/*媒体查询--当页面大于1200px时*/ @media (min-width: 1200px) { } /*在922和1199像素之间的屏幕里,中等屏幕*/ @media (min-width: ...
- spring 3.0 应用springmvc 构造RESTful URL 详细讲解
在线springmvc_rest demo 由于下一版本的rapid-framwork需要集成spring RESTful URL,所以研究了一下怎么搭建. 并碰到了一下问题. springmvc 3 ...
- Python Django 数据库操作
1. 建立app 在自己的工程项目目录下输入: python manage.py startapp myapp(你想建立的app名称) 建立一个叫myapp的app 这样,在你的工程项目目录下会出现一 ...