`
234390216
  • 浏览: 10233630 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
博客专栏
A5ee55b9-a463-3d09-9c78-0c0cf33198cd
Oracle基础
浏览量:462666
Ad26f909-6440-35a9-b4e9-9aea825bd38e
springMVC介绍
浏览量:1775568
Ce363057-ae4d-3ee1-bb46-e7b51a722a4b
Mybatis简介
浏览量:1398398
Bdeb91ad-cf8a-3fe9-942a-3710073b4000
Spring整合JMS
浏览量:395030
5cbbde67-7cd5-313c-95c2-4185389601e7
Ehcache简介
浏览量:680003
Cc1c0708-ccc2-3d20-ba47-d40e04440682
Cas简介
浏览量:530911
51592fc3-854c-34f4-9eff-cb82d993ab3a
Spring Securi...
浏览量:1184069
23e1c30e-ef8c-3702-aa3c-e83277ffca91
Spring基础知识
浏览量:467999
4af1c81c-eb9d-365f-b759-07685a32156e
Spring Aop介绍
浏览量:151407
2f926891-9e7a-3ce2-a074-3acb2aaf2584
JAXB简介
浏览量:68173
社区版块
存档分类
最新评论

Java改变图片的大小

    博客分类:
  • java
阅读更多

前面在做项目的时候,有一个需求是需要上传图片的,然而该图片只是简单的展示一些信息,不需要很大,所以在上传图片的时候改变图片的大小就显得很有必要了!然后就写了下面这个方法来改变图片的大小!

 

 

	/**
	 * 改变图片的大小到宽为size,然后高随着宽等比例变化
	 * @param is 上传的图片的输入流
	 * @param os 改变了图片的大小后,把图片的流输出到目标OutputStream
	 * @param size 新图片的宽
	 * @param format 新图片的格式
	 * @throws IOException
	 */
	public static void resizeImage(InputStream is, OutputStream os, int size, String format) throws IOException {
		BufferedImage prevImage = ImageIO.read(is);
		double width = prevImage.getWidth();
		double height = prevImage.getHeight();
		double percent = size/width;
		int newWidth = (int)(width * percent);
		int newHeight = (int)(height * percent);
		BufferedImage image = new BufferedImage(newWidth, newHeight, BufferedImage.TYPE_INT_BGR);
		Graphics graphics = image.createGraphics();
		graphics.drawImage(prevImage, 0, 0, newWidth, newHeight, null);
		ImageIO.write(image, format, os);
		os.flush();
		is.close();
		os.close();
	}
7
2
分享到:
评论
4 楼 coolhappiness 2013-12-26  
非常感谢!
3 楼 234390216 2011-10-10  
wubaodong 写道
问下,这个能处理 CMYK模式的图片吗?我之前也搞过类似的东西,不过还没有解决CMYK模式的图片。

没试过这个
2 楼 wubaodong 2011-10-10  
借地发下我自己的,简单对比了下,核心用到的东西一样。

package graphicsTest;

import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileOutputStream;

import javax.imageio.ImageIO;

import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGImageEncoder;

public class GraphicsTest1 {

	// 图片宽和高的最大尺寸
	public static final int IMAGEMAXBIG = 2000;
	// 图片宽和高的最小尺寸
	public static final int IMAGEMINBIG = 10;
	// 按原图大小生成新图
	public static final int CREATENEWIMAGETYPE_0 = 0;
	// 按指定的大小生成新图
	public static final int CREATENEWIMAGETYPE_1 = 1;
	// 按原图宽高比例生成新图-按指定的宽度
	public static final int CREATENEWIMAGETYPE_2 = 2;
	// 按原图宽高比例生成新图-按指定的高度
	public static final int CREATENEWIMAGETYPE_3 = 3;
	// 按原图宽高比例生成新图-按指定的宽和高中较大的尺寸
	public static final int CREATENEWIMAGETYPE_4 = 4;
	// 按原图宽高比例生成新图-按指定的宽和高中较小的尺寸
	public static final int CREATENEWIMAGETYPE_5 = 5;

	/**
	 * 
	 * @param _file
	 *            原图片
	 * @param createType
	 *            处理类型
	 * @param newW
	 *            新宽度
	 * @param newH
	 *            新高度
	 * @return
	 * @throws Exception
	 */
	public static String createNewImage(File _file, int createType, int newW,
			int newH) throws Exception {
		if (_file == null)
			return null;
		String fileName = _file.getPath();
		if (fileName == null || "".equals(fileName)
				|| fileName.lastIndexOf(".") == -1)
			return null;
		String newFileName = "_NEW";
		/*
		 * else newFileName = "_" + newFileName;
		 */

		String outFileName = fileName.substring(0, fileName.lastIndexOf("."))
				+ newFileName
				+ fileName.substring(fileName.lastIndexOf("."), fileName
						.length());
		String fileExtName = fileName.substring(
				(fileName.lastIndexOf(".") + 1), fileName.length());
		if (newW < IMAGEMINBIG)
			newW = IMAGEMINBIG;
		else if (newW > IMAGEMAXBIG)
			newW = IMAGEMAXBIG;

		if (newH < IMAGEMINBIG)
			newH = IMAGEMINBIG;
		else if (newH > IMAGEMAXBIG)
			newH = IMAGEMAXBIG;

		// 得到原图信息
		if (!_file.exists() || !_file.isAbsolute() || !_file.isFile()
				|| !checkImageFile(fileExtName))
			return null;
		if ((new File(outFileName)).exists()) {
			System.out.println("file [" + outFileName + "] already exists");
			throw new Exception();
		}
		Image src = ImageIO.read(_file);
		int w = src.getWidth(null);
		int h = src.getHeight(null);

		// 确定目标图片的大小
		int nw = w;
		int nh = h;
		if (createType == CREATENEWIMAGETYPE_0)
			;
		else if (createType == CREATENEWIMAGETYPE_1) {
			nw = newW;
			nh = newH;
		} else if (createType == CREATENEWIMAGETYPE_2) {
			nw = newW;
			nh = (int) ((double) h / (double) w * nw);
		} else if (createType == CREATENEWIMAGETYPE_3) {
			nh = newH;
			nw = (int) ((double) w / (double) h * nh);
		} else if (createType == CREATENEWIMAGETYPE_4) {
			if ((double) w / (double) h >= (double) newW / (double) newH) {
				nh = newH;
				nw = (int) ((double) w / (double) h * nh);
			} else {
				nw = newW;
				nh = (int) ((double) h / (double) w * nw);
			}
		} else if (createType == CREATENEWIMAGETYPE_5) {
			if ((double) w / (double) h <= (double) newW / (double) newH) {
				nh = newH;
				nw = (int) ((double) w / (double) h * nh);
			} else {
				nw = newW;
				nh = (int) ((double) h / (double) w * nw);
			}
		}

		// 构造目标图片
		BufferedImage tag = new BufferedImage(nw, nh,
				BufferedImage.TYPE_INT_RGB);

		// 得到目标图片输出流
		FileOutputStream out = new FileOutputStream(outFileName);

		// 根据需求画出目标图片 方式1
		tag.getGraphics().drawImage(src, 0, 0, nw, nh, null);

		// 将画好的目标图输出到输出流 方式1
		JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
		encoder.encode(tag);
		out.close();
		return outFileName;
	}

	public static boolean checkImageFile(String extName) {

		if ("jpg".equalsIgnoreCase(extName))
			return true;
		if ("gif".equalsIgnoreCase(extName))
			return true;
		if ("bmp".equalsIgnoreCase(extName))
			return true;
		if ("jpeg".equalsIgnoreCase(extName))
			return true;
		if ("png".equalsIgnoreCase(extName))
			return true;
		return false;
	}

}



1 楼 wubaodong 2011-10-10  
问下,这个能处理 CMYK模式的图片吗?我之前也搞过类似的东西,不过还没有解决CMYK模式的图片。

相关推荐

    图片压缩,不改变宽高

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

    java 图片水印 改变图片大小

    在Java编程领域,图片处理是一项常见的任务,包括添加水印、改变图片大小等。这里我们将深入探讨这些知识点,以及如何在Struts2框架下实现它们。 首先,让我们了解"图片水印"。水印通常用于保护版权或者为图片增加...

    Java提取EXCEL图片重命名并改变像素大小

    本项目专注于一个特定的需求,即“Java提取EXCEL图片重命名并改变像素大小”。这个功能对于那些需要批量处理Excel文件中的图像,比如统一调整格式、优化存储大小或适应不同展示环境的场景非常有用。下面我们将详细...

    java对图片改变大小,png防止变黑,加圆角 圆角外透明

    总的来说,Java提供了丰富的图像处理功能,通过合理的组合和运用,我们可以实现各种复杂的图像处理任务,包括改变图片大小、保持PNG透明度以及添加圆角等效果。在实际开发中,还需要注意性能优化,特别是在处理大量...

    java中图片的大小改变

    在不牺牲质量的前提下改变图片的分辨率是一项技术性较强的工作,涉及到图像处理的基本原理和Java中的相关API。本篇将详细介绍如何在Java中实现这个功能。 首先,Java提供了丰富的图形处理库,主要集中在`java.awt`...

    java 水印(水印适应图片大小,但个别图片太小不支持)

    本知识点主要探讨如何在Java中实现自适应图片大小的水印功能,以及遇到图片过小时的处理策略。 首先,我们需要理解水印的基本概念。水印是在图像或文档上添加的一种视觉标记,它可以是文字、图像或者图形,用于表明...

    可以任意改变图片大小的java程序

    应用此程序可以对图片实现缩放,使其大小任意改变。在网上报名考试中,很多时候要用到个人免冠正面照,并要求有标准尺寸,已经安装java的朋友就不需要使用photoshop这么复杂的工具了,直接使用此程序处理图片即可!

    JAVA实现的图片大小随意拉动调整

    本示例中的"JAVA实现的图片大小随意拉动调整"着重讲解了如何利用Swing来实现图片的动态缩放功能,让用户可以自由调整图片的大小。这个功能在很多应用中都非常实用,比如图像查看器、编辑器或者任何需要展示可调整...

    java图片压缩文件大小图片大小(支持gif动态图)

    这个主题主要涉及如何利用Java来减少图片文件的大小,包括静态图片(如JPEG、PNG)以及动态图片(如GIF)。下面我们将深入探讨相关的知识点。 首先,Java中的核心库`javax.imageio`提供了对图片读取、写入和处理的...

    java处理裁剪图片(更改图片大小)

    例如,要改变图片尺寸,可以创建一个`ConvertOp`对象,设置其尺寸参数,然后执行转换操作。这使得开发人员无需深入了解图像处理的细节,就能完成复杂的操作。 接下来,我们将探讨Java自带的图像处理类。Java提供了`...

    java图片压缩处理(可以压缩为任意大小

    本主题将深入探讨如何使用Java实现图片压缩,并能够将其调整到任意大小,同时保持图片质量并避免变形。 首先,我们需要理解图片压缩的基本原理。图片压缩主要有两种类型:有损压缩和无损压缩。有损压缩会牺牲一部分...

    java图片处理

    文件内含java 处理图片大小等比例缩放,指定颜色改变颜色。根据不同图片设置阴影图片。

    J2ME 改变图片大小函数

    直接吧函数写在图片方法里,调用填写写大小参数就可以了。

    Java提取EXCEL图片重命名并改变像素大小jar包

    Java提取EXCEL图片重命名并改变像素大小jar包,

    java代码保存宽高不变压缩图片(失真不大).docx

    在Java中,压缩图片通常是为了减小文件大小,便于存储或传输,而同时尽可能保持图片质量。上述代码提供了一个名为`CompressPicTools`的类,专门用于压缩图片,保持图片原有的宽高比,同时控制压缩后的失真程度。下面...

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

    等比缩放是指在改变图片尺寸时,保持其长宽比不变,防止图片变形。在Java中,我们可以利用`java.awt.Image`类和`java.awt.Graphics2D`类来实现这一功能。`Image`类提供了多种方法来处理图像,而`Graphics2D`则允许...

    可以实现改变图片的大小

    当我们改变图片大小时,实际上是在调整这些像素的数量。有两种常见的方法:缩小图片是减少像素数量,放大则是插入新的像素。在BMP格式中,由于每个像素都有独立的颜色信息,调整尺寸可能导致图像质量的损失,尤其是...

    j2me中改变图片大小

    总结一下,J2ME中改变图片大小主要依赖于`javax.microedition.lcdui.Graphics` 类的`drawImage()`方法。通过适当的比例参数,我们可以实现图像的缩放。然而,为了优化性能和内存使用,我们还需要考虑图像的加载、...

    多张图片转pdf,图片大小适应页面

    4. 调整图片大小:为了使图片自适应PDF页面,可以使用`image.scaleToFit()`方法调整图片的大小,确保它不会超出页面范围。 ```java image.scaleToFit(document.getPageSize().getWidth(), document.getPageSize()....

    java更改图片大小示例分享

    总结来说,这个Java示例提供了一种简单的方法来改变图片的大小,通过读取图片、创建缩放后的BufferedImage、编码和写入新图像,实现了图片的缩放功能。注意,这个示例使用了Sun的私有JPEGCodec类,这可能在某些Java...

Global site tag (gtag.js) - Google Analytics