图片验证码,本地随机数生成效果一样,后台说他们生成也行。(这样转图还是少用,特别是大图片的时候,常量字符串过长就很尴尬了)
public class Base64ImgUtilis {
/**
* 将图片转换成Base64编码的字符串
* @param path
* @return base64编码的字符串
*/
public static StringimageToBase64(String path){
if(TextUtils.isEmpty(path)){
return null;
}
InputStream is =null;
byte[] data =null;
String result =null;
try{
is =new FileInputStream(path);
//创建一个字符流大小的数组。
data =new byte[is.available()];
//写入数组
is.read(data);
//用默认的编码格式进行编码
result = Base64.encodeToString(data,Base64.DEFAULT);
}catch (IOException e){
e.printStackTrace();
}finally {
if(null !=is){
try {
is.close();
}catch (IOException e) {
e.printStackTrace();
}
}
}
return result;
}
/**
*base64编码字符集转化成图片文件。
* @param base64Str
* @param path 文件存储路径
* @return 是否成功
*/
public static boolean base64ToFile(String base64Str,String path){
byte[] data = Base64.decode(base64Str,Base64.DEFAULT);
for (int i =0; i < data.length; i++) {
if(data[i] <0){
//调整异常数据
data[i] +=256;
}
}
OutputStream os =null;
try {
os =new FileOutputStream(path);
os.write(data);
os.flush();
os.close();
return true;
}catch (FileNotFoundException e) {
e.printStackTrace();
return false;
}catch (IOException e){
e.printStackTrace();
return false;
}
}
public static BitmapstringtoBitmap(String string) {
//将字符串转换成Bitmap类型
Bitmap bitmap =null;
try {
byte[] bitmapArray;
bitmapArray = Base64.decode(string.split(",")[1], Base64.DEFAULT);
bitmap = BitmapFactory.decodeByteArray(bitmapArray, 0, bitmapArray.length);
}catch (Exception e) {
e.printStackTrace();
}
return bitmap;
}
public static StringbitmaptoString(Bitmap bitmap) {
//将Bitmap转换成字符串
String string =null;
ByteArrayOutputStream bStream =new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.PNG, 100, bStream);
byte[] bytes = bStream.toByteArray();
string = Base64.encodeToString(bytes, Base64.DEFAULT);
return string;
}
}