ofly 发表的文章

Mac Adobe CS6 完美破解激活

最近一直在折腾 Mac,就连在 Windows 下闭着眼就能安装的 Adobe 系列,都显得有些陌生。尤其是破解激活的过程。虽然也有 Windows 下最常见的 amtlib 替换法,但好友 Digidea 告诉我那样其实不太安全。于是索性混了几天各种论坛,学会了一种通过序列号和激活码来激活 Adobe CS6 系列的方式。下面就以在 Mac 下安装 Photoshop CS6 为例,把过程详细的写下来,以备后用。

准备工作:

1,各种安装包,不要大师版,而是独立安装包。最好是官方的,网上很多,搜一下;
2,准备独立安装包的序列号(cd-key),在文章最后我会提供;
3,下载 Adobe CS6 大师版注册机,等会用它来生成激活码(点击下载,含 Windows 版和 Mac 版);
4,如果是 Mac 下建议再准备一个方便修改 hosts 的工具“Hosts 1.1”(点击下载);
5,断网。

第一步:检查现有的 hosts 文件:

如果你之前干过屏蔽 Adobe 的坏事,那么现在检查一下 hosts 文件中是否包含以下两行,有的话先注释或删掉,因为它会导致你等会输入 CD-KEY 的时候总是无法通过:

127.0.0.1 lmlicenses.wip4.adobe.com
127.0.0.1 lm.licenses.adobe.com

第二步:安装 Adobe Photoshop CS6:

启动 Adobe Photoshop CS6 的独立安装程序,选择安装 Adobe Photoshop CS6,如图:

安装过程中选择“安装(我有序列号)”,然后输入序列号,如图:

点击下一步,然后会提示[请连接到 Internet,然后重试],这时要先点击“稍后连接”。然后下一步,直到安装完成;

第三步:激活 Adobe Photoshop CS6:

打开已经安装完成的 Adobe Photoshop CS6,切记保持断网。会提示[序列号验证]的时候点击“连接 Internet 时是否出现问题?”,如图:

然后根据提示选择“脱机激活”,接着选择“生成请求代码”,再来到下一步,会给出一段请求代码,如图:

把请求代码复制起来,不要关掉。然后打开刚刚准备的注册机,在 Serial 填入刚才安装 Photoshop 时填写的 cd-key,并且在 Request Code 填入刚才复制的请求代码。点击“Gen. activation”生产一个 Activation code,如图:

把得到 Activation code 复制起来,回到 Adobe 激活界面,把算出来的 Activation code 粘贴到[响应代码]后点击“激活”,接着就会提示“脱机激活完成”并告知你已成功激活!至此,我们已经成功激活 Photoshop CS6 了!

第四步:修改 hosts 文件:

为了避免 Adobe 过后会检查,我们还要再修改 hosts 文件,加入下面四条纪录:

127.0.0.1 lmlicenses.wip4.adobe.com
127.0.0.1 lm.licenses.adobe.com
127.0.0.1 activate.adobe.com
127.0.0.1 practivate.adobe.com

最后:检查更新:

现在,让我们很低调很低调的检查一下更新,会发现已经可以更新了,如图:

附:Adobe CS6 独立安装版本序列号(CD-KEY):

Adobe Photoshop CS6: 1330-1887-7489-4700-7429-5959 或 1330-1071-1536-4954-3005-2944;
Adobe Illustrator CS6: 1034-1199-6358-6414-2734-2457;
Adobe Fireworks CS6: 1193-1629-6196-3576-7233-2107;
Adobe Dreamweaver CS6: 1192-1439-5431-5970-9189-4949;
Adobe InDesign CS6: 1037-1152-9294-1135-7907-7102;
Adobe InCopy CS6: 1036-1125-4514-7088-7717-8283;
Adobe Flash Professional: 1302-1609-4472-2505-4933-2084;
Adobe Audition CS6: 1137-1633-8198-8315-0942-5899;
Adobe AfterEffects CS6: 1023-1897-8153-1746-6817-1885;
Adobe PremierePro CS6: 1132-1248-3910-1856-5842-0927;

