作者存档
2017九月15

使用Java API绘制验证码图片

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.io.OutputStream;
import java.util.Random;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * 生成验证码,将验证码绘制成一张图片返回浏览器
 * 
 * @author FreeDroid
 *
 */
public class CheckcodeServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	public void service(HttpServletRequest request, 
              HttpServletResponse response) throws 
                     ServletException, IOException {
		/*
		 * step1.绘图
		 */
		Random r = new Random();
		//从getString()方法取出A-Z,0-9的指定长度随机字符串
		String number = getString(5);
		//先创建一个画布(内存映像对象)
		BufferedImage image = new BufferedImage(80, 30, BufferedImage.TYPE_INT_BGR);
		//获得画笔
		Graphics g = image.getGraphics();
		//给画笔设置颜色
		g.setColor(new Color(255, 255, 255));
		//给画布设置背景颜色
		g.fillRect(0, 0, 80, 30);
		//设置字体
		g.setFont(new Font(null, Font.BOLD|Font.ITALIC, 20));
		//给每个字符设置随机颜色,并画到画布上
		for (int i = 0; i < number.length(); i++) {
			//给画笔设置颜色
			g.setColor(new Color(r.nextInt(255),r.nextInt(255),r.nextInt(255)));
			//在画布上画字符
			g.drawString(String.valueOf(number.charAt(i)), i*15, 25);
		}
		//加一些干扰线
		for (int i = 0; i < 8; i++) {
			//给画笔设置颜色
			g.setColor(new Color(r.nextInt(255),r.nextInt(255),r.nextInt(255)));
			//在画布范围内画线
			g.drawLine(r.nextInt(80), r.nextInt(30), r.nextInt(80), r.nextInt(30));
		}
		
		/*
		 * step2.将图片压缩,然后输出
		 */
		//设置响应内容类型为JPEG格式的图片
		response.setContentType("image/jpeg");
		//获得字节输出流(图片是二进制数据)
		OutputStream os = response.getOutputStream();
		//将原始图片(image)按照指定的算法压缩(jpeg)
                //然后将压缩之后得到的字节写入response对象。
		javax.imageio.ImageIO.write(image, "jpeg", os);
		os.close();		
	}

	/**
	 * 随机生成指定长度的大写字母和数字组合
	 * @param length
	 * @return
	 */
	private String getString(int length) {
		StringBuilder str = new StringBuilder();
		Random r = new Random();
		//取出大写字母
		for (int i = 0; i < 26; i++) {
			str.append((char) ('A' + i));
		}
		//取出数字
		for (int i = 0; i < 10; i++) {
			str.append((char) ('0' + i));
		}
		//从字符串str随机取length个字符放进str2组成新的字符串
		StringBuilder str2 = new StringBuilder();
		for (int i = 0; i < length; i++) {
			str2.append(str.charAt(r.nextInt(str.length())));
		}
		return str2.toString();
	}
	
}
2017八月11

UTF-8中文字符编码和解码,用位运算实现

/**
 * UTF中文字符编码和解码
 * 中文字符占3个字节,前缀分别是:1110XXXX 10XXXXXX 10XXXXXX
 * 
 * @author FreeDroid
 *
 */
public class Utf8codeANDdecode {

	public static void main(String[] args) {
		int ch = '我';
		byte[] bytes = codeUTF8(ch);
		char ch2 = decodeUTF8(bytes);
		System.out.println(ch2);
	}

	/**
	 * 解码
	 * @param bytes
	 * @return
	 */
	public static char decodeUTF8(byte[] bytes) {
		int ch = (bytes[0]<<12&0xffff)|(bytes[1]<<6&0x3fff)|(bytes[2]&0x3f);
		return (char) ch;
	}
	
	/**
	 * 编码
	 * @param ch
	 * @return
	 */
	public static byte[] codeUTF8(int ch) {
		int b3 = ch & 0x3f | 0x80;
		int b2 = ch >>> 6 & 0x3f | 0x80;
		int b1 = ch >>> 12 & 0xf | 0xe0;
		return new byte[] { (byte) b1, (byte) b2, (byte) b3 };
	}

}
2017七月30

同名文件自动建立副本递归实现

public void newFile(File file){
	try {
		if (file.createNewFile()) {
			System.out.println("文件创建成功!");
		} else {
			String cName = changeName(file);
			File files = new File("." + File.separator + cName);
			newFile(files);
		}
	} catch (IOException e) {
		e.printStackTrace();
	}
}
public String changeName(File file) {
	String name = file.getName();
	int index = name.lastIndexOf('.');
	int index2 = name.lastIndexOf("_副本");
	if (index2 < 0) {
		return name.substring(0, index) + "_副本1" + name.substring(index);
	} else {
		String num = name.substring(index2+3, index);
		int i = Integer.valueOf(num)+1;
		return name.substring(0, index2) + "_副本" + i + name.substring(index);
	}
}
2014十二月7

【自己动手,丰衣足食】09款花冠车载CD改13款带AUX,USB车载CD

家里花花的车载CD坏了,进不了碟,拆出来修的话感觉意义不大。那就趁机会小升级一下。http://weibo.com/freedroid

首先考虑过车载导航,android系统的太贵(大部分都要3000左右)。渣系统的实用性不强(还不如手机导航)。倒车影像对我来说用处不大,家用车开了那么久,车长什么的都把握的好,误差也就5cm左右。而且这个位置夏天很热,太复杂的设备不能保证耐用性。加上我开车用导航听声音就行,基本上不用看地图,开着手机一边听一边看路萌萌哒,一点问题都没有。既然如此,那就小升级一下,加个AUX和USB功能的车载CD足够用了,而且不需要复杂布线,安装简单。http://weibo.com/freedroid

 

