粤嵌学习打卡第7天(工具类:获取图片、获取文件、过滤操作 )

小伙伴们,在做项目中,我们常常会使用工具类减轻我们的代码量,让我们的项目更加的清晰明了!

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)对数字进行格式化输出


好了,今天分享的内容就到此结束了!期待明天的精彩呈现吧!


发布了17 篇原创文章 · 获赞 3 · 访问量 510

猜你喜欢

转载自blog.csdn.net/qq_41986840/article/details/104462682