您的位置:首页 > 编程语言 > Java开发

Java改变图片的大小

2014-01-04 16:33 357 查看
转自:http://blog.csdn.net/mainstream_code/article/details/7036302

[java] view
plaincopyprint?

<pre name="code" class="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();

} </pre><br>

<br>

<pre></pre>

<pre name="code" class="java"></pre><pre name="code" class="java"></pre><pre name="code" class="java"></pre><pre name="code" class="java"></pre><pre name="code" class="java">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;

}

} </pre>

<p><br>

</p>

<p><br>

</p>

<p><br>

</p>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: