博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
图片压缩的另一种实现(3)
阅读量:5889 次
发布时间:2019-06-19

本文共 3908 字,大约阅读时间需要 13 分钟。

hot3.png

import java.awt.Graphics;import java.awt.image.BufferedImage;import java.io.ByteArrayOutputStream;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.net.HttpURLConnection;import java.net.URL;import javax.imageio.IIOException;import javax.imageio.ImageIO;public class ImageUtils {	/**	 * 对图片进行放大或者压缩	 * 	 * @param srcPath	 *            原始图片路径(绝对路径)	 * @param newPath	 *            处理后图片路径(绝对路径)	 * @param w	 *            目标宽度	 * @param h	 *            目标高度	 * @return 是否处理成功	 */	public static boolean zoomInImage(String srcPath, String newPath,			Integer w, Integer h) {		BufferedImage bufferedImage = null;		try {			File file = new File(srcPath);			if (file.canRead()) {				try{					bufferedImage = ImageIO.read(file);				}catch(IIOException e){					e.printStackTrace();					return false;				}			} else {				System.out.println("文件不存在或没有权限读取:" + srcPath);				return false;			}		} catch (IOException e) {			// TODO: 打印日志			e.printStackTrace();			return false;		}		if (bufferedImage != null) {			bufferedImage = zoomInImage(bufferedImage, w, h);			try {				// 保存修改后的图像,全部保存为JPG格式				ImageIO.write(bufferedImage, "JPG", new File(newPath)); 				System.out.println("压缩后的图片已保存到磁盘");			} catch (IOException e) {				// TODO 打印错误信息				e.printStackTrace();				return false;			}		}		return true;	}		/**	 * 对图片进行放大或者压缩处理	 * 	 * @param originalImage	 *            原始图片	 * @param times	 *            放大倍数	 * @return	 */	public static BufferedImage zoomInImage(BufferedImage originalImage,			Integer width, Integer height) {		BufferedImage newImage = new BufferedImage(width, height,				originalImage.getType());		Graphics g = newImage.getGraphics();		g.drawImage(originalImage, 0, 0, width, height, null);		System.out.println("图片压缩成功");		g.dispose();		return newImage;	}		/**	 * 将图片写入到磁盘	 * 	 * @param img	 *            图片数据流	 * @param fileName	 *            文件保存时的名称	 */	public static void writeImageToDisk(byte[] img, String fileSrc) {		try {			File file = new File( fileSrc);			FileOutputStream fops = new FileOutputStream(file);			fops.write(img);			fops.flush();			fops.close();			System.out.println("原图已下载到本地磁盘");		} catch (Exception e) {			e.printStackTrace();		}	}	/**	 * 根据地址获得数据的字节流	 * 	 * @param strUrl	 *            网络连接地址	 * @return	 */	public static byte[] getImageFromNetByUrl(String strUrl) {		try {			URL url = new URL(strUrl);			HttpURLConnection conn = (HttpURLConnection) url.openConnection();			conn.setRequestMethod("GET");			conn.setConnectTimeout(5 * 1000);			InputStream inStream = conn.getInputStream();// 通过输入流获取图片数据			byte[] btImg = readInputStream(inStream);// 得到图片的二进制数据			return btImg;		} catch (Exception e) {			e.printStackTrace();		}		return null;	}	/**	 * 从输入流中获取数据	 * 	 * @param inStream	 *            输入流	 * @return	 * @throws Exception	 */	public static byte[] readInputStream(InputStream inStream) throws Exception {		ByteArrayOutputStream outStream = new ByteArrayOutputStream();		byte[] buffer = new byte[1024];		int len = 0;		while ((len = inStream.read(buffer)) != -1) {			outStream.write(buffer, 0, len);		}		inStream.close();		return outStream.toByteArray();	}	public static void main(String[] args) {		// 图片url,压缩后的宽和高		String url = "/upload/c671c57023e6eb83a1fa492babf0779e.jpg";		int w = 700;		int h = 500;				//获取图片访问真实url		if(url.startsWith("/")){			url = "http://localhost"+url;		}				String newDir = "/var/imgcompress/";		String newName = MD5Util.encodeMD5(url);				//从网络下载图片并保存到本地磁盘		String srcPath = newDir + newName + url.substring(url.indexOf("."));		writeImageToDisk(getImageFromNetByUrl(url),srcPath);				//压缩后的图片路径		String filePath = newDir + newName + "_" + w + "_" + h				+ url.substring(url.indexOf("."));		System.out.println(filePath);		// 测试		boolean test = zoomInImage(srcPath, filePath, w, h);		if (test) {			System.out.println("ok");		}	}}

转载于:https://my.oschina.net/JustLoveIT/blog/486247

你可能感兴趣的文章
python中实参包括哪些_第50p,形参与实参,Python中函数的参数详解
查看>>
minio 并发数_MinIO 参数解析与限制
查看>>
eap wifi 证书_用openssl为EAP-TLS生成证书(CA证书,服务器证书,用户证书)
查看>>
mysql 应用程序是哪个文件夹_Mysql 数据库文件存储在哪个目录?
查看>>
mysql半同步和无损复制_MySQL半同步复制你可能没有注意的点
查看>>
mysql能看见表显示表不存在_遇到mysql数据表不存在的问题
查看>>
使用mysql实现宿舍管理_JSP+Struts2+JDBC+Mysql实现的校园宿舍管理系统
查看>>
mysql alter 修改字段类型_MySQL ALTER命令:删除,添加或修改表字段、修改字段类型及名称等...
查看>>
mysql中的事务和锁_MySQL - 事务和锁中的互斥?
查看>>
mysql statement讲解_Statement接口详解
查看>>
mysql_print_default_知识点:MySQL常用工具介绍(十 二)——实用程序my_print_defaults、perror...
查看>>
mysql怎么会报错_MySQL启动报错怎么办?
查看>>
python编译exe用于别的电脑上_Python安装教程(推荐一款不错的Python编辑器)
查看>>
flash back mysql_mysqlbinlog flashback 使用最佳实践
查看>>
hive中如何把13位转化为时间_sqoop1 导入 hive parquet 表中 时间戳调整为日期
查看>>
mysql书外键_[转] mysql 外键(Foreign Key)的详解和实例
查看>>
mysql存储引擎模式_MySQL存储引擎
查看>>
python入门小游戏代码_【Python】Python代码实现“FlappyBird”小游戏
查看>>
云服务器怎么卸载mysql数据库_mysql 删除数据库脚本
查看>>
mysql 5.5.57互为主从_MYSQL 5.5.18 互为主从配置成功
查看>>