ComicEnhancerPro 系列教程十九:用JpegQuality看JPG文件的压缩参数
作者:马健
邮箱:stronghorse_mj@hotmail.com
主页:http://www.comicer.com/stronghorse/
发布:2017.07.23
教程十九:用JpegQuality看JPG文件的压缩参数
事先声明:
- 严格说来这篇教程是讲JpegQuality的,其实与CEP本身关系不大,但因为我自己经常从CEP启动JpegQuality查看JPG压缩参数,
我觉得其他人可能也有类似的需求,所以就在CEP系列教程里加了这么一篇,并不是有意给JpegQuality打广告。 - JpegQuality显示的信息比较简略,如果想看JPG文件的详细信息,比如说EXIF的具体内容,请使用JPEGsnoop,JpegQuality可以说是它的简化版。
- 本文内容是我的一家之言,部分内容可能令人反感,因此技术考据癖、技术抬杠癖敬请退散,不必往下看了,以免浪费你我的时间和口水。
- 本文所有数据只基于我手上所拥有的实际样本,并且没有一个样本是厂家直接提供的。如果有文中提到的厂家对本文内容不满,可以抬头向上看,请用上面的邮箱地址与我联系,并提供相关企业身份证据,我将在第一时间删除相关信息并在本文中做补充说明。
言归正传。在上一篇教程中,我列举了与JPG文件长度、质量有关的压缩参数,包括质量系数(其实是量化表)、色彩缩水系数等。在CEP中转存JPG时,一方面可以自己重新设定JPG的压缩参数,另一方面也可以设置为直接copy源JPG文件的压缩参数,以获得与源JPG文件差不多的文件长度和质量。那么常见的图像处理软件,或图像获取设备(相机、手机)所生成的JPG文件,他们的JPG压缩参数又是怎样的?从中又能看出些什么?
用JpegQuality看JPG的压缩参数其实操作很简单,启动JpegQuality后把要看的JPG文件拖拽过去就行了,或者从CEP里启动,即可看到CEP正在处理的JPG文件的压缩参数。以Photoshop
CC 2015为例,我用同一张图片设置为不同色彩空间、用不同质量系数存为JPG后用JpegQuality显示出来的参数如表1所示。表中数据均用WinCam32从JpegQuality直接复制过来,不存在手工输入错误的问题
,以下各表不再重复说明。
表1 Photoshop CC 2015的JPG压缩参数
| 色彩空间 | 质量 | 色彩空间 | 通道数 | 采样 | 数据精度 | 渐进式 | 优化编码 | 量化表数 | 16位量化表 | 反推质量系数 | 方差 |
| RGB色彩空间 | 0 | YCbCr | 3 | 1x1 2x2 2x2 | 8 | 否 | 是 | 2 | 否 | 46/81 | 20996.66/4238.72 |
| 1 | YCbCr | 3 | 1x1 2x2 2x2 | 8 | 否 | 是 | 2 | 否 | 52/82 | 14797.56/3344.80 | |
| 2 | YCbCr | 3 | 1x1 2x2 2x2 | 8 | 否 | 是 | 2 | 否 | 62/85 | 6735.90/1496.54 | |
| 3 | YCbCr | 3 | 1x1 2x2 2x2 | 8 | 否 | 是 | 2 | 否 | 73/87 | 2366.12/885.74 | |
| 4 | YCbCr | 3 | 1x1 2x2 2x2 | 8 | 否 | 是 | 2 | 否 | 77/88 | 1338.37/510.31 | |
| 5 | YCbCr | 3 | 1x1 2x2 2x2 | 8 | 否 | 是 | 2 | 否 | 82/90 | 671.52/255.96 | |
| 6 | YCbCr | 3 | 1x1 2x2 2x2 | 8 | 否 | 是 | 2 | 否 | 86/91 | 255.23/98.34 | |
| 7 | YCbCr | 3 | 1x1 1x1 1x1 | 8 | 否 | 是 | 2 | 否 | 83/88 | 462.13/592.80 | |
| 8 | YCbCr | 3 | 1x1 1x1 1x1 | 8 | 否 | 是 | 2 | 否 | 88 | 111.68/201.04 | |
| 9 | YCbCr | 3 | 1x1 1x1 1x1 | 8 | 否 | 是 | 2 | 否 | 91 | 31.57/55.24 | |
| 10 | YCbCr | 3 | 1x1 1x1 1x1 | 8 | 否 | 是 | 2 | 否 | 94 | 8.52/8.09 | |
| 11 | YCbCr | 3 | 1x1 1x1 1x1 | 8 | 否 | 是 | 2 | 否 | 97 | 3.47/0.74 | |
| 12 | YCbCr | 3 | 1x1 1x1 1x1 | 8 | 否 | 是 | 2 | 否 | 98 | 4.81/0.50 | |
| CMYK色彩空间 | 0 | YCCK | 4 | 1x1 2x2 2x2 1x1 | 8 | 否 | 是 | 2 | 否 | 46/81 | 20996.66/4238.72 |
| 1 | YCCK | 4 | 1x1 2x2 2x2 1x1 | 8 | 否 | 是 | 2 | 否 | 52/82 | 14797.56/3344.80 | |
| 2 | YCCK | 4 | 1x1 2x2 2x2 1x1 | 8 | 否 | 是 | 2 | 否 | 62/85 | 6735.90/1496.54 | |
| 3 | YCCK | 4 | 1x1 2x2 2x2 1x1 | 8 | 否 | 是 | 2 | 否 | 73/87 | 2366.12/885.74 | |
| 4 | YCCK | 4 | 1x1 2x2 2x2 1x1 | 8 | 否 | 是 | 2 | 否 | 77/88 | 1338.37/510.31 | |
| 5 | YCCK | 4 | 1x1 2x2 2x2 1x1 | 8 | 否 | 是 | 2 | 否 | 82/90 | 671.52/255.96 | |
| 6 | YCCK | 4 | 1x1 2x2 2x2 1x1 | 8 | 否 | 是 | 2 | 否 | 86/91 | 255.23/98.34 | |
| 7 | YCCK | 4 | 1x1 1x1 1x1 1x1 | 8 | 否 | 是 | 2 | 否 | 83/88 | 462.13/592.80 | |
| 8 | YCCK | 4 | 1x1 1x1 1x1 1x1 | 8 | 否 | 是 | 2 | 否 | 88 | 111.68/201.04 | |
| 9 | YCCK | 4 | 1x1 1x1 1x1 1x1 | 8 | 否 | 是 | 2 | 否 | 91 | 31.57/55.24 | |
| 10 | YCCK | 4 | 1x1 1x1 1x1 1x1 | 8 | 否 | 是 | 2 | 否 | 94 | 8.52/8.09 | |
| 11 | YCCK | 4 | 1x1 1x1 1x1 1x1 | 8 | 否 | 是 | 2 | 否 | 97 | 3.47/0.74 | |
| 12 | YCCK | 4 | 1x1 1x1 1x1 1x1 | 8 | 否 | 是 | 2 | 否 | 98 | 4.81/0.50 | |
| 灰度 | 0 | 灰度 | 1 | 1x1 | 8 | 否 | 是 | 1 | 否 | 46 | 20996.66 |
| 1 | 灰度 | 1 | 1x1 | 8 | 否 | 是 | 1 | 否 | 52 | 14797.56 | |
| 2 | 灰度 | 1 | 1x1 | 8 | 否 | 是 | 1 | 否 | 62 | 6735.9 | |
| 3 | 灰度 | 1 | 1x1 | 8 | 否 | 是 | 1 | 否 | 73 | 2366.12 | |
| 4 | 灰度 | 1 | 1x1 | 8 | 否 | 是 | 1 | 否 | 77 | 1338.37 | |
| 5 | 灰度 | 1 | 1x1 | 8 | 否 | 是 | 1 | 否 | 82 | 671.52 | |
| 6 | 灰度 | 1 | 1x1 | 8 | 否 | 是 | 1 | 否 | 86 | 255.23 | |
| 7 | 灰度 | 1 | 1x1 | 8 | 否 | 是 | 1 | 否 | 83 | 462.13 | |
| 8 | 灰度 | 1 | 1x1 | 8 | 否 | 是 | 1 | 否 | 88 | 111.68 | |
| 9 | 灰度 | 1 | 1x1 | 8 | 否 | 是 | 1 | 否 | 91 | 31.57 | |
| 10 | 灰度 | 1 | 1x1 | 8 | 否 | 是 | 1 | 否 | 94 | 8.52 | |
| 11 | 灰度 | 1 | 1x1 | 8 | 否 | 是 | 1 | 否 | 97 | 3.47 | |
| 12 | 灰度 | 1 | 1x1 | 8 | 否 | 是 | 1 | 否 | 98 | 4.81 |
我从表1看出来的东西:
- 我终于明白以前我一直觉得很古怪的YCCK色彩空间是怎么来的了,原来是Adobe给自家在JPEG标准里留的一块自留地。印刷行业是Adobe的传统大客户源,而印刷行业的传统惯用色彩空间是CMYK。与RGB类似,CMYK的4个通道也是平等的,并且把色度与亮度混在一起,
所以如果想专门针对色度进行缩水以增加压缩比,就只能把CMYK转换成YCCK,然后针对CC色度分量进行缩水。 - 色彩就是PS的生命与价值所在,所以PS在存储彩色JPG文件时,只要质量系数不低于7,就不会对色度信息缩水,即“采样”栏显示的都是1x1。而当用户指定了7以下的质量系数时,显然说明用户已经在不顾一切地追求压缩比了,相比之下质量神马的都是浮云,所以色度信息就纵、横各缩水一半,只保留1/4的色度信息,即“采样”栏显示的都是2x2。看到这里,您是不是知道平时用PS的时候应该如何选择质量系数了?
- JpegQuality中显示的质量系数是按照IJG的算法反推的,方差反映的是反推出的量化表与JPG中实际所使用的量化表之间的差距。从表1中“方差”列看,质量系数10~12时方差不大,可以认为与IJG的量化表基本相当;质量系数小于等于9时方差明显增大,可以认为PS采用的量化表与IJG所采用的差距较大
。 - 实际对比JpegQuality中左右两侧显示的量化表,质量系数10~12时差异确实不大;7~9时PS逐渐增加量化表左上角的值,右下角保持不变,因此与IJG量化表的差异逐渐拉开;到6时量化表左上角的值比7降了一点,然后随着质量系数的降低左上角值逐渐增加,到5时左上角已经追上右下角,从4开始反超,到0时左上角与右下角差不多是3倍的差距。
- PS的量化表在中、低质量时右下角始终保持不变,只增加左上角的值,估计是与PS日常处理的图像多半是照片有关:一堆“数毛党”在盯着细节部分,所以PS不太好对高频分量下手。
- 表1中的“渐进式”选项都是“否”,其实只是因为我在PS中存储JPG时“格式选项”选的都是“基线(标准)”,如果选择“连续”就是渐进式了。但即使选择“基线(标准)”,表1中“优化编码”仍然显示“是”,说明PS所使用的缺省Huffman编码表与IJG的不同,估计是经过Adobe自己的优化,以追求更小的文件长度。
在看过软件厂商的JPG参数后,再来看看相机厂家的参数吧,毕竟现在用CEP处理的源文件很多都是用相机拍摄的。我手上现在有佳能A570、G16和尼康D750三款相机,档次分别是入门DC、旗舰DC、中档全画幅单反。用这三款相机内设的不同质量系数进行拍照,直接机内输出JPG,用JpegQuality显示的JPG压缩参数如表2所示。
补充说明:
- 目前影响手机、相机成像质量的因素主要包括物理光学组件(镜头、光圈等)、光电转换器(CCD/CMOS)、ISP(Image Signal Processor,图像信号处理器)三部分。
- JPG压缩系数只是ISP中的一组小小参数,对最终JPG文件质量的影响究竟具体有多大,至少我还说不出一个具体的数字,所以下面只是我的一些定性分析,而且充满个人的主观色彩,不喜勿看。
表2 相机直出的JPG压缩参数
| 厂家 | 型号 | 质量 | 像素(千万) | 色彩空间 | 通道数 | 采样 | 数据精度 | 渐进式 | 优化编码 | 量化表数 | 16位量化表 | 反推质量系数 | 方差 |
| 佳能 | A570 | 超精细 | 0.7 | YCbCr | 3 | 1x1 2x1 2x1 | 8 | 否 | 否 | 2 | 否 | 97 | 1.65/5.29 |
| 精细 | YCbCr | 3 | 1x1 2x1 2x1 | 8 | 否 | 否 | 2 | 否 | 93/88 | 5.28/21.42 | |||
| 标准 | YCbCr | 3 | 1x1 2x1 2x1 | 8 | 否 | 否 | 2 | 否 | 72 | 2.71/648.98 | |||
| G16 | 超精细 | 1.2 | YCbCr | 3 | 1x1 2x1 2x1 | 8 | 否 | 否 | 2 | 否 | 97 | 1.65/5.29 | |
| 精细 | YCbCr | 3 | 1x1 2x1 2x1 | 8 | 否 | 否 | 2 | 否 | 93/88 | 5.28/21.42 | |||
| 尼康 | D750 | FINE | 2.4 | YCbCr | 3 | 1x1 2x1 2x1 | 8 | 否 | 否 | 2 | 否 | 98 | 5.50/0.89 |
| NOMAL | YCbCr | 3 | 1x1 2x1 2x1 | 8 | 否 | 否 | 2 | 否 | 97 | 1.22/0.18 | |||
| BASIC | YCbCr | 3 | 1x1 2x1 2x1 | 8 | 否 | 否 | 2 | 否 | 91 | 3.28/2.52 |
我对表2的解读:
- 这三款相机不约而同的选择了2x1的色度采样系数,即在色度方面沿宽度方向缩水了一半的信息,高度方向没有缩水。经常听到有人抱怨用RAW格式看照片看得好好的,但输出成JPG就总觉得颜色差了点,估计色度方面的缩水是一个重要原因——即使只是沿单方向缩水,但毕竟也是缩了。
- 佳能A570的主控芯片是Digital 4,G16的是Digital
6,从版本数字上看二者差了两代,但二者的压缩参数完全一样,看来佳能对自己的参数还是很有自信的,没打算做什么修改升级。 - 对比尼康、佳能在最高质量时的量化表,尼康的数值明显比佳能更小,可以保留更多的细节。
手机方面我自己到现在为止也只用过一款智能手机,就是拍照效果把我恶心得一提起来就想吐的红米2(采用O-fi欧菲光的解决方案,估计国产的千元机都是这个水平)。所以为了尽量广泛的搜集数据,我就在readfree论坛上搞了一次“手机拍报纸”活动,用论坛币换原片,搜集到的部分手机、PAD的JPG压缩参数见表3。
补充说明:手机厂商现在做广告都以“美美的人像”为号召,而我之所以会以“手机拍报纸”为目标搞活动,是因为我认为现在各种美颜软件实在太过泛滥,用人像根本看不出原始成像质量的好坏,而用“拍报纸”为手段检验相机的对焦精度、成像锐度等,尤其是手机历来短板的边缘成像质量,则是摄影界祖祖辈辈、代代相传的不二法宝,而且与我主要想用手机拍纸质资料的需求相吻合。但出乎我意料的是由于论坛上各位的拍摄水平不一,拍报纸对拍摄水平的要求又比拍
人像更高,所以搜集到的照片不一定真实地体现了手机的成像质量,说不定同样的手机、同样的报纸换个人拍摄效果会更好或更差,不过如果只是想看看JPG压缩参数还是够了。再重申一次:JPG压缩系数只是ISP中的一组小小参数,对最终JPG的质量究竟有多大影响,我也没法具体量化。以红米2为例,尽管质量系数高高在上,但最终拍出来的照片惨不忍睹,只能说与之相配的其它部分实在太便宜了。
表3 我收集到的部分手机、PAD的JPG压缩参数
| 厂家 | 型号 | 像素(千万) | 色彩空间 | 通道数 | 采样 | 数据精度 | 渐进式 | 优化编码 | 量化表数 | 16位量化表 | 反推质量系数 | 方差 |
| 小米 | 红米2 | 0.8 | YCbCr | 3 | 1x1 2x2 2x2 | 8 | 否 | 否 | 2 | 否 | 97 | 1.09/0.24 |
| 红米3 | 1.3 | YCbCr | 3 | 1x1 2x2 2x2 | 8 | 否 | 否 | 2 | 否 | 97 | 1.09/0.24 | |
| MiPad | 0.8 | YCbCr | 3 | 1x1 2x2 2x2 | 8 | 否 | 否 | 2 | 否 | 87 | 1.28/0.38 | |
| Note | 1.3 | YCbCr | 3 | 1x1 2x2 2x2 | 8 | 否 | 否 | 2 | 否 | 97 | 3.21/0.24 | |
| 小米2 | 0.8 | YCbCr | 3 | 1x1 2x2 2x2 | 8 | 否 | 否 | 2 | 否 | 90 | 1.14/0.34 | |
| 小米4C | 1.3 | YCbCr | 3 | 1x1 2x2 2x2 | 8 | 否 | 否 | 2 | 否 | 97 | 1.09/0.24 | |
| 小米5s+ | 1.3 | YCbCr | 3 | 1x1 2x2 2x2 | 8 | 否 | 否 | 2 | 否 | 97 | 1.09/0.24 | |
| 华为 | P10/P10+ | 1.2 | YCbCr | 3 | 1x1 2x2 2x2 | 8 | 否 | 否 | 2 | 否 | 94 | 62.59/57.16 |
| P7 | 1.3 | YCbCr | 3 | 1x1 2x2 2x2 | 8 | 否 | 否 | 2 | 否 | 97 | 0.87/0.28 | |
| Mate2 | 1.3 | YCbCr | 3 | 1x1 2x2 2x2 | 8 | 否 | 否 | 2 | 否 | 97 | 0.87/0.28 | |
| Mate8 | 1.6 | YCbCr | 3 | 1x1 2x2 2x2 | 8 | 否 | 否 | 2 | 否 | 95 | 41.10/37.48 | |
| Mate9 | 1.2 | YCbCr | 3 | 1x1 2x2 2x2 | 8 | 否 | 否 | 2 | 否 | 94 | 62.59/57.16 | |
| 荣耀畅玩5x | 1.3 | YCbCr | 3 | 1x1 2x2 2x2 | 8 | 否 | 否 | 2 | 否 | 95 | 1.25/0.26 | |
| 荣耀6+ | 1.3 | YCbCr | 3 | 1x1 2x1 2x1 | 8 | 否 | 否 | 2 | 否 | 94 | 62.59/57.16 | |
| 荣耀7i | 1.3 | YCbCr | 3 | 1x1 2x2 2x2 | 8 | 否 | 否 | 2 | 否 | 90 | 1.14/0.34 | |
| 荣耀7 | 2 | YCbCr | 3 | 1x1 2x2 2x2 | 8 | 否 | 否 | 2 | 否 | 94 | 62.59/57.16 | |
| 荣耀8 | 1.6 | YCbCr | 3 | 1x1 2x2 2x2 | 8 | 否 | 否 | 2 | 否 | 95 | 1.25/0.26 | |
| 荣耀 NOTE8 | 1.3 | YCbCr | 3 | 1x1 2x2 2x2 | 8 | 否 | 否 | 2 | 否 | 95 | 41.10/37.48 | |
| 苹果 | IPAD mini 4 | 0.8 | YCbCr | 3 | 1x1 2x2 2x2 | 8 | 否 | 否 | 2 | 否 | 95 | 5.64/0.59 |
| IP5s+ | 0.8 | YCbCr | 3 | 1x1 2x2 2x2 | 8 | 否 | 否 | 2 | 否 | 96 | 1.49 | |
| IP6s | 1.2 | YCbCr | 3 | 1x1 2x2 2x2 | 8 | 否 | 否 | 2 | 否 | 93 | 12.88/0.19 | |
| IP6s+ | 1.2 | YCbCr | 3 | 1x1 2x2 2x2 | 8 | 否 | 否 | 2 | 否 | 93 | 12.88/0.19 | |
| IP7 | 1.2 | YCbCr | 3 | 1x1 2x2 2x2 | 8 | 否 | 否 | 2 | 否 | 93 | 12.88/0.19 | |
| LG | D315 | 0.5 | YCbCr | 3 | 1x1 2x2 2x2 | 8 | 否 | 否 | 2 | 否 | 95 | 1.25/0.26 |
| F180 | 1.3 | YCbCr | 3 | 1x1 2x2 2x2 | 8 | 否 | 否 | 2 | 否 | 95 | 1.25/0.26 | |
| Nokia | Lumia 1020 | 3.3 | YCbCr | 3 | 1x1 2x2 2x2 | 8 | 否 | 否 | 2 | 否 | 95 | 1.25/0.26 |
| 魅族 | 魅蓝Note4 | 1.3 | YCbCr | 3 | 1x1 2x1 2x1 | 8 | 否 | 否 | 2 | 否 | 96 | 3.19/1.17 |
| mx pro5 | YCbCr | 3 | 1x1 2x1 2x1 | 8 | 否 | 否 | 2 | 否 | 95 | 1.25/0.26 | ||
| 三星 | S2 | 0.8 | YCbCr | 3 | 1x1 2x2 2x2 | 8 | 否 | 否 | 2 | 否 | 95 | 1.25/0.26 |
| S5 | 1.2 | YCbCr | 3 | 1x1 2x2 2x2 | 8 | 否 | 否 | 2 | 否 | 96 | 0.69/0.33 | |
| S7 | 1.2 | YCbCr | 3 | 1x1 2x1 2x1 | 8 | 否 | 否 | 2 | 否 | 96 | 0.69/0.33 | |
| GT-N7105 | 0.8 | YCbCr | 3 | 1x1 2x1 2x1 | 8 | 否 | 否 | 2 | 否 | 96 | 0.69/0.33 | |
| note 3 | 1.3 | YCbCr | 3 | 1x1 2x2 2x2 | 8 | 否 | 否 | 2 | 否 | 96 | 0.69/0.33 | |
| OPPO | R2017 | 0.5 | YCbCr | 3 | 1x1 2x2 2x2 | 8 | 否 | 否 | 2 | 否 | 95 | 1.25/0.26 |
| Kindle | Fire HDX 8.9 | 0.8 | YCbCr | 3 | 1x1 2x2 2x2 | 8 | 否 | 否 | 2 | 否 | 95 | 1.25/0.26 |
| 酷派 | 9976a | 1.3 | YCbCr | 3 | 1x1 2x1 2x1 | 8 | 否 | 否 | 2 | 否 | 80 | 20.03/4.14 |
| vivo | xshot X710L | 1.3 | YCbCr | 3 | 1x1 2x2 2x2 | 8 | 否 | 否 | 2 | 否 | 95 | 1.25/0.26 |
我对表3数据的解读:
- 除三星、魅族、酷派外,其它手机基本上都对色度信息进行了双方向缩水。所以我每次见到那些把手机和单反相提并论的广告就想笑:请把缩水掉的色彩信息给我还回来先!咱不说
无损的RAW格式,就算只沿单方向缩水也比沿双方向缩水强不是? - 华为、苹果的方差比较大,说明所用量化表与IJG的差异较大,即在自身的ISP中进行了定制。以“性价比”为号召的手机一般方差都比价小
(实际与IJG的量化表比较,那差异更像是计算量化表值时的浮点数舍入误差),可能是使用了公版ISP。 - 不同厂家、不同型号的手机具有相同的“指纹”(缩水系数、量化表),说明他们可能使用了相同的ISP,这也是降低成本的一个办法。
ComicEnhancerPro 系列教程十九:用JpegQuality看JPG文件的压缩参数的更多相关文章
- ComicEnhancerPro 系列教程十八:JPG文件长度与质量
作者:马健邮箱:stronghorse_mj@hotmail.com 主页:http://www.comicer.com/stronghorse/ 发布:2017.07.23 教程十八:JPG文件长度 ...
- Spring Boot2 系列教程(十九)Spring Boot 整合 JdbcTemplate
在 Java 领域,数据持久化有几个常见的方案,有 Spring 自带的 JdbcTemplate .有 MyBatis,还有 JPA,在这些方案中,最简单的就是 Spring 自带的 JdbcTem ...
- ComicEnhancerPro 系列教程二十:用“文件比较”看有损、无损
作者:马健邮箱:stronghorse_mj@hotmail.com 主页:http://www.comicer.com/stronghorse/ 发布:2017.07.23 教程二十:用“文件比较” ...
- CRL快速开发框架系列教程十(导出对象结构)
本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...
- Web 开发人员和设计师必读文章推荐【系列二十九】
<Web 前端开发精华文章推荐>2014年第8期(总第29期)和大家见面了.梦想天空博客关注 前端开发 技术,分享各类能够提升网站用户体验的优秀 jQuery 插件,展示前沿的 HTML5 ...
- CRL快速开发框架系列教程十二(MongoDB支持)
本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...
- Unity3D脚本中文系列教程(十六)
Unity3D脚本中文系列教程(十五) ◆ function OnPostprocessAudio (clip:AudioClip):void 描述:◆ function OnPostprocess ...
- Unity3D脚本中文系列教程(十五)
http://dong2008hong.blog.163.com/blog/static/4696882720140322449780/ Unity3D脚本中文系列教程(十四) ◆ LightRend ...
- webpack4 系列教程(十五):开发模式与webpack-dev-server
作者按:因为教程所示图片使用的是 github 仓库图片,网速过慢的朋友请移步<webpack4 系列教程(十五):开发模式与 webpack-dev-server>原文地址.更欢迎来我的 ...
随机推荐
- protobuff java 包编译(Windows)
google probuffer的强大,很多人都知道,但是官方的source 里是没有jar下载,唯有源码下载,故需自己编译得到jar. java 的jar的编译采用maven 编译的,因此需先构建m ...
- 小程序中WXSS样式控制
WXSS WXSS(WeiXin Style Sheets)是一套样式语言,用于描述 WXML 的组件样式. WXSS 用来决定 WXML 的组件应该怎么显示. 为了适应广大的前端开发者,WXSS 具 ...
- linux命令echo和cat比较
当前主要比较echo 和 cat的重定向功能 1.echo 1 > /proc/xxx 解析: echo 进行重定向的时候,仅仅是将字符"1" 输出到 /proc/xxx文件 ...
- storm集群配置以及java编写拓扑例子
storm集群配置 安装 修改配置文件 使用java编写拓扑 storm集群配置 storm配置相当简单 安装 tar -zxvf apache-storm-1.2.2.tar.gz rm apach ...
- 微信小程序API登录凭证(code),获得的用户登录态拥有一定的时效性
调用接口获取登录凭证(code)进而换取用户登录态信息,包括用户的唯一标识(openid) 及本次登录的 会话密钥(session_key).用户数据的加解密通讯需要依赖会话密钥完成. OBJECT参 ...
- JAVA,模拟HTTP登录(略有修改) ----转载自http://zhoujingxian.iteye.com/blog/439738
/* * 网上的一个模拟登录或者模拟注册程序 * 2013-8-5 */ package Socket_Http; import java.io.BufferedReader; import java ...
- java 高并发解决方案
对于我们开发的网站,如果网站的访问量非常大的话,那么我们就需要考虑相关的并发访问问题了.而并发问题是绝大部分的程序员头疼的问题, 但话又说回来了,既然逃避不掉,那我们就坦然面对吧~今天就让我们一起来研 ...
- 关于苹果safari浏览器登陆时Cookie无法保存的问题
前段时间,修改了登录处理后给到客户端浏览器Cookie的内容,新增了一个姓名的value,发现safari不能保存该Cookie的内容,同时Chrome.firefox.ie等浏览器都能正常的访问,直 ...
- 优于jdbc的mybatis框架入门
1.什么是mybatis? MyBatis 是支持普通 SQL 查询,存储过程和高级映射的优秀持久层框架. MyBatis 消除了几乎所有的 JDBC 代码和参数的手工设置以及对结果集的检索. MyB ...
- POJ1012(约瑟夫问题)
1.题目链接地址 http://poj.org/problem?id=1012 2k个人,前面k个是好人,后面k个是坏人,找一个数t,每数到第t时就去掉,使所有坏人在好人之前被杀掉. 思路:约瑟夫公式 ...