`
phoenix007
  • 浏览: 436153 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

java对图片进行等比例缩放

阅读更多

 

public  class ImageUtils {
		private Image	srcImage	= null;
		private File	srcFile  = null;
		private File	destFile	= null;
		private String	fileSuffix	= null;
        
		private int imageWidth = 0;
		private int imageHeight = 0;

		public ImageUtils(String fileName) throws IOException {
			this(new File(fileName));
		}

		public ImageUtils(File fileName) throws IOException {
			File _file = fileName;
			_file.setReadOnly();
			this.srcFile = _file;
			this.fileSuffix = _file.getName().substring(
					(_file.getName().indexOf(".") + 1),
					(_file.getName().length()));
			this.destFile = new File(this.srcFile.getPath().substring(0,
					(this.srcFile.getPath().lastIndexOf(".")))
					+ PIC_TEMPORARY + "." + this.fileSuffix);
			srcImage = javax.imageio.ImageIO.read(_file);
			//得到图片的原始大小, 以便按比例压缩。
			imageWidth = srcImage.getWidth(null);
			imageHeight = srcImage.getHeight(null);
			System.out.println("width: " + imageWidth);
			System.out.println("height: " + imageHeight);		
		}

		/**
		 * 强制压缩/放大图片到固定的大小
		 * @param w int 新宽度
		 * @param h int 新高度
		 * @throws IOException
		 */
		public void resize(int w, int h) throws IOException {
			//得到合适的压缩大小,按比例。
			if ( imageWidth >= imageHeight)
			{
				w = w;
				h = (int)Math.round((imageHeight * w * 1.0 / imageWidth));
			}
			else 
			{
				h = h;
				w = (int)Math.round((imageWidth * h * 1.0 / imageHeight));
			}

			//构建图片对象
			BufferedImage _image = new BufferedImage(w, h,
					BufferedImage.TYPE_INT_RGB);
			//绘制缩小后的图
			_image.getGraphics().drawImage(srcImage, 0, 0, w, h, null);
			//输出到文件流
			FileOutputStream out = new FileOutputStream(destFile);
			JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
			encoder.encode(_image);
			out.flush();
			out.close();
			
		}
	}


下边是另外一种模式,不过原理都是一样的,就是等比例压缩,比较原图的宽高来确定压缩的比例。


Java中图片的缩放(按比例)

现在的一些应用中,我们常常需要把原始图片存到数据库中去,而显示的时候可能是各种缩小后的图片(长宽比例不变,不然图片会变形)。比如图片管理的时候先显示一系列小图片,点击后显示放大的图片。但是现在的图片有的height>width,而有的height<width,长宽比例个不相同,当显示一系列小图片的时候可能不整齐,一般网页上的方法是用固定的正方形做底色,然后在上面显示缩小后的图片。下面的resizeImage方法正是此问题的solution,输入参数maxDim就是固定的正方形的长度:

    此外,此方法的类需要:
    import com.sun.jimi.core.raster.JimiRasterImage;
    import com.sun.jimi.core.Jimi;  
            

    /** resize the image in byte stream(format: [in]GIF, JPG; [out]JPG)
     *  @param in - the binary stream of the original picture in GIF or JPG
     *  @param maxDim - the bigger one between height and width after the picture is resized
     *  @return the binary stream of the resized picture in JPG
     */
    public static byte[] resizeImage(byte[] in,int maxDim)
    {
        try
        {
            Image inImage=Toolkit.getDefaultToolkit().createImage(in);
            ImageIcon inImageIcon = new ImageIcon(in); 

            int imh = inImageIcon.getIconHeight();
            int imw = inImageIcon.getIconWidth();
            double scale;
            if( imh <= maxDim && imw <= maxDim )
                scale = 1;
            else if( imh > imw )
               scale = (double) maxDim / (double) imh;
            else
               scale = (double) maxDim / (double) imw; 

            int scaledW = (int) (scale * imw);
            int scaledH = (int) (scale * imh); 

            Image img = inImage.getScaledInstance(scaledW, scaledH, Image.SCALE_FAST);
            ByteArrayOutputStream outStream = new ByteArrayOutputStream();
            JimiRasterImage raster = Jimi.createRasterImage(img.getSource());
            // --java.io.ByteArrayOutputStream
            Jimi.putImage("image/jpeg", raster, outStream);
            outStream.flush();
            outStream.close();
            return outStream.toByteArray(); 

        }
        catch(Exception ex)
        {
            ex.printStackTrace();
            return null;
        }
    }

 

分享到:
评论
3 楼 yflxc 2013-10-15  
com.sun.jimi.core.raster.JimiRasterImage这个类在哪个jar包里啊
2 楼 bo_hai 2013-10-01  
等比例压缩的算法是不是可以改进呢?
1 楼 h521999 2010-06-13  
请教一下,当resizeImage方法返回byte[]然后怎样生成图片呢?

相关推荐

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

    在Java编程语言中,处理图片是一项常见的任务,包括调整图片大小、等比例缩放、裁剪、压缩以及添加水印等。以下将详细介绍这些知识点: 1. **等比例缩放图片**: 在Java中,我们可以使用`java.awt.image....

    图片按比例缩放

    在本篇文章中,我们将深入探讨如何进行图片按比例缩放,以及这一过程中的相关知识点。 首先,我们来理解什么是“按比例缩放”。比例缩放是指保持图片的长宽比,即纵横比不变,只改变其尺寸大小。如果不按比例缩放,...

    图片按照等比例缩放

    应为图片太大,所以按照一定比例缩放

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

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

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

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

    java从图片缩放

    缩放图像通常有两种方式:按比例缩放(等比例缩放)和指定新的尺寸(非等比例缩放)。等比例缩放可以保持原始图像的比例,避免拉伸或压缩图像。非等比例缩放可能会改变图像的宽高比。 - **等比例缩放**:可以使用...

    java图片缩放处理

    二、图片比例处理 比例处理通常是指保持原图宽高比进行缩放。上述代码实际上已经实现了这一功能,通过计算保持原图比例的新高度,确保了缩放后图片不失真。 三、图片压缩 1. 使用`ImageIO`类: 除了缩放,我们还...

    java实现图片缩放

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

    阿里巴巴 simpleimage 图片处理工具类 功能 等比例缩放 裁切 加水印 复合操作例子和jar包

    这款工具提供了丰富的功能,包括等比例缩放、裁切、添加水印以及复合操作等,极大地简化了开发者对图像进行后期处理的工作流程。接下来,我们将详细探讨这些功能及其使用方法。 一、等比例缩放 等比例缩放是图像...

    Java图像缩放 图片缩放

    当我们需要调整图片大小,以适应不同的应用场景,如网页、移动设备或打印等,就需要进行图像缩放。本文将深入探讨Java中实现图像缩放的技术,并提供一个名为ZPhotoer的工具类作为示例。 图像缩放主要涉及两个核心...

    用JAVA获取视频文件中的帧图片并等比缩放

    通过使用Java语言和javacv库,我们可以快速获取视频文件中的帧图片,并对其进行等比缩放,以满足不同的应用需求。 知识点一:视频文件中的帧图片获取 * 视频文件中的帧图片获取是指从视频文件中抽取出每一帧图片的...

    java 图片上传,可预览可剪切可缩放

    在Java开发中,图片上传、预览、剪切和缩放是常见的功能需求,尤其在Web应用中。这里,我们主要探讨如何实现这些功能,并基于`swfupload`这个库来构建一个完整的解决方案。 首先,`swfupload`是一个古老的Flash上传...

    按比例缩放图片

    ### 按比例缩放图片的关键技术点与实现方法 #### 一、概念与应用场景 在数字图像处理领域,按比例缩放图片是一项常见的需求。它不仅被广泛应用于Web开发中,例如为了优化网页加载速度而对上传的图片进行尺寸调整;...

    批量缩放图片的Java实现

    7. **配置参数**:在`PictureResize.java`程序中,很可能包含了配置图片缩放大小的参数,这样用户可以根据需求调整缩放比例。 总之,批量缩放图片的Java实现是一个结合了文件操作、图像处理和可能的并发编程的技术...

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

    下面将详细解释如何使用Java和`gif4j`库进行GIF图片的缩放操作。 首先,你需要将`gif4j`库添加到项目依赖中。如果你使用Maven,可以在`pom.xml`文件中添加如下依赖: ```xml &lt;groupId&gt;com.xfio&lt;/groupId&gt; ...

    java对图片进行操作.rar_java 图片剪裁_java图片_图片

    本资源“java对图片进行操作.rar”提供了一种用Java进行图像操作的工具类,特别关注于图片的剪裁、重置大小以及按比例缩小等功能。以下是关于这些功能的详细解释和实现方法。 首先,图片剪裁是调整图像大小并提取其...

    图片压缩,等比例放缩图片

    为了达到固定大小,可能需要先等比例缩放,然后对超出部分进行裁剪,或者使用插值算法填充不足的部分。具体操作如下: 1. 先等比例缩放:计算出保持比例的新尺寸,确保图片不会变形。 2. 裁剪或填充:如果新尺寸...

    java利用双线性算法实现图片缩放

    采用双线性算法实现图片的缩放,今天,经过多次实现终于完成了图片的缩放,来给大家分享一下

    上传图片 - 等比缩放

    总结来说,“上传图片 - 等比缩放”涉及图片上传、读取、等比缩放、裁剪、保存和返回结果等多个步骤。通过合理运用编程语言和图像处理库,我们可以高效地生成符合特定尺寸需求的等比缩略图,以满足各种应用场景的...

Global site tag (gtag.js) - Google Analytics