`
liuwei1981
  • 浏览: 772428 次
  • 性别: Icon_minigender_1
  • 来自: 太原
博客专栏
F8258633-f7e0-30b8-bd3a-a0836a5f4de5
Java编程Step-by...
浏览量:161296
社区版块
存档分类
最新评论

java处理图片缩放

阅读更多
public static boolean compressImage(File file, String directoryFileName,
			int width, int height, boolean proportion) {
		boolean ret = false;
		FileOutputStream fileOutputStream = null;
		try {
			if (file == null || directoryFileName == null) {
				return ret;
			}

			fileOutputStream = new FileOutputStream(new File(directoryFileName));
			Image image = ImageIO.read(file);
			if (image.getWidth(null) == -1) {
				return ret;
			}

			int newWidth = 0;
			int newHeight = 0;

			if (image.getWidth(null) > width || image.getHeight(null) > height) {
				if (proportion) {
					int rate1 = image.getWidth(null) / width;
					int rate2 = image.getHeight(null) / height;
					int rate = rate1 > rate2 ? rate1 : rate2;
					newWidth = image.getWidth(null) / rate;
					newHeight = image.getHeight(null) / rate;
				} else {
					newWidth = width;
					newHeight = height;
				}
			} else {
				newWidth = image.getWidth(null);
				newHeight = image.getHeight(null);
			}

			BufferedImage bufferedImage = new BufferedImage(newWidth,
					newHeight, BufferedImage.TYPE_INT_RGB);

			bufferedImage.getGraphics().drawImage(
					image.getScaledInstance(newWidth, newHeight,
							image.SCALE_SMOOTH), 0, 0, null);

			JPEGImageEncoder encoder = JPEGCodec
					.createJPEGEncoder(fileOutputStream);
			encoder.encode(bufferedImage);
			fileOutputStream.close();

			ret = true;

		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			if (fileOutputStream != null) {
				try {
					fileOutputStream.close();
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		}
		return ret;
	}

 正在的改版的网站需要增加一个功能,对会员用户上传的图片选择一部分进行首页处理,虽然在用户上传图片时候已经对上传图片大小进行了限制,但限制的大小,如果提交到首页显示,很影响首页打开的速度,所以,需要将选择进行首页显示的图片重新进行缩放处理,以适合首页显示。

 

网上找了很多资料,但不知道为什么只对jpeg格式的图片处理有效,其他的都会报格式异常错误,终于找到这个类,对基本的格式图片都可以进行处理:

package com.common.helper;

import java.io.*;
import java.util.*;
import com.sun.image.codec.jpeg.*;
import java.awt.image.*;
import java.awt.*;
import java.net.*;
import java.applet.*;
import java.sql.*;
//缩略图类,
//本java类能将jpg图片文件,进行等比或非等比的大小转换。
//具体使用方法
//s_pic(大图片路径,生成小图片路径,大图片文件名,生成小图片文名,生成小图片宽度,生成小图片高度,是否等比缩放(默认为true))
public class DwindlePic {

    String InputDir; //输入图路径
    String OutputDir; //输出图路径
    String InputFileName; //输入图文件名
    String OutputFileName; //输出图文件名
    int OutputWidth = 80; //默认输出图片宽
    int OutputHeight = 80; //默认输出图片高
    int rate = 0;
    boolean proportion = true; //是否等比缩放标记(默认为等比缩放)

    public DwindlePic() {
        //初始化变量
        InputDir = "";
        OutputDir = "";
        InputFileName = "";
        OutputFileName = "";
        OutputWidth = 80;
        OutputHeight = 80;
        rate = 0;
    }

    public boolean s_pic() {
//        BufferedImage image;
//        String NewFileName;
//建立输出文件对象
        File file = new File(OutputDir + OutputFileName);
        FileOutputStream tempout = null;
        try {
            tempout = new FileOutputStream(file);
        } catch (Exception ex) {
            System.out.println(ex.toString());
        }
        Image img = null;
        Toolkit tk = Toolkit.getDefaultToolkit();
        Applet app = new Applet();
        MediaTracker mt = new MediaTracker(app);
        try {
            img = tk.getImage(InputDir + InputFileName);
            mt.addImage(img, 0);
            mt.waitForID(0);
        } catch (Exception e) {
            e.printStackTrace();
        }

        if (img.getWidth(null) == -1) {
//            System.out.println(" can't read,retry!" + "<BR>");
            return false;
        } else {
            int new_w;
            int new_h;
            if (this.proportion == true) { //判断是否是等比缩放.
//为等比缩放计算输出的图片宽度及高度
                double rate1 = ((double) img.getWidth(null)) / (double) OutputWidth +
                        0.1;
                double rate2 = ((double) img.getHeight(null)) / (double) OutputHeight +
                        0.1;
                double rate = rate1 > rate2 ? rate1 : rate2;
                new_w = (int) (((double) img.getWidth(null)) / rate);
                new_h = (int) (((double) img.getHeight(null)) / rate);
            } else {
                new_w = OutputWidth; //输出的图片宽度
                new_h = OutputHeight; //输出的图片高度
            }
            BufferedImage buffImg = new BufferedImage(new_w, new_h,
                    BufferedImage.TYPE_INT_RGB);

            Graphics g = buffImg.createGraphics();

            g.setColor(Color.white);
            g.fillRect(0, 0, new_w, new_h);

            g.drawImage(img, 0, 0, new_w, new_h, null);
            g.dispose();

            JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(tempout);
            try {
                encoder.encode(buffImg);
                tempout.close();
            } catch (IOException ex) {
                System.out.println(ex.toString());
            }
        }
        return true;
    }

    public boolean s_pic(String InputDir, String OutputDir, String InputFileName,
            String OutputFileName) {
//输入图路径
        this.InputDir = InputDir;
//输出图路径
        this.OutputDir = OutputDir;
//输入图文件名
        this.InputFileName = InputFileName;
//输出图文件名
        this.OutputFileName = OutputFileName;
        return s_pic();
    }

    public boolean s_pic(String InputDir, String OutputDir, String InputFileName,
            String OutputFileName, int width, int height, boolean gp) {
//输入图路径
        this.InputDir = InputDir;
//输出图路径
        this.OutputDir = OutputDir;
//输入图文件名
        this.InputFileName = InputFileName;
//输出图文件名
        this.OutputFileName = OutputFileName;
//设置图片长宽
        setW_H(width, height);
//是否是等比缩放 标记
        this.proportion = gp;
        return s_pic();
    }

    public void setInputDir(String InputDir) {
        this.InputDir = InputDir;
    }

    public void setOutputDir(String OutputDir) {
        this.OutputDir = OutputDir;
    }

    public void setInputFileName(String InputFileName) {
        this.InputFileName = InputFileName;
    }

    public void setOutputFileName(String OutputFileName) {
        this.OutputFileName = OutputFileName;
    }

    public void setOutputWidth(int OutputWidth) {
        this.OutputWidth = OutputWidth;
    }

    public void setOutputHeight(int OutputHeight) {
        this.OutputHeight = OutputHeight;
    }

    public void setW_H(int width, int height) {
        this.OutputWidth = width;
        this.OutputHeight = height;
    }

    public static void main(String[] a) {
        //s_pic(大图片路径,生成小图片路径,大图片文件名,生成小图片文名,生成小图片宽度,生成小图片高度)
        DwindlePic mypic = new DwindlePic();
        System.out.println(
                mypic.s_pic("c:/",
                "d:/",
                "aa.bmp", "wwww.jpg", 120, 80, true));
    }
}

 

在使用时将用户上传的图片进行压缩处理,再转存到首页的图片目录中。over!

分享到:
评论
4 楼 Shmily奕蝶 2012-02-17  
直接用这段代码就可以啦??
3 楼 east_java 2009-10-09  
缩放后 怎么变模糊了。
2 楼 liuwei1981 2008-07-22  
什么意思?
1 楼 zhongxun20 2008-07-21  
   都显示不了[color=red][/color][b][/b][img][/img]

相关推荐

    java图片缩放 java缩略图 缩略图 java图片处理

    java图片缩放 java缩略图 缩略图 java图片处理

    java 图片缩放处理

    本文将深入探讨如何使用Java进行图片缩放处理,并确保在压缩过程中尽可能减少失真,同时允许自定义压缩后的图片质量。 首先,我们需要了解Java中的核心库`java.awt.image`和`javax.imageio`,它们提供了处理图像的...

    java实现图片缩放

    要使用ImageMagick在Java中进行图片缩放,首先需要在系统中安装ImageMagick,然后添加`Imagemagick-Java`库到项目中。这个库通常以JAR文件的形式提供,可以将其添加到项目的类路径中。 接下来,我们需要了解如何...

    java图片缩放处理

    在Java编程语言中,处理图片是一项常见的任务,包括图片的缩放、比例调整以及压缩等操作。这些功能在各种应用场景中都有所体现,比如网页设计、图像处理软件、移动应用等。下面我们将深入探讨Java中如何进行图片的...

    java处理图片大小等比例缩放,自定义修改图片大小,截取,水印

    以上就是Java处理图片的一些核心知识点,具体应用时需要结合实际情况进行调整。在压缩包中的"java图片大小转换"文件中,很可能包含了实现这些功能的示例代码和使用说明,可以参考学习以加深理解。在实际开发中,我们...

    Java图像缩放 图片缩放

    在Java编程领域,图片处理是一项常见的任务,其中图像缩放是尤为重要的操作。当我们需要调整图片大小,以适应不同的应用场景,如网页、移动设备或打印等,就需要进行图像缩放。本文将深入探讨Java中实现图像缩放的...

    java高清图片缩放、压缩、切割、水印源码例子

    高清缩放图像、切割图像、图像类型转换、彩色转黑白、文字水印、图片水印等 功能非常强大,并且很清晰,请给好评:)

    java从图片缩放

    在Java编程中,图片缩放是一项常见的任务,特别是在开发图形用户界面(GUI)或处理图像数据时。这个主题涉及到图像处理的基本概念、Java中的图像API以及如何使用它们来实现缩放功能。以下是对这一主题的详细说明: ...

    java绘图 图片缩放 实例代码

    以上就是使用Java AWT进行图片缩放的基本步骤。在实际应用中,可能还需要考虑性能优化、异常处理以及支持不同格式的图片文件等细节。通过调整缩放算法和质量参数,我们可以获得更高质量的缩放结果。学习和掌握这些...

    java gif图片缩放代码及帮助文档

    Java GIF图片缩放是开发过程中常见的一项任务,尤其是在处理动态图像时。GIF是一种支持动画的格式,广泛用于网络上。在Java中处理GIF图片,我们通常会使用到一些库,比如`gif4j`,这是一个轻量级且功能强大的Java库...

    java 图片缩放类

    根据提供的文件信息,我们可以总结出以下关于“Java图片缩放类”的相关知识点: ### Java 图片缩放类概述 在Java开发中,处理图像时经常需要进行缩放操作以适应不同的显示需求或优化资源占用。Java 提供了多种库来...

    java高清处理图片

    ### Java高清处理图片:利用ImageMagick提升图片质量和效率 #### 背景与需求 在实际项目开发中,图片处理是一项常见的需求,包括但不限于图片的压缩、尺寸调整以及添加水印等操作。传统的Java库虽然能够实现这些...

    java 图片缩放,区域裁剪,水印,旋转,保持比例等处理

    网上流传的Java处理图片的代码,虽然可对图片进行简单处理,但效果并不理想。 为了解决这个问题,我也是在网上找了好久,看了很多资料,功夫不负有心人,最终找到了一个处理图片十分棒的开源框架。 特此拿出来与大家...

    java 图片的缩放与拉伸

    在Java编程语言中,处理图像是一项常见的任务,其中包括图片的缩放和拉伸。本文将深入探讨如何使用Java实现这一功能,特别是在实际项目中的应用。标题"java 图片的缩放与拉伸"直指核心问题,即如何改变图片的尺寸以...

    JAVA图片或文字水印以及图片缩放

    包含了一些java对图片操作处理的方法: 1.给图片添加图片水印 2.给图片添加文字水印 3.图片缩放 *主方法测试代码简单易懂

    图片缩放图片缩放

    在Authorware这个强大的多媒体创作工具中,图片缩放是一个常用的操作,它可以帮助用户根据需要调整图像的大小,适应不同的展示需求。以下将详细介绍如何在Authorware中进行图片缩放以及相关的知识点。 一、...

    java处理上传后的图片

    ### Java处理上传后的图片知识点详解 #### 一、图片上传及处理概述 在现代Web应用中,用户上传图片的功能十分常见。为了优化用户体验并减轻服务器存储压力,通常会在图片上传后进行一系列处理,如压缩、缩放等。...

    图片缩放、压缩技术java实现

    Java提供了多种库来处理图片压缩,如Apache Commons Imaging(旧称Sanselan)和ImageMagick的Java绑定。其中,Java Advanced Imaging (JAI) 是Java标准扩展的一部分,它提供了丰富的图像处理功能,包括压缩。 使用...

    图片缩放剪切处理代码

    这个“图片缩放剪切处理代码”主题涉及到的是使用JavaScript、ASP、PHP和可能的JSP技术来实现这些功能。下面我们将深入探讨这些技术及其在图片处理中的应用。 首先,JavaScript(JS)是一种广泛使用的客户端脚本...

Global site tag (gtag.js) - Google Analytics