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
感谢作者”洋葱花瓣”的整理.