java图片的导出,并压缩
生活随笔
收集整理的這篇文章主要介紹了
java图片的导出,并压缩
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
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 blocke.printStackTrace();} catch (ArchiveException e) {// TODO Auto-generated catch blocke.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
感謝作者”洋蔥花瓣”的整理.
總結
以上是生活随笔為你收集整理的java图片的导出,并压缩的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [设计模式] ------ 工厂方法模式
- 下一篇: c语言 回合制小游戏,一个回合制小游戏的