Java图片上传压缩处理

  1. import java.awt.Image;   
  2. import java.awt.image.BufferedImage;   
  3. import java.io.File;   
  4. import java.io.FileNotFoundException;
  5. import java.io.FileOutputStream;   
  6. import java.io.IOException;   
  7.    
  8. import javax.imageio.ImageIO;   
  9.    
  10. import com.sun.image.codec.jpeg.JPEGCodec;   
  11. import com.sun.image.codec.jpeg.JPEGEncodeParam;   
  12. import com.sun.image.codec.jpeg.JPEGImageEncoder;
  13.    
  14. public class ImageZipUtil {   
  15.    
  16.     /**
  17.      * 等比例压缩图片文件<br> 先保存原文件,再压缩、上传
  18.      * @param oldFile  要进行压缩的文件
  19.      * @param newFile  新文件
  20.      * @param width  宽度 //设置宽度时(高度传入0,等比例缩放)
  21.      * @param height 高度 //设置高度时(宽度传入0,等比例缩放)
  22.      * @param quality 质量
  23.      * @return 返回压缩后的文件的全路径
  24.      */   
  25.     public static String zipImageFile(File oldFile,File newFile, int width, int height,   
  26.             float quality) {   
  27.         if (oldFile == null) {   
  28.             return null;   
  29.         }   
  30.         try {   
  31.             /** 对服务器上的临时文件进行处理 */   
  32.             Image srcFile = ImageIO.read(oldFile);   
  33.             int w = srcFile.getWidth(null);   
  34.         //  System.out.println(w);   
  35.             int h = srcFile.getHeight(null);   
  36.         //  System.out.println(h);   
  37.             double bili;   
  38.             if(width>0){   
  39.                 bili=width/(double)w;   
  40.                 height = (int) (h*bili);   
  41.             }else{   
  42.                 if(height>0){   
  43.                     bili=height/(double)h;   
  44.                     width = (int) (w*bili);   
  45.                 }   
  46.             }   
  47.             /** 宽,高设定 */   
  48.             BufferedImage tag = new BufferedImage(width, height,   
  49.                     BufferedImage.TYPE_INT_RGB);   
  50.             tag.getGraphics().drawImage(srcFile, 0, 0, width, height, null);   
  51.             //String filePrex = oldFile.getName().substring(0, oldFile.getName().indexOf('.'));   
  52.             /** 压缩后的文件名 */   
  53.             //newImage = filePrex + smallIcon+  oldFile.getName().substring(filePrex.length());   
  54.    
  55.             /** 压缩之后临时存放位置 */   
  56.             FileOutputStream out = new FileOutputStream(newFile);   
  57.    
  58.             JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);   
  59.             JPEGEncodeParam jep = JPEGCodec.getDefaultJPEGEncodeParam(tag);   
  60.             /** 压缩质量 */   
  61.             jep.setQuality(quality, true);   
  62.             encoder.encode(tag, jep);   
  63.             out.close();   
  64.    
  65.         } catch (FileNotFoundException e) {   
  66.             e.printStackTrace();   
  67.         } catch (IOException e) {   
  68.             e.printStackTrace();   
  69.         }   
  70.         return newFile.getAbsolutePath();   
  71.     }   
  72.    
  73.     /**
  74.      * 按宽度高度压缩图片文件<br> 先保存原文件,再压缩、上传
  75.      * @param oldFile  要进行压缩的文件全路径
  76.      * @param newFile  新文件
  77.      * @param width  宽度
  78.      * @param height 高度
  79.      * @param quality 质量
  80.      * @return 返回压缩后的文件的全路径
  81.      */   
  82.     public static String zipWidthHeightImageFile(File oldFile,File newFile, int width, int height,   
  83.             float quality) {   
  84.         if (oldFile == null) {   
  85.             return null;   
  86.         }   
  87.         String newImage = null;   
  88.         try {   
  89.             /** 对服务器上的临时文件进行处理 */   
  90.             Image srcFile = ImageIO.read(oldFile);   
  91.             int w = srcFile.getWidth(null);   
  92.         //  System.out.println(w);   
  93.             int h = srcFile.getHeight(null);   
  94.         //  System.out.println(h);   
  95.    
  96.             /** 宽,高设定 */   
  97.             BufferedImage tag = new BufferedImage(width, height,BufferedImage.TYPE_INT_RGB);   
  98.             tag.getGraphics().drawImage(srcFile, 0, 0, width, height, null);   
  99.             //String filePrex = oldFile.substring(0, oldFile.indexOf('.'));   
  100.             /** 压缩后的文件名 */   
  101.             //newImage = filePrex + smallIcon+ oldFile.substring(filePrex.length());   
  102.    
  103.             /** 压缩之后临时存放位置 */   
  104.             FileOutputStream out = new FileOutputStream(newFile);   
  105.    
  106.             JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);   
  107.             JPEGEncodeParam jep = JPEGCodec.getDefaultJPEGEncodeParam(tag);   
  108.             /** 压缩质量 */   
  109.             jep.setQuality(quality, true);   
  110.             encoder.encode(tag, jep);   
  111.             out.close();   
  112.         } catch (FileNotFoundException e) {   
  113.             e.printStackTrace();   
  114.         } catch (IOException e) {   
  115.             e.printStackTrace();   
  116.         }   
  117.         return newImage;   
  118.     }   
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java 图片压缩处理可以使用 Java 图像处理库 ImageIO 和 Java 压缩库 ZipOutputStream。 以下是一个简单的 Java 图片压缩处理实现示例: 1. 获取上图片文件。 2. 使用 ImageIO 读取图片文件,将其转换为 BufferedImage 对象。 3. 使用 BufferedImage 的 getScaledInstance() 方法缩放图片。 4. 使用 ImageIO 将缩放后的 BufferedImage 对象写入临时文件。 5. 使用 ZipOutputStream 压缩临时文件。 6. 将压缩后的文件上到服务器。 以下是示例代码: ```java import java.awt.image.BufferedImage; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; import javax.imageio.ImageIO; public class ImageUploadCompress { public void uploadAndCompress(File imageFile, String zipFileName, int width, int height) throws IOException { // 读取图片文件 BufferedImage originalImage = ImageIO.read(new FileInputStream(imageFile)); // 缩放图片 BufferedImage scaledImage = originalImage.getScaledInstance(width, height, BufferedImage.SCALE_SMOOTH); // 写入临时文件 File tempFile = File.createTempFile("temp_", ".jpg"); ImageIO.write(scaledImage, "jpg", tempFile); // 压缩临时文件 ZipOutputStream zip = new ZipOutputStream(new FileOutputStream(zipFileName)); zip.putNextEntry(new ZipEntry(tempFile.getName())); FileInputStream in = new FileInputStream(tempFile); byte[] buffer = new byte[1024]; int len; while ((len = in.read(buffer)) > 0) { zip.write(buffer, 0, len); } zip.closeEntry(); in.close(); zip.close(); // 将压缩后的文件上到服务器 // ... } } ``` 此示例仅演示了基本的图片压缩处理,实际应用中还需要考虑文件上安全和性能等问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值