首先准备工作,13款花冠车载CD,X宝等渠道都可以获得。规格10的T字形外六角套筒(五金店有卖,10块钱之内搞定),规格8的外六角扳手(同样五金店有卖,忘记拍进去了),十字螺丝刀一把。卡片若干,最好有张布http://weibo.com/freedroid

QQ图片20141207141027

 

先把空调出风口拔出来,出风口往下摆(如图),然后使劲往外扯,使劲扯就行,不会坏的http://weibo.com/freedroid

 

QQ图片20141207141012

 

车载CD由四个螺丝固定,如下两张图,中间那个不是。这里用10的套筒把螺丝卸下来。注意!!!一定要注意!这里我使用卡片去垫,一是保护下方的中控面板不被刮花,二是螺丝松了掉在卡片上不会掉进中控面板里(掉进去就拿不出来了)这四颗螺丝小心拧出来,保证不要掉进中控里就行了。装的时候也一样要小心。http://weibo.com/freedroid

 

 

QQ图片20141207141020QQ图片20141207141029

 

卸下四颗螺丝之后把CD往外拔,用规格8的扳手把两边各四颗螺丝也卸下来,很简单,我就不上图了(其实是忘记拍照)。把CD想办法拔出来,这里有点技巧,眼见功夫,基本上都搞得定。换上新的CD,插上电源测试一下。没问题就装好CD机的螺丝,再测试一下。http://weibo.com/freedroid

QQ图片20141207141034

 

最终没问题了就把空调出风口装上,完美无损安装完毕,完结撒花。PS:我手工不好,空调出风口上方有很大的缝http://weibo.com/freedroid

QQ图片20141207141023

 

2014十月23

谁的路虎

刚才在工商银行等号办业务,人巨多。突然一男子冲进来大喊:谁的路虎,停的地方挡住路了?众人期待。。。哥淡定的起身,带起黑色墨镜,缓缓的出了门,众人那个羡慕啊。依稀听到后面的声音:草,年轻有为啊;我噻,看不出来啊。。哥出门左拐,打开电动,扬长而去。。

2011十月31

里程碑2 MIUI简单演示

2011十月30

铁三角CKM55开箱评测

2011十月15

里程碑2 ME722 CM7简单演示

2011十月6

FreeDroid成都两日游

2011九月19

ME722 Milestone2 里程碑2刷第三方rom教程

写在前面:请先备份联系人,短信等重要数据,建议使用豌豆荚。此rom非官方rom,随时有可能有不可预测的情况,如果你什么都不懂的,建议不要乱来。

 

  • 保证你的手机是2.2,建议是刷这个底层包:点击我;刷MIUI建议用该底包:点击我。底层包刷机教程:点击我
  • 下载CM7的升级包。目前有三个:链接一链接二链接三。MIUI升级包下载地址:点击我。 不解压放在SD卡里(建议放到根目录下)
  • 手机必须是获取root权限。获取root权限工具:点击我下载。手机端先设置一下:设置–>应用程序–>开发–>降“USB调试”打钩。然后将手机连接电脑,点击刚下载的SuperOneClick

  • 点击Root

  • 接下来是等待SuperOneClick工具对手机进行root操作。出现下图表示获取root权限成功

  • 重启手机,安装bootmenu程序:点击下载。打开程序,允许程序获取root权限。点击安装Bootmenu

  • 安装完毕点击“重启设备”

 

  • 重启后进入下图界面,通过音量键选择第三项“Recovery”,按电源键确认(以下操作都是按电源键确认)
  • 选择第一或第二项进入第三方Recovery
  • 下面就是第三方Recovery的界面(有可能是显示红色的字体),选择第五项“Install zip from sdcard”
  • 选择第一项“choose zip from sdcard”
  •  在这找到你下载的CM7升级包,放在根目录下的升级包一般在最下面,建议按音量上键来寻找。下图是我将要安装的升级包
  • 选择YES确认安装升级包
  • 安装完毕一路”Go Back”到进入Recovery的界面,执行第三和第四项“双wipe”(此操作也可以在手机关机状态下按”X”+电源键进入官方recovery进行双wipe)。完毕后点击第一项重启设备。
  • 接下来就是等待进入系统了,第一次进入系统大概需要2-5分钟。
如果你看完下面的知识,你基本上可以对其它android手机刷第三方rom(本人采用非专业术语来说明)
root:linux管理员权限(android系统基于linux编写),获取root权限可以对手机系统动刀动枪,修改系统文件和添加文件等等。
recovery:android系统的恢复工具,通过此工具的wipe功能来恢复出厂模式。官方recovery提供update zip功能对手机进行批量程序的安装,例如谷歌套件(GMS)。第三方recovery可以安装开发者自己做的升级包,目前第三方rom基本上是通过第三方recovery来安装,安装方法大同小异。关键的地方时不同手机进入recovery的方式不一样,刷写第三方recovery的方法也不一样。具体步骤到相应手机的论坛板块寻找教程。

 

问题:刷完无法进入系统怎么办?

答: 请再双wipe一次,再不行就重新刷一遍(zip)升级包,再不行就重刷一次SBF底包。

 

问题:手机有时候会死机不稳定如何解决?

答:目前就我的使用情况来看,死机的情况比较少,有部分程序不兼容导致死机等现象。请谨慎安装需要root权限的程序。

 

问题:为什么无法720p拍摄?

答:由于部分驱动未完善,手机无法对部分视频硬解码。

 

如果你在刷机过程中遇到不懂的地方可以通过我的新浪微博找我:FreeDroid

如果你在使用中遇到任何问题,请不要找我。