最后,各位亲们,要低调哦~ 谢谢捧场!

php 汉字 机内码

php 函数
pack 将编码转化为汉字
unpack将汉字转化为编码

» 阅读全文

用php读取汉字点阵数据的方法

下面先普及一下基本知识:

    什么是区位码?

    国标GB2312规定,所有的国标汉字与符号组成一个94×94的矩阵.在此方阵中,每一行称为一个“区”,每一列称为一个“位”,因此,这个方阵实际上组成了一个有94个区(区号分别为0 1到94)、每个区内有94个位(位号分别为01到94)的汉字字符集.一个汉字所在的区号和位号简单地组合在一起就构成了该汉字的“区位码”.在汉字的区位码中,高两位为区号,低两位为位号.由此可见,区位码与汉字或符号之间是一一对应的.

    什么是内码?

    汉字的内码是指在计算机中表示汉字的编码.机内码与区位码稍有区别.为什么不直接用区位码作为计算机内的编码呢? 这是因为汉字的区码和位码的范围都在1到94内, 如果直接用区位码作机内码, 就会与基本ASCII码冲突. 汉字的内码通常与所使用的计算机系统有关.目前,对于国内大多数的计算机系统,一个汉字的内码占两个字节,分别称为高位字节与低位字节,且这两位字节与区位码的关系如下: 内码高位=区码+A0H(H表示十六进制) 内码低位=位码+A0H 例如,汉字“啊”的区位码为“1601″,区码和位码分别用十六进制表示即为”1001H“,则它的内码为”B0A1H“.其中B0H为内码的高位字节,A1H为内码的低位字节.

    简体中文国标字库(1981年订,中国大陆).7445个字符,其中汉字6773个,包括一级汉字3755个,二级汉字3008个.采用2字节(16位二进制)编码.

    PHP代码:返回由0和1组成的字符串.

    <?PHP

    $str = ”php自学网“ ;

    $font_file_name = ”simsun12.fon“ ; // 点阵字库文件名

    $font_width = 12 ; //字宽度

    $font_height = 12 ; // 单字高度

    $start_offset = 0 ; // 偏移

    $fp = fopen ( $font_file_name , ”rb“ );

    $offset_size = $font_width * $font_height / 8 ;

    $string_size = $font_width * $font_height ;

    $dot_string = ”“ ;

    for ( $i = 0 ; $i < strlen ( $str ); $i ++){

    if( ord ( $str { $i }) > 160 ){

    // 先求区位码,然后再计算其在区位码二维表中的位置,进而得出此字符在文件中的偏移

    $offset = (( ord ( $str { $i }) - 0xa1 ) * 94 + ord ( $str { $i + 1 }) - 0xa1 ) * $offset_size ;

    $i ++;

    }else{

    $offset = ( ord ( $str { $i }) + 156 - 1 ) * $offset_size ;

    }

    // 读取其点阵数据

    fseek ( $fp , $start_offset + $offset , SEEK_SET );

    $bindot = fread ( $fp , $offset_size );

    for ( $j = 0 ; $j < $offset_size ; $j ++){

    // 将二进制点阵数据转化为字符串

    $dot_string .= sprintf ( ”%08b“ , ord ( $bindot { $j }));

    }

    }

    fclose ( $fp );

    echo $dot_string ;

    ?>

    其中包括两个点阵字体文件:一个为16×16的chs16.fon,另一个为12×12的simsun12.fon,偏移均为零.

