- 浏览: 21294 次
- 性别:
- 来自: 杭州
文章分类
最新评论
前面在做项目的时候,有一个需求是需要上传图片的,然而该图片只是简单的展示一些信息,不需要很大,所以在上传图片的时候改变图片的大小就显得很有必要了!然后就写了下面这个方法来改变图片的大小!
下面再提供一种方式:
/** * 改变图片的大小到宽为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(); }
下面再提供一种方式:
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; } }
发表评论
-
IE和firefox兼容问题
2012-02-23 16:31 6651、Event的问题 在ie中我们可以直接使用event变量, ... -
使用WinHttpRequest伪造referer
2011-10-10 16:59 0从msdn得知,WinHttp.WinHttpRequest. ... -
使用javascript调用WinHttpRequest发表微博
2011-10-10 16:58 0使用javascript发表微博思路: 1.先获取cookie ... -
关于静态页面如何获得参数的问题
2012-03-13 20:43 807刚刚有人问如何在静态页面获得url的参数,我想通过JS就可以解 ... -
Javascript继承的几种方式
2011-10-10 16:43 0关于Js继承的几种方式,总结一下,以便查看。 第一种 pr ... -
整站变灰代码
2011-10-10 13:58 710以下为全站CSS代码。 html { filter:pro ...
相关推荐
使用两中方法进行压缩,可以只改变图片大小,如,原图片100kb,压缩后变成40kb。并且不改变宽高。 一.使用ImageMagick进行压缩类-Aa.java 需要做以下配置: 1.将jmagick.dll加入jdk\bin目录中 2.将jmagick.dll加入到...
struts2 上传 java 图片水印 改变图片大小
Java提取EXCEL图片重命名并改变像素大小项目源代码, Java提取EXCEL图片重命名并改变像素大小, Java提取EXCEL图片重命名并改变像素大小
java对图片改变大小,png防止变黑,加圆角 圆角外透明
应用此程序可以对图片实现缩放,使其大小任意改变。在网上报名考试中,很多时候要用到个人免冠正面照,并要求有标准尺寸,已经安装java的朋友就不需要使用photoshop这么复杂的工具了,直接使用此程序处理图片即可!
java 水印(水印适应图片大小,但个别图片太小不支持)
文件内含java 处理图片大小等比例缩放,指定颜色改变颜色。根据不同图片设置阴影图片。
在不影响图片的质量的情况下,对图片的分辨率进行重新的设定
直接吧函数写在图片方法里,调用填写写大小参数就可以了。
Java提取EXCEL图片重命名并改变像素大小jar包,
主要介绍了java更改图片大小示例,方法中指定路径 ,旧文件名称 ,新文件名称,n 改变倍数就可以完成更改图片大小,需要的朋友可以参考下
按宽的比例更改图片的大小。 按高的比例更改图片大小。 按输入的任意宽高改变图片的大小。 需要输入图片路径和图片宽度或者高度。
java代码保存宽高不变压缩图片(失真不大),按照文件大小,进行压缩质量控制
Java实现图片的拖拉变形放大缩小,四个方向都可以拉大缩小图片,技术方面,使用java.awt.geom 包中的AffineTransform 类来实现图片拖拉缩放功能。
多张图片转pdf,图片大小适应页面,使用jar包itext-asian(5.2.0),itextpdf
Image文件大小压缩,依据改变图片的质量,改变图片的大小,转换后图片质量影响并不大。
这个代码可以把多张图片重叠成一张图片。如果是透明图片透明的部分还保持透明。 代码中是三张图片叠加,并且改变了其中一张图片的大小
* 压缩图片,将图片压缩后以二进制的形式输出 * * @param file * 将要压缩的图片 * @param width * 压缩宽(长度短的做宽) * @param height * 压缩长(长度长的做长) * @return byte[]二进制流 */
1.设置一个置项的模拟窗体,窗体标题栏具有标志性QQ图标和标题文字,不可改变大小,初始运行时显示在屏幕中央。 2.使用标签组件显示提示文字(或logo图片)。 3.使用文本框组件提供账号和密码输入域。 4.使用下拉...
这个程序主要是用来生成一张图片,同时在图片上还可以划任意条不用大小,不同颜色的线条,此外,用户还可以在图片上打印自己想打印的任何字,并且字可以改变大小,字体和颜色,稍加修改的话可以做成一个防伪图片生成...