【前端技术文档】PS快速切图方法

整    理:贾会迎、晋哲

时    间:2016-02-05

说    明:PS处理同类型不同尺寸图标的快捷方法

问题:当同一版块中的每个图标的宽高各异时,在切图时需要为这些图标设置一个统一的宽高,方便样式统一编写。如何快速准确的确定切图尺寸,同时分成两套不同状态样式?

例如以下按钮的图标:
p-1

操作步骤
一、同时选择几个图标的图层
p-2

二、复制图层—新建—裁切(透明像素部分)。得到如下图
p-3

三、统一颜色样式(将绿色图标改为灰色)
1、提取颜色值,可保存至背景色
p-4
2、在图层空白处双击,调出“图层样式”面板,设置“颜色叠加”
p-5
3、图标颜色改变为灰色(效果)
p-6

四、将图标水平垂直居中,多个图标重叠显示,来确定图标的准确尺寸。
p-7

五、确定图标大小,逐一显示并保存
1、裁切透明像素,获得图标的准确大小
p-8
2、查看此时“图像--画布”大小,根据图标实际需要设置最大宽高值,最好设置为偶数,以方便样式设置。如下图,高度可以设42px、46px、50px等等
p-9

p-10
3、按设计图顺序逐一显示图层并保存

六、设置第二套状态样式(如图绿色)。
1、提取交互图标的颜色,可保存在前景色中
p-11
2、在图层空白处双击,调出“图层样式”面板
p-12

p-13
3、选择打开“颜色叠加”面板,设置叠加的颜色
p-14
4、在图层区域右击,选择“拷贝图层样式”
p-15
5、选中其他图层,右击选择“粘贴图层样式”,后逐一显示并保存图片。
p-16

p-17

p-18

七、保存的图标文件效果,注意按照设计图顺序和统一的规则命名
p-19

HHuploadify(基于Huploadify)的文件上传插件

整  理:雷  媛
时  间:2016-02-05
说  明: 上传图片的插件

一、简介

基于Huploadify(基于uploadify)的图片上传插件,自动上传,上传进度条,上传后预览

 二、安装

获取代码:下载HHuploadify的源代码。

网页中引入jquery和css

<script src="jquery-2.2.0.min.js"></script>
<script src="jquery.HHuploadify.js"></script>
<link rel="stylesheet" href="HHuploadify.css"> 
备注:可以在HHuploadify.css中对HHuploadify的样式进行修改。

三、使用方法:

 3.1  上传多张(一组)图片

demo:
<div id="upload"></div>
<script>
 $('#upload').HHuploadify({
        fileTypeExts:'*.jpg;*.png;*.gift',//允许上传的文件类型
        uploader:'sub/upload_sub.php' // 必须的,必须指定用来处理上传逻辑的后端处理URL
    });
</script>
点击按钮之后可以多选多张图片,每张图片会各自提交到upload_sub.php。这里提示一下,uploadify本身就是一张一张图片提交的,而不是所有图片一起提交。upload_sub .php可以是你自己的URL,在这个URL进行图片处理和保存,并且返回一个包含url字段的json字符串,通过这个url字段让上传区域展示图片。

3.2  单张图片上传

在上面的代码中,只需要加入一个isSingle参数即可:
demo:
<div id="upload"></div>
<script>
    $('#upload').HHuploadify({
        fileTypeExts:'*.jpg;*.png;*.gift',
        isSingle:true,
        uploader:'sub/upload_sub.php '// 必须的,必须指定用来处理上传逻辑的后端处理URL
    });
</script>
多张图片上传的时候,无论你上传了多少张图片,末尾都会存在选择图片的按钮,你还可以继续上传。而单张图片上传时,选择图片时只能选择一张,选择好之后就进入上传状态,按钮消失,不能继续选择图片进行上传。

四、初始化参数
js中默认的参数如下所示:
fileTypeExts:'*.*',//允许上传的文件类型,格式'*.jpg;*.doc'
uploader:'',//文件提交的地址
auto:true,//是否开启自动上传
method:'post',//发送请求的方式,get或post
multi:true,//是否允许选择多个文件
isSingle:false,// 是否是单个文件上传,如果是单个文件上传,选择文件后,上传按钮会消失,multi也会被强制设定为false
formData:null,//发送给服务端的参数,格式:{key1:value1,key2:value2}
fileObjName:'file',//在后端接受文件的参数名称,如PHP中的$_FILES['file']
fileSizeLimit:2048,//允许上传的文件大小,单位KB
showUploadedFilename:false,//是否显示上传文件名
showUploadedPercent:false,//是否实时显示上传的百分比,如20%
showUploadedSize:false,//是否实时显示已上传的文件大小,如1M/2M
buttonText:'选择文件',//上传按钮上的文字
itemTitle:false,// 该上传item区域的标题:该值将作为上传按钮的提示语,上传时,会显示在左上角,注意,每一个上传区都会有,所以尽可能再isSingle=true的情况下使用
removeTimeout: 1000,//上传完成后进度条的消失时间,单位毫秒
itemTemplate:itemTemp,//上传队列显示的模板
onUploadStart:null,//上传开始时的动作
onUploadSuccess:null,//上传成功的动作
onUploadComplete:null,//上传完成的动作
onUploadError:null, //上传失败的动作
onInit:null,//初始化时的动作
onCancel:null,//删除掉某个文件后的回调函数,可传入参数file
onClearQueue:null,//清空上传队列后的回调函数,在调用cancel并传入参数*时触发
onDestroy:null,//在调用destroy方法时触发
onSelect:null,//选择文件后的回调函数,可传入参数file
onQueueComplete:null//队列中的所有文件上传完成后触发
若是想要更改初始化参数,可在jquery.HHuploadify.js中修改,也可以在上述demo中的js中引用HHuploadify的时候修改,例如:
<script>
 $('#upload').HHuploadify({
     auto:true,
     fileTypeExts:'*.jpg;*.png;*.gift;*.doc',//允许上传的文件类型 
     isSingle : true,//上传一张图片图片
     fileSizeLimit:300,//图片最大300KB
     showUploadedSize:true,//实时显示已上传的文件大小,如1M/2M
     method:'post',//发送请求的方式,get或post
     formData: {item_id: <?php echo $item_id;?>},//传递到sub端的参数 
     uploader:'sub/upload_sub.php',
     onUploadComplete:function(file,data) {
         alert('图片上传成功'),
    }

});
</script>