php获取照片exif信息的函数

   /**
  * 获取图象信息的函数
  *
  * 一个全面获取图象信息的函数
  *
  * @access public
  * @param string $img 图片路径
  * @return array
  */
  function GetImageInfoVal($ImageInfo,$val_arr) {
  $InfoVal = "未知";
  foreach($val_arr as $name=>$val) {
  if ($name==$ImageInfo) {
  $InfoVal = &$val;
  break;
  }
  }
  return $InfoVal;
  }
  function GetImageInfo($img) {
  
  
  
  $imgtype = array("", "GIF", "JPG", "PNG", "SWF", "PSD", "BMP", "TIFF(intel byte order)", "TIFF(motorola byte order)", "JPC", "JP2", "JPX", "JB2", "SWC", "IFF", "WBMP", "XBM");
  $Orientation = array("", "top left side", "top right side", "bottom right side", "bottom left side", "left side top", "right side top", "right side bottom", "left side bottom");
  $ResolutionUnit = array("", "", "英寸", "厘米");
  $YCbCrPositioning = array("", "the center of pixel array", "the datum point");
  $ExposureProgram = array("未定义", "手动", "标准程序", "光圈先决", "快门先决", "景深先决", "运动模式", "肖像模式", "风景模式");
  $MeteringMode_arr = array(
  "0" => "未知",
  "1" => "平均",
  "2" => "中央重点平均测光",
  "3" => "点测",
  "4" => "分区",
  "5" => "评估",
  "6" => "局部",
  "255" => "其他"
  );
  $Lightsource_arr = array(
  "0" => "未知",
  "1" => "日光",
  "2" => "荧光灯",
  "3" => "钨丝灯",
  "10" => "闪光灯",
  "17" => "标准灯光A",
  "18" => "标准灯光B",
  "19" => "标准灯光C",
  "20" => "D55",
  "21" => "D65",
  "22" => "D75",
  "255" => "其他"
  );
  $Flash_arr = array(
  "0" => "flash did not fire",
  "1" => "flash fired",
  "5" => "flash fired but strobe return light not detected",
  "7" => "flash fired and strobe return light detected",
  );
  
  $exif = exif_read_data ($img,"IFD0");
  if ($exif===false) {
  $new_img_info = array ("文件信息" => "没有图片EXIF信息");
  }
  else
  {
  $exif = exif_read_data ($img,0,true);
  $new_img_info = array (
  "文件信息" => "-----------------------------",
  "文件名" => $exif['FILE']['FileName'],
  "文件类型" => $imgtype[$exif['FILE']['FileType']],
  "文件格式" => $exif['FILE']['MimeType'],
  "文件大小" => $exif['FILE']['FileSize'],
  "时间戳" => date("Y-m-d H:i:s",$exif['FILE']['FileDateTime']),
  "图像信息" => "-----------------------------",
  "图片说明" => $exif['IFD0']['ImageDescription'],
  "制造商" => $exif['IFD0']['Make'],
  "型号" => $exif['IFD0']['Model'],
  "方向" => $Orientation[$exif['IFD0']['Orientation']],
  "水平分辨率" => $exif['IFD0']['XResolution'].$ResolutionUnit[$exif['IFD0']['ResolutionUnit']],
  "垂直分辨率" => $exif['IFD0']['YResolution'].$ResolutionUnit[$exif['IFD0']['ResolutionUnit']],
  "创建软件" => $exif['IFD0']['Software'],
  "修改时间" => $exif['IFD0']['DateTime'],
  "作者" => $exif['IFD0']['Artist'],
  "YCbCr位置控制" => $YCbCrPositioning[$exif['IFD0']['YCbCrPositioning']],
  "版权" => $exif['IFD0']['Copyright'],
  "摄影版权" => $exif['COMPUTED']['Copyright.Photographer'],
  "编辑版权" => $exif['COMPUTED']['Copyright.Editor'],
  "拍摄信息" => "-----------------------------",
  "Exif版本" => $exif['EXIF']['ExifVersion'],
  "FlashPix版本" => "Ver. ".number_format($exif['EXIF']['FlashPixVersion']/100,2),
  "拍摄时间" => $exif['EXIF']['DateTimeOriginal'],
  "数字化时间" => $exif['EXIF']['DateTimeDigitized'],
  "拍摄分辨率高" => $exif['COMPUTED']['Height'],
  "拍摄分辨率宽" => $exif['COMPUTED']['Width'],
  /*
  The actual aperture value of lens when the image was taken.
  Unit is APEX.
  To convert this value to ordinary F-number(F-stop),
  calculate this value's power of root 2 (=1.4142).
  For example, if the ApertureValue is '5', F-number is pow(1.41425,5) = F5.6.
  */
  "光圈" => $exif['EXIF']['ApertureValue'],
  "快门速度" => $exif['EXIF']['ShutterSpeedValue'],
  "快门光圈" => $exif['COMPUTED']['ApertureFNumber'],
  "最大光圈值" => "F".$exif['EXIF']['MaxApertureValue'],
  "曝光时间" => $exif['EXIF']['ExposureTime'],
  "F-Number" => $exif['EXIF']['FNumber'],
  "测光模式" => GetImageInfoVal($exif['EXIF']['MeteringMode'],$MeteringMode_arr),
  "光源" => GetImageInfoVal($exif['EXIF']['LightSource'], $Lightsource_arr),
  "闪光灯" => GetImageInfoVal($exif['EXIF']['Flash'], $Flash_arr),
  "曝光模式" => ($exif['EXIF']['ExposureMode']==1?"手动":"自动"),
  "白平衡" => ($exif['EXIF']['WhiteBalance']==1?"手动":"自动"),
  "曝光程序" => $ExposureProgram[$exif['EXIF']['ExposureProgram']],
  /*
  Brightness of taken subject, unit is APEX. To calculate Exposure(Ev) from BrigtnessValue(Bv), you must add SensitivityValue(Sv).
  Ev=Bv+Sv Sv=log((ISOSpeedRating/3.125),2)
  ISO100:Sv=5, ISO200:Sv=6, ISO400:Sv=7, ISO125:Sv=5.32.
  */
  "曝光补偿" => $exif['EXIF']['ExposureBiasValue']."EV",
  "ISO感光度" => $exif['EXIF']['ISOSpeedRatings'],
  "分量配置" => (bin2hex($exif['EXIF']['ComponentsConfiguration'])=="01020300"?"YCbCr":"RGB"),//'0x04,0x05,0x06,0x00'="RGB" '0x01,0x02,0x03,0x00'="YCbCr"
  "图像压缩率" => $exif['EXIF']['CompressedBitsPerPixel']."Bits/Pixel",
  "对焦距离" => $exif['COMPUTED']['FocusDistance']."m",
  "焦距" => $exif['EXIF']['FocalLength']."mm",
  "等价35mm焦距" => $exif['EXIF']['FocalLengthIn35mmFilm']."mm",
  /*
  Stores user comment. This tag allows to use two-byte character code or unicode. First 8 bytes describe the character code. 'JIS' is a Japanese character code (known as Kanji).
  '0x41,0x53,0x43,0x49,0x49,0x00,0x00,0x00':ASCII
  '0x4a,0x49,0x53,0x00,0x00,0x00,0x00,0x00':JIS
  '0x55,0x4e,0x49,0x43,0x4f,0x44,0x45,0x00':Unicode
  '0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00':Undefined
  */
  "用户注释编码" => $exif['COMPUTED']['UserCommentEncoding'],
  "用户注释" => $exif['COMPUTED']['UserComment'],
  "色彩空间" => ($exif['EXIF']['ColorSpace']==1?"sRGB":"Uncalibrated"),
  "Exif图像宽度" => $exif['EXIF']['ExifImageLength'],
  "Exif图像高度" => $exif['EXIF']['ExifImageWidth'],
  "文件来源" => (bin2hex($exif['EXIF']['FileSource'])==0x03?"digital still camera":"unknown"),
  "场景类型" => (bin2hex($exif['EXIF']['SceneType'])==0x01?"A directly photographed image":"unknown"),
  "缩略图文件格式" => $exif['COMPUTED']['Thumbnail.FileType'],
  "缩略图Mime格式" => $exif['COMPUTED']['Thumbnail.MimeType']
  );
  }
  return $new_img_info;
  }
  
  $innerhtml = "";
  $exif = GetImageInfo($_GET['img']);
  $innerhtml .= "";
  
  foreach($exif as $name=>$val) {
  $innerhtml .= "";
  }
  
  $innerhtml .= "
