`
rain_2372
  • 浏览: 676290 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

java 将图片按照指定的图片尺寸压缩

    博客分类:
  • java
阅读更多
import java.awt.Graphics2D; 
import java.awt.Image; 
import java.awt.image.BufferedImage; 
import java.io.File; 
import java.io.FileInputStream; 
import java.io.FileNotFoundException; 
import java.io.IOException; 
import javax.imageio.ImageIO; 
 
/**
* * @author WQ * @date 2011-01-14 * @versions 1.0 图片压缩工具类 提供的方法中可以设定生成的
* 缩略图片的大小尺寸等
*/ 
public class ImageUtil { 
    /** * 图片文件读取 * * @param srcImgPath * @return */ 
    private static BufferedImage InputImage(String srcImgPath) { 
        BufferedImage srcImage = null; 
        try { 
            FileInputStream in = new FileInputStream(srcImgPath); 
            srcImage = javax.imageio.ImageIO.read(in); 
        } catch (IOException e) { 
            System.out.println("读取图片文件出错!" + e.getMessage()); 
            e.printStackTrace(); 
        } 
        return srcImage; 
    } 
  public static void main(String args[]){
try {
Map<Integer, String> map = readfile("E:/yuan", null);
for (int i = 0; i < map.size(); i++) {
System.out.println(map.get(i) + " ==" + i);
System.out.println();
String oldpath = map.get(i);
compressImage(map.get(i), "E:/ww/_" + i + ".png", 100, 75);
}
} catch (Exception ex) {
}
System.out.println("ok");
  }
    /**
     * * 将图片按照指定的图片尺寸压缩 * * @param srcImgPath :源图片路径 * @param outImgPath *
     * :输出的压缩图片的路径 * @param new_w * :压缩后的图片宽 * @param new_h * :压缩后的图片高
     */ 
    public static void compressImage(String srcImgPath, String outImgPath, 
            int new_w, int new_h) { 
        BufferedImage src = InputImage(srcImgPath); 
        disposeImage(src, outImgPath, new_w, new_h); 
    } 
 
    /**
     * * 指定长或者宽的最大值来压缩图片 * * @param srcImgPath * :源图片路径 * @param outImgPath *
     * :输出的压缩图片的路径 * @param maxLength * :长或者宽的最大值
     */ 
    public static void compressImage(String srcImgPath, String outImgPath, 
            int maxLength) { 
        // 得到图片 
        BufferedImage src = InputImage(srcImgPath); 
        if (null != src) { 
            int old_w = src.getWidth(); 
            // 得到源图宽 
            int old_h = src.getHeight(); 
            // 得到源图长 
            int new_w = 0; 
            // 新图的宽 
            int new_h = 0; 
            // 新图的长 
            // 根据图片尺寸压缩比得到新图的尺寸 
            if (old_w > old_h) { 
                // 图片要缩放的比例 
                new_w = maxLength; 
                new_h = (int) Math.round(old_h * ((float) maxLength / old_w)); 
            } else { 
                new_w = (int) Math.round(old_w * ((float) maxLength / old_h)); 
                new_h = maxLength; 
            } 
            disposeImage(src, outImgPath, new_w, new_h); 
        } 
    } 
 
    /** * 处理图片 * * @param src * @param outImgPath * @param new_w * @param new_h */ 
    private synchronized static void disposeImage(BufferedImage src, 
            String outImgPath, int new_w, int new_h) { 
        // 得到图片 
        int old_w = src.getWidth(); 
        // 得到源图宽 
        int old_h = src.getHeight(); 
        // 得到源图长 
        BufferedImage newImg = null; 
        // 判断输入图片的类型 
        switch (src.getType()) { 
        case 13: 
            // png,gifnewImg = new BufferedImage(new_w, new_h, 
            // BufferedImage.TYPE_4BYTE_ABGR); 
            break; 
        default: 
            newImg = new BufferedImage(new_w, new_h, BufferedImage.TYPE_INT_RGB); 
            break; 
        } 
        Graphics2D g = newImg.createGraphics(); 
        // 从原图上取颜色绘制新图 
        g.drawImage(src, 0, 0, old_w, old_h, null); 
        g.dispose(); 
        // 根据图片尺寸压缩比得到新图的尺寸 
        newImg.getGraphics().drawImage( 
                src.getScaledInstance(new_w, new_h, Image.SCALE_SMOOTH), 0, 0, 
                null); 
        // 调用方法输出图片文件 
        OutImage(outImgPath, newImg); 
    } 
 
    /**
     * * 将图片文件输出到指定的路径,并可设定压缩质量 * * @param outImgPath * @param newImg * @param
     * per
     */ 
    private static void OutImage(String outImgPath, BufferedImage newImg) { 
        // 判断输出的文件夹路径是否存在,不存在则创建 
        File file = new File(outImgPath); 
        if (!file.getParentFile().exists()) { 
            file.getParentFile().mkdirs(); 
        }// 输出到文件流 
        try { 
            ImageIO.write(newImg, outImgPath.substring(outImgPath 
                    .lastIndexOf(".") + 1), new File(outImgPath)); 
        } catch (FileNotFoundException e) { 
            e.printStackTrace(); 
        } catch (IOException e) { 
            e.printStackTrace(); 
        } 
    } 
public static Map<Integer, String> readfile(String filepath,
Map<Integer, String> pathMap) throws Exception {
if (pathMap == null) {
pathMap = new HashMap<Integer, String>();
}

File file = new File(filepath);
// 文件
if (!file.isDirectory()) {
pathMap.put(pathMap.size(), file.getPath());

} else if (file.isDirectory()) { // 如果是目录, 遍历所有子目录取出所有文件名
String[] filelist = file.list();
for (int i = 0; i < filelist.length; i++) {
File readfile = new File(filepath + "/" + filelist[i]);
if (!readfile.isDirectory()) {
pathMap.put(pathMap.size(), readfile.getPath());

} else if (readfile.isDirectory()) { // 子目录的目录
readfile(filepath + "/" + filelist[i], pathMap);
}
}
}
return pathMap;
}

转http://lijinzhe.blog.163.com/blog/static/62147668201222024822711/
分享到:
评论

相关推荐

    java将图片变成指定大小

    java将图片变成指定大小,不管是多大的图片

    图片压缩,不改变宽高

    使用两中方法进行压缩,可以只改变图片大小,如,原图片100kb,压缩后变成40kb。并且不改变宽高。 一.使用ImageMagick进行压缩类-Aa.java 需要做以下配置: 1.将jmagick.dll加入jdk\bin目录中 2.将jmagick.dll加入到...

    Android图片压缩结合多种压缩方式.zip

    Android图片压缩结合多种压缩方式,常用的有尺寸压缩、质量压缩以及通过JNI调用libjpeg库来进行压缩,三种方式结合使用实现指定图片内存大小,清晰度达到最优。

    EasyImageCompressor:通过简单的配置将图片压缩到指定的大小,指定的分辨率

    1、通过采样率压缩 + 缩放 + 质量压缩,使用简单的配置即可完成图片指定大小指定尺寸的精确压缩 2、内部采用线程池设计,默认在子线程执行压缩任务,在主线程回调onStart onError onSuccess方法 3、自动检测图片旋转...

    ImageCompressionUtils.java

    获取图片的路径,在根据bitmap压缩图片到指定的大小以及改变图片到任意尺寸(比如:400*500 的尺寸 100kb大小)

    Android开发人员不得不收集的代码

    finishToActivity : 结束到指定 Activity finishOtherActivities : 结束所有其他类型的 Activity finishAllActivities : 结束所有 Activity finishAllActivitiesExceptNewest: 结束除最新之外的所有 Activity App ...

    新版Android开发教程.rar

    程序可以采用 JAVA 开发,但是因为它的虚拟机 (Virtual Machine) Dalvik ,是将 JAVA 的 bytecode 转成 自 己的格式,回避掉需要付给 SUN 有关 JAVA 的授权费用。 对手机制造者的影响 � Android 是款开源的移动计算...

    web测试的一些关键点和重要点

    (2)、Web应用系统的图片尺寸要尽量地小,并且要能清楚地说明某件事情,一般都链接到某个具体的页面; (3)、验证所有页面字体的风格是否一致; (4)、背景颜色应该与字体颜色和前景颜色相搭配; (5)、图片的...

    Android开发资料合集--续

    92、图片压缩类 132 93、一次性退出所有Activity 136 95、Java替换字符串,不区分大小写 138 96、Java获得随机数 139 97、MD5加密 141 98、HTTP数据传输 141 从Internet获取数据 141 向Internet发送数据 143 99、...

    黑马程序员 安卓学院 万元哥项目经理 分享220个代码实例

    |--图片之获取SD卡所有及边界可调及压缩和软引用和内存回收 |--图片的LRU算法内存保存和读取 |--图片的缩放处理(防内存溢出) |--多媒体应用设计图 |--多线程下载 |--多线程下载及断点续传 |--多线程之AsyncTask的...

    Lerx 网站内容管理系统 v5.5.zip

    能获知图片的中央矩片后裁剪后并按照设定的尺寸进行缩放。能对指定栏目设定特定的裁剪宽度和高度。能对指定栏目下的文章设定原图上传。 16.★每个栏目可拥有独立的私有特定的HTML,可以无损后显示在栏目的显示页中...

    易语言程序免安装版下载

     第三方支持库,由源代码作者按照静态编译技术文档(参见sdk\static_docs)完成自身改造并提供静态库后,可支持静态编译。外部OCX组件和COM组件,不支持静态编译。  此次重大版本升级不影响以前的源代码(.e)和模块...

    jquery插件使用方法大全

    要等到页面全部加载完毕才执行,注意是全部加载,包括dom,图片等其它资源。 而$(document).ready(function(){ alert&#40;"hello"&#41;; });(1) 当dom加载完就可以执行了。 代码1同时做到表现和逻辑分离。并且可以在...

Global site tag (gtag.js) - Google Analytics