继续阅读HHuploadify(基于Huploadify)的文件上传插件

前端半年水平

一、移动端
移动端dpr适配知识点
移动端性能优化

二、项目流程
团队协作完成流程页面能力
独立完成小型项目能力

三、CSS预处理器
Sass(项目实现统一使用Sass编写样式)
postCSS

四、前端标准/规范
ECMAScript3/5
ECMAScript6

五、编程语言
JavaScript
Node.js

六、包管理器 npm

七、JS框架
Angular
React

八、前端项目构建工具
gulp
grunt
FIS

九、代码组织(模块化)
类库模块化 CommonJS/webpack
业务逻辑模块化 bower
文件加载 Require
模块化预处理器 Browserify

十、软技能
知识管理/总结分享
沟通技巧/团队协作
需求管理/项目管理
交互设计/可用性/可访问性知识

前端半年水平树

关于ip的那些事


编	写:袁	亮
时	间:2014-05-20
说	明:关于ip的那些事

一、ip传递过程
	1、【真实客户端】 ==> [多级代理服务器] ==> [CDN加速] ==> [前端代理nginx|squid] ==> 【apache】==> 【PHP】
	2、中文括号的是必然会经过的,英文括号是可能经过的
	3、标准的ip传递是REMOTE_ADDR和HTTP_X_FORWARDED_FOR,前一个跟当前服务连接的真实ip,后一个是请求到前一个ip之前,经过了哪些代理
	4、REMOTE_ADDR是不可伪造的,HTTP_X_FORWARDED_FOR是可以任意修改的
	5、按标准,每传递到下一层,都会将上一层的实际ip地址加入到HTTP_X_FORWARDED_FOR中,继续传递
	6、对每一层来说,只有上一层的时间地址是可信的(REMOTE_ADDR),HTTP_X_FORWARDED_FOR均有风险
	7、真实情况中,到了cdn或者前端代理之后,ip传递都是可信的(我们自己可控制),之前的都有篡改的危险

二、各服务的真实ip传递情况
	1、CDN 快网的cdn会将用户的实际地址或者代理服务器地址传递到后面的服务中
		$_SERVER["HTTP_USER_IP"]	【不用快网的时候可伪造】
		$_SERVER["HTTP_FW_ADDR"]	【不用快网的时候可伪造】
		测试了一个新的cdn测试,没有传递真实ip过来

	2、nginx代理的情况下,可以使用x_real_ip来获取真实ip(有cdn的时候,该值获取的是cdn的ip地址)
		$_SERVER["HTTP_X_REAL_IP"]	【不用nginx的时候可伪造】

	3、$_SERVER["HTTP_CLIENT_IP"] :代理服务器发送的客户端真实ip【可伪造】

三、现在使用的获取ip函数
	a、如果有HTTP_CLIENT_IP,则该ip为用户ip(可被伪造)
	b、如果有HTTP_X_FORWARDED_FOR,则将HTTP_CLIENT_IP也加入到HTTP_X_FORWARDED_FOR,判断HTTP_X_FORWARDED_FOR中的ip是否是内网的,取第一个非内网的ip为客户端真实ip
	c、经过以上两步还没有取到ip的话,则根据REMOTE_ADDR取用户的ip
	ps:该函数的问题在于,前面两个的ip都是可以被任意伪造改写,从而导致获取不到用户的真实ip情况

四、附:(线上使用的获取ip函数)
function getIp(){//获取IP函数
        $ip = false;
        if(!empty($_SERVER["HTTP_CLIENT_IP"])){
                $ip = $_SERVER["HTTP_CLIENT_IP"];
        }
        if (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
                $ips = explode (", ", $_SERVER['HTTP_X_FORWARDED_FOR']);
                if ($ip) {
                        array_unshift($ips, $ip);
                        $ip = FALSE;
                }
                for ($i = 0; $i < count($ips); $i++) {
                        if (!preg_match("/^(10|172\.16|192\.168)\./", $ips[$i])) { // 判断是否内网的IP
                                $ip = $ips[$i];
                                break;
                        }
                }
        }
        return ($ip ? $ip : $_SERVER['REMOTE_ADDR']);
}



实习生须知

1、记下我手机号 15850657245
2、把你们的手机号发送给我
3、加入我们微信群
   不知道的找我
4、每周必须发周报,周报要求见:http://blog.geekman.vip/archives/59
5、临时请假必须提前通知我,回来补假条,平时请假需要找我说明,并填写请假单找我签字