java-web开发如何传输图片(图片的处理)–毕设开发中遇见的问题1
图片的传输
图片传输可以将图片传输为BASE64通过http进行传输
图片传输的问题
http传输会导致系统base64换行,经过测试,需要删除换行符等等。代码如下。image是前端传来的BASE64字节流。(这个问题很坑,网上有很多不同的原因,不同的解决方案,实测http协议传输此方法有效果)
image = image.replaceAll("\\r|\\n", "");
判断图片的格式
BASE64字节流可以直接判断图片的格式。代码如下。
public static String checkImageBase64Format(String base64ImgData) {
//decode
byte[] b = Base64.getMimeDecoder().decode(base64ImgData);
// byte[] b = Base64.getDecoder().decode(base64ImgData);
String type = "";
if (0x424D == ((b[0] & 0xff) << 8 | (b[1] & 0xff))) {
type = "bmp";
} else if (0x8950 == ((b[0] & 0xff) << 8 | (b[1] & 0xff))) {
type = "png";
} else if (0xFFD8 == ((b[0] & 0xff) << 8 | (b[1] & 0xff))) {
type = "jpg";
}
return type;
}
BASE64转换为图片
public static boolean GenerateImage(String imgData, String imgFilePath) throws IOException { // 对字节数组字符串进行Base64解码并生成图片
if (imgData == null) // 图像数据为空
return false;
BASE64Decoder decoder = new BASE64Decoder();
OutputStream out = null;
try {
out = new FileOutputStream(imgFilePath);
// Base64解码
byte[] b = decoder.decodeBuffer(imgData);
for (int i = 0; i < b.length; ++i) {
if (b[i] < 0) {// 调整异常数据
b[i] += 256;
}
}
out.write(b);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
out.flush();
out.close();
return true;
}
}
图片转换为BASE64
public static String imageToBase64Str(String imgFile) {
InputStream inputStream = null;
byte[] data = null;
try {
inputStream = new FileInputStream(imgFile);
data = new byte[inputStream.available()];
inputStream.read(data);
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
// 加密
BASE64Encoder encoder = new BASE64Encoder();
return encoder.encode(data);
}