- 浏览: 21852 次
- 性别:
- 来自: 杭州
文章分类
最新评论
前面在做项目的时候,有一个需求是需要上传图片的,然而该图片只是简单的展示一些信息,不需要很大,所以在上传图片的时候改变图片的大小就显得很有必要了!然后就写了下面这个方法来改变图片的大小!
下面再提供一种方式:
/** * 改变图片的大小到宽为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 6891、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 840刚刚有人问如何在静态页面获得url的参数,我想通过JS就可以解 ... -
Javascript继承的几种方式
2011-10-10 16:43 0关于Js继承的几种方式,总结一下,以便查看。 第一种 pr ... -
整站变灰代码
2011-10-10 13:58 746以下为全站CSS代码。 html { filter:pro ...
相关推荐
使用两中方法进行压缩,可以只改变图片大小,如,原图片100kb,压缩后变成40kb。并且不改变宽高。 一.使用ImageMagick进行压缩类-Aa.java 需要做以下配置: 1.将jmagick.dll加入jdk\bin目录中 2.将jmagick.dll加入到...
在Java编程领域,图片处理是一项常见的任务,包括添加水印、改变图片大小等。这里我们将深入探讨这些知识点,以及如何在Struts2框架下实现它们。 首先,让我们了解"图片水印"。水印通常用于保护版权或者为图片增加...
本项目专注于一个特定的需求,即“Java提取EXCEL图片重命名并改变像素大小”。这个功能对于那些需要批量处理Excel文件中的图像,比如统一调整格式、优化存储大小或适应不同展示环境的场景非常有用。下面我们将详细...
总的来说,Java提供了丰富的图像处理功能,通过合理的组合和运用,我们可以实现各种复杂的图像处理任务,包括改变图片大小、保持PNG透明度以及添加圆角等效果。在实际开发中,还需要注意性能优化,特别是在处理大量...
在不牺牲质量的前提下改变图片的分辨率是一项技术性较强的工作,涉及到图像处理的基本原理和Java中的相关API。本篇将详细介绍如何在Java中实现这个功能。 首先,Java提供了丰富的图形处理库,主要集中在`java.awt`...
本知识点主要探讨如何在Java中实现自适应图片大小的水印功能,以及遇到图片过小时的处理策略。 首先,我们需要理解水印的基本概念。水印是在图像或文档上添加的一种视觉标记,它可以是文字、图像或者图形,用于表明...
应用此程序可以对图片实现缩放,使其大小任意改变。在网上报名考试中,很多时候要用到个人免冠正面照,并要求有标准尺寸,已经安装java的朋友就不需要使用photoshop这么复杂的工具了,直接使用此程序处理图片即可!
本示例中的"JAVA实现的图片大小随意拉动调整"着重讲解了如何利用Swing来实现图片的动态缩放功能,让用户可以自由调整图片的大小。这个功能在很多应用中都非常实用,比如图像查看器、编辑器或者任何需要展示可调整...
这个主题主要涉及如何利用Java来减少图片文件的大小,包括静态图片(如JPEG、PNG)以及动态图片(如GIF)。下面我们将深入探讨相关的知识点。 首先,Java中的核心库`javax.imageio`提供了对图片读取、写入和处理的...
例如,要改变图片尺寸,可以创建一个`ConvertOp`对象,设置其尺寸参数,然后执行转换操作。这使得开发人员无需深入了解图像处理的细节,就能完成复杂的操作。 接下来,我们将探讨Java自带的图像处理类。Java提供了`...
本主题将深入探讨如何使用Java实现图片压缩,并能够将其调整到任意大小,同时保持图片质量并避免变形。 首先,我们需要理解图片压缩的基本原理。图片压缩主要有两种类型:有损压缩和无损压缩。有损压缩会牺牲一部分...
文件内含java 处理图片大小等比例缩放,指定颜色改变颜色。根据不同图片设置阴影图片。
直接吧函数写在图片方法里,调用填写写大小参数就可以了。
Java提取EXCEL图片重命名并改变像素大小jar包,
在Java中,压缩图片通常是为了减小文件大小,便于存储或传输,而同时尽可能保持图片质量。上述代码提供了一个名为`CompressPicTools`的类,专门用于压缩图片,保持图片原有的宽高比,同时控制压缩后的失真程度。下面...
等比缩放是指在改变图片尺寸时,保持其长宽比不变,防止图片变形。在Java中,我们可以利用`java.awt.Image`类和`java.awt.Graphics2D`类来实现这一功能。`Image`类提供了多种方法来处理图像,而`Graphics2D`则允许...
当我们改变图片大小时,实际上是在调整这些像素的数量。有两种常见的方法:缩小图片是减少像素数量,放大则是插入新的像素。在BMP格式中,由于每个像素都有独立的颜色信息,调整尺寸可能导致图像质量的损失,尤其是...
总结一下,J2ME中改变图片大小主要依赖于`javax.microedition.lcdui.Graphics` 类的`drawImage()`方法。通过适当的比例参数,我们可以实现图像的缩放。然而,为了优化性能和内存使用,我们还需要考虑图像的加载、...
4. 调整图片大小:为了使图片自适应PDF页面,可以使用`image.scaleToFit()`方法调整图片的大小,确保它不会超出页面范围。 ```java image.scaleToFit(document.getPageSize().getWidth(), document.getPageSize()....
总结来说,这个Java示例提供了一种简单的方法来改变图片的大小,通过读取图片、创建缩放后的BufferedImage、编码和写入新图像,实现了图片的缩放功能。注意,这个示例使用了Sun的私有JPEGCodec类,这可能在某些Java...