小伙伴们,在做项目中,我们常常会使用工具类减轻我们的代码量,让我们的项目更加的清晰明了!
1、外部获取图片工具类 ImageUtils.java
完整代码:
import java.awt.Graphics;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.awt.image.RenderedImage;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import javax.imageio.ImageIO;
public class ImageUtil {
/**
* 根据路径加载图片
* @param path
* @return
*/
public static Image getImageByLocalFilePath(String path){
//获取图片
Image result = null;
FileInputStream fis = null;
//获取输入流
try {
fis = new FileInputStream(path);
//读取输入路径
try {
result = ImageIO.read(fis);
} catch (IOException e) {
e.printStackTrace();
return null;
}
} catch (FileNotFoundException e) {
e.printStackTrace();
return null;
}finally {
if(fis != null) {
try {
fis.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
return result;
}
public static Image getImageByURLPath(String urlPath) {
//获取图片
Image result = null;
URL url = null;
try {
url = new URL(urlPath);
result = ImageIO.read(url);
} catch (MalformedURLException e) {
e.printStackTrace();
return null;
} catch (IOException e) {
e.printStackTrace();
return null;
}
return result;
}
/**
* 设定图片的大小
* @return
*/
public static Image getScalImage(Image img,int width,int height) {
//过滤非法
if(img == null || width == 0 || height == 0 ) {
System.out.println("参数不正确!");
return null;
}
//获取图片的长和宽
int imgWidth = img.getWidth(null);
int imgheight = img.getHeight(null);
//记录真实图片的比例
double imgk = imgWidth * 1.0 / imgheight;
//记录自己准备的比例
double cusk = width * 1.0 / height;
//要缩放的比例
double scale = 1.0;
//存放图片要绘制的大小
int imgRestltWidth = 0;
int imgResultHeight = 0;
//计算图片存放的坐标
int sx1 = 0;
int sx2 = 0;
int sy1 = 0;
int sy2 = 0;
if(imgk > cusk) {
//以图片的高为准
imgResultHeight = imgheight;
imgRestltWidth = (int)(cusk * imgheight);
//计算图片绘制坐标
sx1 = (imgWidth - imgRestltWidth)/2;
sy1 = 0;
sx2 = sx1 + imgRestltWidth;
sy2 = imgheight;
}else {
//以图片的宽为准
imgRestltWidth = imgWidth;
imgResultHeight = (int)(imgResultHeight/cusk);
//计算图形的坐标
sx1 = 0;
sy1 = (imgheight - imgResultHeight)/2;
sx2 = imgWidth;
sy2 = sy1 + imgResultHeight;
}
//将图片绘制到图片缓冲器中
BufferedImage bi = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
//获取图片缓冲器的画笔
Graphics g = bi.getGraphics();
//使用画笔将图片画到缓冲器中
g.drawImage(img, 0, 0, width, height, sx1, sy1, sx2, sy2, null);
g.dispose();
return bi;
}
/**
* 得到图片的字节数组
* @param img
* @param formatName
* @return
*/
public static byte[] getImageBytes(Image img,String formatName) {
//过滤非法
if(img == null) {
System.out.println("图片为空!");
return null;
}
byte[] result = null;
//获得字节数组的输出流
ByteArrayOutputStream bao = new ByteArrayOutputStream();
//定义图片缓冲流
BufferedImage bi = new BufferedImage(img.getWidth(null), img.getHeight(null), BufferedImage.TYPE_INT_RGB);
//得到画笔
Graphics g = bi.getGraphics();
//使用画笔画入图片缓冲流中
g.drawImage(img, 0, 0, null);
g.dispose();
try {
ImageIO.write((RenderedImage)bi, formatName, bao);
//将缓冲流中的数据转换为字节数组
result = bao.toByteArray();
} catch (IOException e) {
e.printStackTrace();
System.out.println("ERROR:IOException"+e.getMessage());
}
return result;
}
/**
* 根据图片的byte[]得到image图片
*
*/
public static Image getImageByBytes(byte[] bytes) {
//非法操作
if(bytes == null) {
System.out.println("bytes is null!");
return null;
}
//定义返回的图片
Image result = null;
//定义字节数组输入流
ByteArrayInputStream bai = new ByteArrayInputStream(bytes);
try {
result = ImageIO.read(bai);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return result;
}
}
测试代码:
package com.yueqian.myswing4;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Polygon;
import java.awt.Toolkit;
import java.util.Arrays;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JPanel;
/**
* 自定义绘图
* @author LinChi
*
*/
public class TestGraphics extends JFrame{
private JPanel pan;
public TestGraphics() {
super("TestGraphics");
this.setSize(400,500);
this.setLocationRelativeTo(null);
addComponent();
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
/**
* 添加组件
*/
private void addComponent() {
//画布 任何组件都可以作为画布
pan = new JPanel() {
public void paint(Graphics g) {
super.paint(g);
//注意:jvm对图片格式的支持不多 jpg png jpeg gif
//加载图片
// Image img = Toolkit.getDefaultToolkit().createImage("C:\\Users\\Administrator\\Pictures\\Saved Pictures/01.jpg");
// Image img = new ImageIcon("C:\\Users\\Administrator\\Pictures\\Saved Pictures/01.jpg").getImage();
// Image img = ImageUtil.getImageByLocalFilePath("C:\\Users\\Administrator\\Pictures\\Saved Pictures/01.jpg");
String urlPath = "https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1582438134032&di=1b4ae126692e80d11d9b889e5c245410&imgtype=0&src=http%3A%2F%2F01.minipic.eastday.com%2F20170419%2F20170419141641_d8952795b7cb0d77130abcfb5e38fd34_3.jpeg";
Image img = ImageUtil.getImageByURLPath(urlPath);
//缩放成图片
Image headImg = ImageUtil.getScalImage(img, 100, 100);
//将图片转换成字节数组
byte[] imageBytes = ImageUtil.getImageBytes(headImg, "jpeg");
System.out.println(Arrays.toString(imageBytes));
//绘制图片
g.drawImage(img,10,10,500,500,0,0,100,100,null);
//释放绘制资源
g.dispose();
}
};
//添加画布到窗口
this.add(pan);
}
public static void main(String[] args) {
new TestGraphics();
}
}
测试截图
2、获取文件工具类 FileUtils.java
/**
* �ļ�������
* @author LinChi
*
*/
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.Map;
public class FileUtils{
private static FileInputStream fin;
private static FileOutputStream fout;
private static ObjectInputStream objIn;
private static ObjectOutputStream objOut;
/**
*保存游戏进度
*
* @param acc
* @return
*/
public static boolean saveProc(Map<String,Object> proc,File saveFile) {
try {
fout = new FileOutputStream(saveFile);
objOut = new ObjectOutputStream(fout);
//将整个map中保存的进度信息写入文件中
objOut.writeObject(proc);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return false;
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return false;
} finally {
closeAll();
}
return true;
}
/**
* 读取游戏进度
*
* @return
*/
public static Map<String,Object> readProc(File loadFile) {
Map<String,Object> result = null;
try {
fin = new FileInputStream(loadFile);
objIn = new ObjectInputStream(fin);
result = (Map<String,Object>) objIn.readObject();
} catch (FileNotFoundException e) {
e.printStackTrace();
return null;
} catch (ClassNotFoundException e) {
e.printStackTrace();
return null;
} catch (IOException e) {
e.printStackTrace();
return null;
} finally {
closeAll();
}
return result;
}
/**
*关闭流
*/
private static void closeAll() {
try {
if (objOut != null) {
objOut.close();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
if (fout != null) {
fout.close();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
if (objIn != null) {
objIn.close();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
if (fin != null) {
fin.close();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
3、获取字符串非法输入工具类 StringUtils.java
/**
* 越界限制工具类
* @author LinChi
*
*/
public class StringUtils {
public static boolean isEmpty(String str) {
if(str == null || str.length()<=0 || str.trim().length()<=0) {
return true;
}
return false;
}
}
4、获取数字格式化工具类 NumberUtils.java
/**
* 格式化钱数
* @author LinChi
*
*/
public class NumberUtils {
public static double formatMoney(double money) {
return (int)(money*100+0.5)/100.0;
}
}
当然你也可以使用格式化 String.format(".2f",100.238)对数字进行格式化输出
好了,今天分享的内容就到此结束了!期待明天的精彩呈现吧!