`
king_tt
  • 浏览: 2138884 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Java图片上传压缩处理

 
阅读更多

我们在项目中经常会出现图片的上传、压缩处理的情况,例如等比例压缩、按照一定的宽度和高度压缩等,公共代码如下:

import java.awt.Image;  
import java.awt.image.BufferedImage;  
import java.io.File;  
import java.io.FileNotFoundException;  
import java.io.FileOutputStream;  
import java.io.IOException;  
  
import javax.imageio.ImageIO;  
  
import com.sun.image.codec.jpeg.JPEGCodec;  
import com.sun.image.codec.jpeg.JPEGEncodeParam;  
import com.sun.image.codec.jpeg.JPEGImageEncoder;  
  
public class ImageZipUtil {  
  
    /** 
     * 等比例压缩图片文件<br> 先保存原文件,再压缩、上传 
     * @param oldFile  要进行压缩的文件 
     * @param newFile  新文件 
     * @param width  宽度 //设置宽度时(高度传入0,等比例缩放) 
     * @param height 高度 //设置高度时(宽度传入0,等比例缩放) 
     * @param quality 质量 
     * @return 返回压缩后的文件的全路径 
     */  
    public static String zipImageFile(File oldFile,File newFile, int width, int height,  
            float quality) {  
        if (oldFile == null) {  
            return null;  
        }  
        try {  
            /** 对服务器上的临时文件进行处理 */  
            Image srcFile = ImageIO.read(oldFile);  
            int w = srcFile.getWidth(null);  
        //  System.out.println(w);  
            int h = srcFile.getHeight(null);  
        //  System.out.println(h);  
            double bili;  
            if(width>0){  
                bili=width/(double)w;  
                height = (int) (h*bili);  
            }else{  
                if(height>0){  
                    bili=height/(double)h;  
                    width = (int) (w*bili);  
                }  
            }  
            /** 宽,高设定 */  
            BufferedImage tag = new BufferedImage(width, height,  
                    BufferedImage.TYPE_INT_RGB);  
            tag.getGraphics().drawImage(srcFile, 0, 0, width, height, null);  
            //String filePrex = oldFile.getName().substring(0, oldFile.getName().indexOf('.'));  
            /** 压缩后的文件名 */  
            //newImage = filePrex + smallIcon+  oldFile.getName().substring(filePrex.length());  
  
            /** 压缩之后临时存放位置 */  
            FileOutputStream out = new FileOutputStream(newFile);  
  
            JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);  
            JPEGEncodeParam jep = JPEGCodec.getDefaultJPEGEncodeParam(tag);  
            /** 压缩质量 */  
            jep.setQuality(quality, true);  
            encoder.encode(tag, jep);  
            out.close();  
  
        } catch (FileNotFoundException e) {  
            e.printStackTrace();  
        } catch (IOException e) {  
            e.printStackTrace();  
        }  
        return newFile.getAbsolutePath();  
    }  
  
    /** 
     * 按宽度高度压缩图片文件<br> 先保存原文件,再压缩、上传 
     * @param oldFile  要进行压缩的文件全路径 
     * @param newFile  新文件 
     * @param width  宽度 
     * @param height 高度 
     * @param quality 质量 
     * @return 返回压缩后的文件的全路径 
     */  
    public static String zipWidthHeightImageFile(File oldFile,File newFile, int width, int height,  
            float quality) {  
        if (oldFile == null) {  
            return null;  
        }  
        String newImage = null;  
        try {  
            /** 对服务器上的临时文件进行处理 */  
            Image srcFile = ImageIO.read(oldFile);  
            int w = srcFile.getWidth(null);  
        //  System.out.println(w);  
            int h = srcFile.getHeight(null);  
        //  System.out.println(h);  
  
            /** 宽,高设定 */  
            BufferedImage tag = new BufferedImage(width, height,BufferedImage.TYPE_INT_RGB);  
            tag.getGraphics().drawImage(srcFile, 0, 0, width, height, null);  
            //String filePrex = oldFile.substring(0, oldFile.indexOf('.'));  
            /** 压缩后的文件名 */  
            //newImage = filePrex + smallIcon+ oldFile.substring(filePrex.length());  
  
            /** 压缩之后临时存放位置 */  
            FileOutputStream out = new FileOutputStream(newFile);  
  
            JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);  
            JPEGEncodeParam jep = JPEGCodec.getDefaultJPEGEncodeParam(tag);  
            /** 压缩质量 */  
            jep.setQuality(quality, true);  
            encoder.encode(tag, jep);  
            out.close();  
        } catch (FileNotFoundException e) {  
            e.printStackTrace();  
        } catch (IOException e) {  
            e.printStackTrace();  
        }  
        return newImage;  
    }  

转自【http://www.open-open.com/lib/view/open1386941736387.html】

分享到:
评论

相关推荐

    java 图片压缩 iphone拍照上传旋转问题处理压缩工具类

    java 图片压缩 iphone拍照上传旋转问题处理,压缩工具类 首先导入jar 包,通过imgxz获取图片是否旋转属性,在调用旋转方法,旋转过来,然后在进行压缩

    java 图片压缩 加水印处理 可以批处理

    java 可以处理19.5 M以下的正常图片 , 不知道大图怎么处理 只能ps 了, jdk可能不行

    java对图片进行压缩

    java上传图片后进行压缩处理 本例子使用了jspsmart组件进行上传

    java图片压缩

    简单实用的java图片压缩工具类。目前仅支持jpg,png,gif(非动态)等图片

    Java中上传图片压缩处理的方法示例

    本篇文章主要介绍了Java中图片压缩处理的方法示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    java压缩图片程序代码

    * 压缩图片文件 * 先保存原文件,再压缩、上传 * @param oldFile 要进行压缩的文件全路径 * @param width 宽度 * @param height 高度 * @param quality 质量 * @param smallIcon 小图片的后缀 * @return ...

    java图片、文件处理

    java图片、文件处理,提供图片截切,图片压缩,上传,等

    压缩图片不失真,c# asp.net

    随着数码相机的普及,很多照片都是用数码相机拍摄出来的。但是数码相机拍摄出来的照片体积很大,不变在网络上传输, 因此要对图片进行处理。本实例就是对图片进行无损压缩,并且使相片的清晰度为最佳状态。

    详解Java实现批量压缩图片裁剪压缩多种尺寸缩略图一键批量上传图片

    主要介绍了Java实现批量压缩图片裁剪压缩多种尺寸缩略图一键批量上传图片,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

    Java处理PNG透明性总结的几种方法,好用

    Java处理PNG透明性总结的几种方法,好用Java处理PNG透明性总结的几种方法,好用Java处理PNG透明性总结的几种方法,好用Java处理PNG透明性总结的几种方法,好用Java处理PNG透明性总结的几种方法,好...

    解决java压缩图片透明背景变黑色的问题

    主要介绍了解决java压缩图片透明背景变黑色的问题,需要的朋友可以参考下

    java+jq+jcrop缩放裁剪上传图片

    在js中压缩,在页面上选定区域并上传,在java中根据参数处理图像,页面处理图片缩放裁剪上传的功能。

    java后台利用ffmpeg实现将视频截取某一帧图片并保存

    截取视频中的某一帧的图像含ffmpeg.jar 和调用方法和类

    java源码包---java 源码 大量 实例

     util实现Java图片水印添加功能,有添加图片水印和文字水印,可以设置水印位置,透明度、设置对线段锯齿状边缘处理、水印图片的路径,水印一般格式是gif,png,这种图片可以设置透明度、水印旋转等,可以参考代码...

    java开源包5

    Java Remote Desktop 是一个Java 的远程桌面软件,支持很多特性例如文件传输、数据压缩、颜色转换、键盘鼠标事件转换等等。 最短路径算法实现 k-shortest-paths 这是一个实现了 Yen 的排名算法的无环路径的项目 ...

    java源码包4

     util实现Java图片水印添加功能,有添加图片水印和文字水印,可以设置水印位置,透明度、设置对线段锯齿状边缘处理、水印图片的路径,水印一般格式是gif,png,这种图片可以设置透明度、水印旋转等,可以参考代码...

    java源码包3

     util实现Java图片水印添加功能,有添加图片水印和文字水印,可以设置水印位置,透明度、设置对线段锯齿状边缘处理、水印图片的路径,水印一般格式是gif,png,这种图片可以设置透明度、水印旋转等,可以参考代码...

    JAVA上百实例源码以及开源项目

     util实现Java图片水印添加功能,有添加图片水印和文字水印,可以设置水印位置,透明度、设置对线段锯齿状边缘处理、水印图片的路径,水印一般格式是gif,png,这种图片可以设置透明度、水印旋转等,可以参考代码...

    JAVA上百实例源码以及开源项目源代码

     util实现Java图片水印添加功能,有添加图片水印和文字水印,可以设置水印位置,透明度、设置对线段锯齿状边缘处理、水印图片的路径,水印一般格式是gif,png,这种图片可以设置透明度、水印旋转等,可以参考代码...

Global site tag (gtag.js) - Google Analytics