java图片的导出,并压缩
来源:互联网 发布:base64 上传七牛 java 编辑:程序博客网 时间:2024/06/02 02:32
java图片的导出,并压缩
java 压缩包jar包使用的是commons-compress-1.6.jar
/** * 导出图片 * @param request * @param response */ @RequestMapping("/exportPicture") public void exportPicture(HttpServletRequest request,HttpServletResponse response) throws Exception { //定义根路径 String rootPath = request.getRealPath("/"); //@Test测试,rootPath 可直接写路径 eg: //String rootPath = "D:\\a.jpg"; //创建文件 File file = new File(rootPath+"temp_download"); //判断文件是否存在,如果不存在,则创建此文件夹 if(!file.exists()){ file.mkdir(); } String name = "图片压缩包下载"; String fileName = name+new Date().getTime(); String zipFileName = fileName + ".zip"; File zipFile = null; String path = rootPath + "temp_download"; //调用工具类获取图片 byte[] data = ImageByteUtil.image2byte("F:\\blank.jpg"); //new一个文件对象用来保存图片,默认保存当前工程根目录 if(data != null){ File imageFile = new File(path+File.separator+fileName+".jpg"); //创建输出流 FileOutputStream outStream = new FileOutputStream(imageFile); //写入数据 outStream.write(data); //关闭输出流 outStream.close(); } try { //获取创建好的图片文件 File imageFile = new File(path+"/"+fileName+".jpg"); // 打成压缩包 zipFile = new File(path + "/" + zipFileName); FileOutputStream zipFos = new FileOutputStream(zipFile); ArchiveOutputStream archOut = new ArchiveStreamFactory().createArchiveOutputStream(ArchiveStreamFactory.ZIP, zipFos); if (archOut instanceof ZipArchiveOutputStream) { ZipArchiveOutputStream zos = (ZipArchiveOutputStream) archOut; ZipArchiveEntry zipEntry = new ZipArchiveEntry(imageFile, imageFile.getName()); zos.putArchiveEntry(zipEntry); zos.write(FileUtils.readFileToByteArray(imageFile)); zos.closeArchiveEntry(); zos.flush(); zos.close(); } // 压缩完删除txt文件 if (imageFile.exists()) { imageFile.delete(); } // 输出到客户端 OutputStream out = null; out = response.getOutputStream(); response.reset(); response.setHeader("Content-Disposition", "attachment;filename=" + new String(zipFileName.getBytes("GB2312"), "ISO-8859-1")); response.setContentType("application/octet-stream; charset=utf-8"); response.setCharacterEncoding("UTF-8"); out.write(FileUtils.readFileToByteArray(zipFile)); out.flush(); out.close(); //测试就不要输出到客户端了,把下面这段删除压缩包的代码注释掉, //就能看到效果了 // 输出客户端结束后,删除压缩包 if (zipFile.exists()) { zipFile.delete(); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (ArchiveException e) { // TODO Auto-generated catch block e.printStackTrace(); } }
附工具类 ImageByteUtil 图片与byte数组互转util
public class ImageByteUtil { /** * 实现图片与byte数组之间的互相转换 * @param args */ public static void main(String[] args) { //定义路径 String path = "F:\\blank.jpg"; byte[] data = image2byte(path); System.out.println(data.length); } /** * 将图片转换为byte数组 * @param path 图片路径 * @return */ public static byte[] image2byte(String path){ //定义byte数组 byte[] data = null; //输入流 FileImageInputStream input = null; try { input = new FileImageInputStream(new File(path)); ByteArrayOutputStream output = new ByteArrayOutputStream(); byte[] buf = new byte[1024]; int numBytesRead = 0; while ((numBytesRead = input.read(buf)) != -1) { output.write(buf, 0, numBytesRead); } data = output.toByteArray(); output.close(); input.close(); } catch (FileNotFoundException ex1) { ex1.printStackTrace(); } catch (IOException ex1) { ex1.printStackTrace(); } return data; } //byte数组到图片 public void byte2image(byte[] data,String path){ if(data.length<3||path.equals("")) return; try{ FileImageOutputStream imageOutput = new FileImageOutputStream(new File(path)); imageOutput.write(data, 0, data.length); imageOutput.close(); System.out.println("Make Picture success,Please find image in " + path); } catch(Exception ex) { System.out.println("Exception: " + ex); ex.printStackTrace(); } } //byte数组到16进制字符串 public String byte2string(byte[] data){ if(data==null||data.length<=1) return "0x"; if(data.length>200000) return "0x"; StringBuffer sb = new StringBuffer(); int buf[] = new int[data.length]; //byte数组转化成十进制 for(int k=0;k<data.length;k++){ buf[k] = data[k]<0?(data[k]+256):(data[k]); } //十进制转化成十六进制 for(int k=0;k<buf.length;k++){ if(buf[k]<16) sb.append("0"+Integer.toHexString(buf[k])); else sb.append(Integer.toHexString(buf[k])); } return "0x"+sb.toString().toUpperCase(); } }
本文复制参考:http://blog.csdn.net/u012151597/article/details/52945560?locationNum=4&fps=1
感谢作者”洋葱花瓣”的整理.
阅读全文
0 0
- java图片的导出,并压缩
- java导出excel并压缩
- java 上传并压缩图片
- java导出word并压缩,含有表格,表格中插入图片
- java将文字写在图片上,并做成压缩包导出到客户端
- java导出word并压缩,含有表
- JAVA压缩图片并打成ZIP
- JAVA压缩图片并打成ZIP
- java 上传图片 并压缩图片大小
- java 上传图片 并压缩图片大小
- java 导出word并插入图片
- Java把文件夹打成压缩包并导出
- Java-从url获取文件信息,压缩并导出
- java简单的图片压缩
- 图片压缩的Java实现
- java 实现导出图片-zip压缩包方式
- 利用jdom.jar导出成.xml文件,并压缩,并下载所压缩的文件
- java上传并压缩图片(等比例压缩或者原尺寸压缩)
- 代理模式
- YII2 RESTFUL开发
- jmeter应用---逻辑控制器(一)
- JDBC-Driver、PostgreSQL的SQL语句参数上限错误分析及解决办法(源码)
- JDBC
- java图片的导出,并压缩
- tomcat配置-修改tomcat默认的8080端口
- IP地址
- POJ1062昂贵的聘礼(Dijkstra+限制)
- HTML5(video)
- Qt小程序(四)-添加窗口部件到Qt Designer
- 抽象类要点
- 时间问题
- JSON中的get和opt方法的区别