公司需要做一个九格切图功能, 方便发布至朋友圈. 本来用Python三十行搞定. 但是被测试部diss了说我不会用Java写, 当时一时气不过用原生Java又写了一个, 整整一百五十行… 我的青春啊
中间踩了BufferedImage的很多坑, 在此总结一下BufferedImage的一些用法
通过URL读取BufferedImage
// 需要对IOException进行处理, 一共两处, 在URL连接处和文件读取处
URL url = new URL("http://yihezo.cn/static/media/logo.9d4a5ade.png");
URLConnection connection = url.openConnection(); //打开连接
connection.setDoOutput(true);
connection.setReadTimeout(3000);// 设置超时时间(非必须)
BufferedImage img = ImageIO.read(connection.getInputStream());
通过本地文件路径读取BufferedImage
File file = new File("C:/a.png");
BufferedImage img = ImageIO.read(new FileInputStream(file));
BufferedImage转Base64
// img为上面获取到的图片, 类型同为BufferedImage
ByteArrayOutputStream baos = new ByteArrayOutputStream();//io流
ImageIO.write(img, "png", baos);//写入流中
byte[] bytes = baos.toByteArray();//转换成字节
BASE64Encoder encoder = new BASE64Encoder();
String base64Code = encoder.encodeBuffer(bytes).trim();
Base64转BufferedImage
String base64Code = ""; // base64编码过长, 此处不放示例
BASE64Decoder decoder = new BASE64Decoder();
byte[] bytes1 = decoder.decodeBuffer(base64Code);
ByteArrayInputStream bais = new ByteArrayInputStream(bytes1);
BufferedImage img = ImageIO.read(bais);
裁剪BufferedImage
/*
* img为上面获取到的图片, 类型同为BufferedImage
* getSubimage(x轴坐标, y轴坐标, x轴坐标向右距离长度, y轴坐标向下距离长度)
* 左上角坐标为0,0
*/
BufferedImage newImg= img.getSubimage(0, 0, 20, 30);
保存BufferedImage
File f = new File("E:/Test.png");
ImageIO.write(resImg, "png", f);