目录
一、图片互转二进制流
1、图片转二进制流;
2、二进制转图片并保存在本地
二、获取图片接口
三、删除本地指定文件
下载包
以下代码仅用到外部包:fastjson-1.2.62.jar
百度网盘下载地址:链接:https://pan.baidu.com/s/1yHDYYg0AYzm76X1Tkyk5SQ
提取码:Json
一、图片互转二进制流
1、图片转二进制流;
这里传参的是本地的图片地址,后面会有删除本地图片的教程;作者没试过获取网页地址中的图片,大家可以自己尝试一下!
代码如下:
/**
* 图片转换为二进制流
* @param imgaddress 图片本地地址
* @return 返回图片转换后的二进制流(类型:String)
* @return 若转换失败返回 null
*
* */
public static String imgtoio(String imgaddress) {
//图片转化为二进制
byte[] imageBytes = null;
try (FileInputStream fileInputStream = new FileInputStream(new File(imgaddress));)
{
imageBytes = new byte[fileInputStream.available()];
fileInputStream.read(imageBytes);
} catch (IOException e) {
System.out.println(e);
return null;
}
String str= UnicodeByteToStr(imageBytes);
return str;
}
将二进制流转化为字符串
public static String UnicodeByteToStr(byte[] b){
StringBuilder sb = new StringBuilder();
for(int i=0;i<b.length;i++) {
sb.append(String.format("%02x", b[i]));
}
return sb.toString();
}
需要导入的包
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
2、二进制转图片并保存在本地
由于我们保存的是String类型的字符窜,这里用到的是Java中
fileOutputStream.write()
方法,所以先要把字符串转换为byte[]类型(字节比int还小-128至127 (-27 to 27 - 1));方便我们进行图片转换;
代码如下:将字符串转换为byte[]类型;
/**
* @author P
* 将字符串转换为byte[]类型
* @param hexString 需要转换的字符串
* @return byte[]类型二进制流
*
* */
public static byte[] hex2Bytes(String hexString) {
if (hexString == null || hexString.equals("")) {
return null;
}
int length = hexString.length() / 2;
char[] hexChars = hexString.toCharArray();
byte[] bytes = new byte[length];
String hexDigits = "0123456789abcdef";
for (int i = 0; i < length; i++) {
int pos = i * 2; // 两个字符对应一个byte
int h = hexDigits.indexOf(hexChars[pos]) << 4; // 注1
int l = hexDigits.indexOf(hexChars[pos + 1]); // 注2
if(h == -1 || l == -1) { // 非16进制字符
return null;
}
bytes[i] = (byte) (h | l);
}
return bytes;
}
将byte[]的二进制流转换为图片:
/**
* @author P
* 将二进制流转换为图片
* @param imageBytes 二进制流(字符串)
* @param imgaddress 图片保存地址【包括图片名称包含后缀】
* @return 返回0(保存失败)返回1(保存成功)
*
* */
public static int iotoimg(String imageBytes, String imgaddress) {
//二进制转化为图片
byte[] bytes1 = hex2Bytes(imageBytes);//字符串转换为byte
try (FileOutputStream fileOutputStream = new FileOutputStream(new
File(imgaddress));) {
fileOutputStream.write(bytes1);//保存在本地
return 1;
} catch (IOException e) {
System.out.println(e);
return 0;
}
}
由此,图片的转换就算完成了,以上皆为自定义方法;借鉴网页中的其他大佬和本人自己的感悟和摸索总结而成,由于文章是在完成项目后进行编写的,所以没有转载链接;还望原作海涵!一下部分代码同上;
二、获取图片接口
这里小作使用的小木果接口(用户登录)
Java获取接口内容(图片)并保存在本地文件中,并获取本地文件的二进制流,调用的方法上面有写!
/**
* 获取小木果接口中高清美女图片并保存在数据库中;
* 高清图片一般无法保存在数据库,但是可以保存在本地
* @param imgaddress1 保存地址【不含后缀】 如:E:\\\\桌面\\\\img
*
* */
public static boolean setimgtomysql1(String imgaddress1){
try {
//种类
String sort[]= {"未知","美女","汽车","二次元","背景","动漫"};
int Intsort=1;//0-5 种类
//小木果 随机图片链接1 不限制
String interfaceID1="https://api.muxiaoguo.cn/api/meinvtu?num=1";
//保存地址
// String imgaddress1="E:\\桌面\\img";
//判断链接是否保存图片成功
Boolean boolean1=true;//链接1是否保存成功
String nameps="\\"+Newname.getRandomName("gg.jpg");
//获取网页中的图片并保存在本地
boolean1=InterfaceImg.Ijson(1,interfaceID1,"data","imgurl",imgaddress1+nameps);
// 获取图片的二进制流
String imageBytes1=GetImgIo.imgtoio(imgaddress1+nameps);
if(imageBytes1==null||!boolean1) {
System.out.println("imageBytes2="+imageBytes1+";boolean2="+boolean1+"保存失败");
return false;
}
//写入数据库
//******
new File(imgaddress1+nameps).delete();//删除保存在本地的图片
return true;
} catch (Exception e) {
System.out.println("图片保存异常");
System.out.println(e);
return false;
}
}
三、删除本地指定文件
new File("E:\one.txt").delete();//删除保存在本地的图片
传入需要删除的指定文件的本地绝对位置
喜欢的同学记得点个赞!