";
  if ($_GET['img']) {
  $image = exif_thumbnail($_GET['img']);
  } else {
  $image = false;
  }
  if ($image!==false) {
  $innerhtml .= "";
  } else {
  // no thumbnail available, handle the error here
  $innerhtml .= "No thumbnail available";
  }
  
  $innerhtml .= "
";
  print_r($exif);
  ?>

今年国度考公务员最难一题

今年国度考公务员最难一题:

大舅去二舅家找三舅说四舅被五舅骗去六舅家偷七舅放在八舅柜子里面九舅给十舅的100元。请问谁是小偷?

正则表达式里面的修饰符

在正则表达式里面的修饰符可以改变正则的很多特性,使得正则表达式更加适合你的需要(注意:修饰符对于大小写是敏感的,这意味着"e"并不等于"E")。正则表达式里面的修饰符如下:
i :如果在修饰符中加上"i",则正则将会取消大小写敏感性,即"a"和"A" 是一样的。
m:默认的正则开始"^"和结束"$"只是对于正则字符串,如果在修饰符中加上"m",那么开始和结束将会指字符串的每一行:每一行的开头就是"^",结尾就是"$"。
s:如果在修饰符中加入"s",那么默认的"."代表除了换行符以外的任何字符将会变成任意字符,也就是包括换行符!
x:如果加上该修饰符,表达式中的空白字符将会被忽略,除非它已经被转义。
e:本修饰符仅仅对于replacement有用,代表在replacement中作为PHP代码。
A:如果使用这个修饰符,那么表达式必须是匹配的字符串中的开头部分。比如说"/a/A"匹配"abcd"。
E:与"m"相反,如果使用这个修饰符,那么"$"将匹配绝对字符串的结尾,而不是换行符前面,默认就打开了这个模式。
U:和问号的作用差不多,用于设置"贪婪模式"。

PHP中文件操作判断函数对比(file_exists() VS is_readable() VS is_file())

使用PHP操作文件时,我们经常用到三个函数:file_exists(),is_readable()和is_file()。他们的确切含义如下:
1,file_exists()

如果文件存在返回True,否则返回False。但这里的文件即可以是一个实体文件,也可以是一个目录文件。

2,is_readable()

如果文件存在并且状态为可读返回True,否则返回False。这个函数与file_exists()类似,目标即可以是实体文件也可以是目录文件。

3.is_file()

也许鉴于以上两个函数的泛性判断,所以才会有is_file()函数,这个函数用来判断目标是否是一个实体文件。于is_file()函数对应的是is_dir()函数,他用来判断目标是否是一个目录文件。

PHP的$_SERVER['HTTP_HOST']获取服务器地址功能详解

在php中,我们一般通过$_SERVER['HTTP_HOST']来活得URL中网站的域名或者ip地址。

php手册中的解释如下:

“HTTP_HOST”
当前请求的 Host: 头信息的内容。 

一般来说,这样子不会遇到什么问题,在一些常见的php框架中,如PFC3和FLEA也是基于该预定义变量。

然而最近在做的一个项目,程序移交到客户手里测试时,竟然发现程序的跳转总是会出错。

最后找出原因:$_SERVER['HTTP_HOST']在客户的环境里,取得的值总是程序所在的服务器在其局域网内的ip值。

究其原因,是因为,客户的公司通过一台服务器连接至因特网,而我们的程序所在的服务器,是通过域名映射出来的,也就是中间有个“代理”的过程。因此$_SERVER['HTTP_HOST']在这样的环境里,取得的值总是程序所在的服务器在其局域网内的ip值。

最后查了不少资料,在symfony框架里面,找到替代的实现方法:

将$host = $_SERVER['HTTP_HOST'];

替换成:

$host = isset($_SERVER['HTTP_X_FORWARDED_HOST']) ? $_SERVER['HTTP_X_FORWARDED_HOST'] : (isset($_SERVER['HTTP_HOST']) ? $_SERVER['HTTP_HOST'] : '');

即可。