- 浏览: 4381417 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (163)
- 职场 && 心情 (22)
- Java/Basic (17)
- Java/Compression (7)
- Java/Security (20)
- Java/Maven (3)
- Java/Cache (11)
- Eclipse (4)
- Spring (19)
- ORM/Hibernate (2)
- ORM/iBatis (3)
- DB/NoSQL (11)
- DB/MySQL (7)
- DB/MS SQL Server (4)
- OS/Linux (11)
- OS/Mac (7)
- C/C++ (4)
- Server Architecture/Basic (13)
- Server Architecture/Distributed (17)
- Moblie/Andriod (2)
- WebService (3)
- Objective-C (1)
- Html (1)
- 设计模式 (1)
- Scala (0)
- Kafka (1)
最新评论
-
w47_csdn:
证书安装:在"浏览"选项中选择" ...
Java加密技术(九)——初探SSL -
w47_csdn:
spiritfrog 写道你好,我按照你的步骤,tomcat中 ...
Java加密技术(九)——初探SSL -
liuyachao111:
11楼说的对 用@ControllerAdvicepublic ...
Spring 注解学习手札(八)补遗——@ExceptionHandler -
irayslu:
作者你好, 我把你的源码放在jdk6, jdk7 中运行正常, ...
Java加密技术(五)——非对称加密算法的由来DH -
夏季浅忆-卖小子:
为什么不能解压rar格式的压缩包呢
Java压缩技术(三) ZIP解压缩——Java原生实现
通过对图片重绘,达到图片缩放、压缩编码转换功能。
给出一个简单的测试类:
期待
已经有了
能不能给个具体的实例看下
有空我补个测试用例~~
import java.awt.Image; import java.awt.image.BufferedImage; import java.awt.image.RenderedImage; import java.io.File; import java.io.InputStream; import java.io.OutputStream; import javax.imageio.ImageIO; /** * * @author 梁栋 * @version 1.0 * @since 1.0 */ public abstract class ImageUtils { /** * 缩放图片 * * @param width * 输出宽度 * @param height * 输出高度 * @param input * 输入流 * @param output * 输出流 * @param format * 输出格式 * @return * @throws Exception */ public static boolean convert(int width, int height, InputStream input, OutputStream output, String format) throws Exception { // 输入 BufferedImage inputImage = ImageIO.read(input); // 转换 RenderedImage im = (RenderedImage) convert(height, height, inputImage); // 输出 return ImageIO.write(im, format, output); } /** * 转换压缩算法 * * @param input * 输入文件 * @param output * 输出文件 * @return * @throws Exception */ public static boolean convert(File input, File output) throws Exception { // 输入 BufferedImage inputImage = ImageIO.read(input); // 转换 int width = inputImage.getWidth(); int height = inputImage.getHeight(); RenderedImage im = (RenderedImage) convert(width, height, inputImage); String outputFilename = output.getName(); String format = outputFilename.substring(outputFilename .lastIndexOf('.') + 1); // 输出 return ImageIO.write(im, format, output); } /** * 缩放图片 * * @param width * 输出宽度 * @param height * 输出高度 * @param input * 输入文件 * @param output * 输出文件 * @return * @throws Exception */ public static boolean convert(int width, int height, File input, File output) throws Exception { // 输入 BufferedImage inputImage = ImageIO.read(input); // 转换 RenderedImage im = (RenderedImage) convert(width, height, inputImage); String outputFilename = output.getName(); String format = outputFilename.substring(outputFilename .lastIndexOf('.') + 1); // 输出 return ImageIO.write(im, format, output); } /** * 缩放图片 * * @param width * 输出宽度 * @param height * 输出高度 * @param input * 输入路径 * @param output * 输出路径 * @return * @throws Exception */ public static boolean convert(int width, int height, String inputPath, String outputPath) throws Exception { return convert(width, height, new File(inputPath), new File(outputPath)); } /** * 转换 * * @param width * 输出宽度 * @param height * 输出高度 * @param input * BufferedImage * @return BufferedImage * @throws Exception */ private static BufferedImage convert(int width, int height, BufferedImage input) throws Exception { // 初始化输出图片 BufferedImage output = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); // 重新绘图 Image image = input.getScaledInstance(output.getWidth(), output .getHeight(), output.getType()); output.createGraphics().drawImage(image, null, null); return output; } /** * 等比缩放图片 * * @param width * 输出宽度 * @param height * 输出高度 * @param input * 输入流 * @param output * 输出流 * @return * @throws Exception */ public static boolean equimultipleConvert(int width, int height, String input, String output) throws Exception { return equimultipleConvert(width, height, new File(input), new File( output)); } /** * 等比缩放图片 * * @param width * 输出宽度 * @param height * 输出高度 * @param input * 输入流 * @param output * 输出流 * @return * * @throws Exception */ public static boolean equimultipleConvert(int width, int height, File input, File output) throws Exception { // 输入 BufferedImage image = ImageIO.read(input); // 重新核算尺寸 if (image.getWidth() > 0 && image.getHeight() > 0) { if ((image.getWidth() / image.getHeight()) >= (width / height)) { if (image.getWidth() > width) { height = (image.getHeight() * width) / image.getWidth(); } else { width = image.getWidth(); height = image.getHeight(); } } else { if (image.getHeight() > height) { width = (image.getWidth() * height) / image.getHeight(); } else { width = image.getWidth(); height = image.getHeight(); } } } // 转换 输出 return convert(width, height, input, output); } }
给出一个简单的测试类:
import org.junit.Test; /** * * @author 梁栋 * @version 1.0 * @since 1.0 */ public class ImageUtilsTest { /** * Test method for * {@link org.zlex.common.image.ImageUtils#main(java.lang.String[])}. */ @Test public void test() throws Exception { System.out.println(ImageUtils.convert(1650, 1024, "c:\\1.png", "c:\\1.png.jpg")); System.out.println(ImageUtils.convert(400, 300, "c:\\1.jpg", "c:\\1.jpg.jpg")); System.out.println(ImageUtils.convert(400, 300, "c:\\1.jpg", "c:\\1.jpg.png")); System.out.println(ImageUtils.convert(50, 50, "c:\\1.jpg", "c:\\1.jpg.gif")); System.out.println(ImageUtils.convert(40, 30, "c:\\1.bmp", "c:\\1.bmp.gif")); System.out.println(ImageUtils .convert(40, 30, "c:\\1.bmp", "c:\\1.jpeg")); System.out.println(ImageUtils.equimultipleConvert(1600, 1400, new File( "c:\\1.bmp"), new File("c:\\1Equimultiple.jpeg"))); } }
评论
8 楼
snowolf
2011-03-17
To @wenbois2000:非常感激! 细细咀嚼!
7 楼
wenbois2000
2011-03-17
对于第128行,convert方法:
这里对getScaledInstance(int width, int height, int hints) 的使用是混淆的(或者是错误的)。 getScaledInstance是java 1.1, AWT API中Image 所定义的方法,他所接收的第三个参数(int hints), 是指Image中定义的5个常量:
而代码中使用的却是BufferedImage 中定义的类型:
这里的ouput是BufferedImage, 调用的getType()所返回的方法是BufferedImage中所定义的各种颜色模型(ColorModel)常量。例如TYPE_INT_RGB,TYPE_INT_ARGB等。在默认情况下,Image.SCALE_DEFAULT = 1,而 BufferedImage.TYPE_INT_RGB 也等于1. 那么这里实际上是混淆地使用了BufferedImage中的常量BufferedImage.TYPE_INT_RGB来定义Image.getScaleInstance() 所使用的缩放算法(SCALE_DEFAULT)。不知楼主是否故意如此,但不论如何这不是一种好的使用方式。还有因为getScaledInstance是较老的API,其性能相对于Java 2D API来说是比较差的。 对于缩放而言,更好地方式是直接使用Graphics2D.drawImage(), 该方法可以直接支持不同大小的图像缩放。而且输出质量可以通过Graphics2D.setRenderingHint来定义。关于getScaleInstance 与 直接使用Graphics2D.drawImage的比较,楼主可以参见:http://today.java.net/pub/a/today/2007/04/03/perils-of-image-getscaledinstance.html
128. private static BufferedImage convert(int width, int height, 129. BufferedImage input) throws Exception { 130. // 初始化输出图片 131. BufferedImage output = new BufferedImage(width, height, 132. BufferedImage.TYPE_INT_RGB); 133. 134. // 重新绘图 135. Image image = input.getScaledInstance(output.getWidth(), output 136. .getHeight(), output.getType()); 137. 138. output.createGraphics().drawImage(image, null, null); 139. 140. return output; 141. }
这里对getScaledInstance(int width, int height, int hints) 的使用是混淆的(或者是错误的)。 getScaledInstance是java 1.1, AWT API中Image 所定义的方法,他所接收的第三个参数(int hints), 是指Image中定义的5个常量:
- SCALE_AREA_AVERAGING 使用 Area Averaging 图像缩放算法。
- SCALE_DEFAULT 使用默认的图像缩放算法。
- SCALE_FAST 选择一种图像缩放算法,在这种缩放算法中,缩放速度比缩放平滑度具有更高的优先级。
- SCALE_REPLICATE 使用 ReplicateScaleFilter 类中包含的图像缩放算法。
- SCALE_SMOOTH 选择图像平滑度比缩放速度具有更高优先级的图像缩放算法。
而代码中使用的却是BufferedImage 中定义的类型:
136. .getHeight(), output.getType());
这里的ouput是BufferedImage, 调用的getType()所返回的方法是BufferedImage中所定义的各种颜色模型(ColorModel)常量。例如TYPE_INT_RGB,TYPE_INT_ARGB等。在默认情况下,Image.SCALE_DEFAULT = 1,而 BufferedImage.TYPE_INT_RGB 也等于1. 那么这里实际上是混淆地使用了BufferedImage中的常量BufferedImage.TYPE_INT_RGB来定义Image.getScaleInstance() 所使用的缩放算法(SCALE_DEFAULT)。不知楼主是否故意如此,但不论如何这不是一种好的使用方式。还有因为getScaledInstance是较老的API,其性能相对于Java 2D API来说是比较差的。 对于缩放而言,更好地方式是直接使用Graphics2D.drawImage(), 该方法可以直接支持不同大小的图像缩放。而且输出质量可以通过Graphics2D.setRenderingHint来定义。关于getScaleInstance 与 直接使用Graphics2D.drawImage的比较,楼主可以参见:http://today.java.net/pub/a/today/2007/04/03/perils-of-image-getscaledinstance.html
6 楼
snowolf
2009-06-03
yanghaiskys 写道
期待
已经有了
5 楼
yanghaiskys
2009-06-03
刚运行了,非常强大
4 楼
yanghaiskys
2009-06-03
期待
3 楼
snowolf
2009-06-02
yanghaiskys 写道
能不能给个具体的实例看下
有空我补个测试用例~~
2 楼
yanghaiskys
2009-06-02
1 楼
yanghaiskys
2009-06-02
能不能给个具体的实例看下
发表评论
-
DisplayTag POI支持——Excel文件导出中文乱码问题&包依赖问题-解决
2012-09-29 15:11 7000DisplayTag,可能大部分人都用过,也知道他非常的方便。 ... -
Mountain Lion 升级后Java不可用问题补救
2012-07-31 08:10 7921升级到Mountain Lion后,让我最头痛的是原来的jdk ... -
征服 Kestrel + XMemcached
2012-07-24 12:06 4670接上一篇 征服Kestrel,介绍XMemcached对于Ke ... -
征服 Kestrel
2012-07-23 18:33 13240因为要面对高并发PUSH需求,考虑将其按队列方式实现,最终选型 ... -
Java操作Excel文件导入
2012-06-27 17:33 65065用Excel作为数据源,通过Java Web进行导入,需要PO ... -
JVM学习笔记——内存跟踪
2012-04-12 10:35 0引用 jmap Usage: jmap [optio ... -
BoneCP、DBCP、C3P0、Proxool连接池比较
2012-02-29 13:20 0Proxool关键参数imultaneousBuildTh ... -
JVM学习笔记
2012-02-21 11:48 0以前写代码的时候,从 ... -
Java关键字——transient
2011-12-29 17:27 8727眼看就要2012了,这一年给自己树立的研究课题基本上因为工作的 ... -
Ehcache简单应用——RSSReaderTag
2010-08-04 15:00 3316关于缓存,关于自己运用,大部分情况是通过ORM配置生效。基本上 ... -
基于Web应用的海量数据存储思考
2010-07-30 15:03 0今天讨论很多有关于基 ... -
昨日困惑——Tomcat之应用不能启动!
2010-07-29 10:23 11589昨天下午,我一直在调试程序,由于本地环境等等局限性问题,我只能 ... -
正则表达式
2010-06-30 11:32 0用来验证email的正则 \w+\.?\w+@\w+(\. ... -
JNDI
2010-06-11 12:31 0package com.netqin.common.dbt ... -
评选你认为最没水准的代码
2010-05-19 11:27 0十分不好意思,我的技术洁癖开始作怪。最近接触一些代码,实在是看 ... -
无符号整型
2010-05-18 14:38 0private static long readUInt(I ... -
数据压缩相关(zlib,bzip2,lzma)
2010-04-13 13:45 0一:下面简单说明如何把zlib加入到MFC程序中,提供内存压缩 ... -
Ant编译无响应问题
2010-01-18 10:38 6317前些日子因为要搞自动编译需要用到Ant执行相关操作。Ant以前 ... -
基本数据类型进制转换
2010-01-15 10:49 4360已经很久没有写博客了,已经有很多人不止一次的反问我:“你怎么不 ... -
webservice 常用网址
2009-12-20 21:52 0<p><p>下面总结了一些常用的Web ...
相关推荐
很多的一个图片批量缩放转换器,能比例转换图片大小,
c#实现的小工具,用于批量图片缩放,格式转换。
可以批量压缩图片的工具,有按比例压缩与按大小压缩两种方式,最小最快最简洁的绿色图片批量缩放转换工具,可以根据比例和特定长宽进行图片文件的缩放,可以对PNG、BMP、JPG、GIF、TIF图片文件相互进行转换。
VB图片缩放转换精灵源程序,可以对图片进行放大缩小操作。针对图片处理。
c#实现批量图片缩放,格式转换程序 (源码)
基于java的图片文件格式转换和线性缩放 图片文件格式转换最核心的问题就是要解决各种图片格式的编码和解码,
1.对图片进行缩放处理2.截取图片中的一部分3.将图片缩放并嵌入到另一张纯色图片中4.图片添加水印:添加图片水印和文字水印5.控制Jpg图片的输出质量6.将文本信息隐藏在图片文件中(建议使用BMP图片)
非常简单而又非常实用的图像处理工具,只需事先设置好自己目标图像的参数(文件大小,图像格式),点击“批量转换”图像处理很快处理完毕。如果批处理后没有满足自己的要求,可以改变参数值重新处理,直到满意为止,...
实现了对上传的图片进行缩放显示,并将图片转换为二进制流(将其保存到数据库中,及实现了将图片存储到数据库中),之后通过动态页面显示生产的图片,避免了上传图片显示的路径问题
包含最近邻插值、双线性插值和三次插值的matlab代码,自己已经测试过,使用的时候注意将图片转换为位图,否则会出现错误。
高清缩放图像、切割图像、图像类型转换、彩色转黑白、文字水印、图片水印等 功能非常强大,并且很清晰,请给好评:)
图形转换与缩放(平滑缩放)
图片裁剪,缩放,转换格式等小工具,含源代码
simpleImageTool又一个简单、好用的图片格式转换、缩放水印叠加等功能的纯Java图片工具库。 simpleImageTool的由来,近期需要用到图片处理,通过网上的图片流直接进行缩放水印叠加等,需要一个纯java的处理库,在...
本工具是一个jar包,通过java -jar的方式运行即可。实现了图片大小缩放、格式转换(tif、png、jpg、bmp等)、pdf转图片等功能。 适用人群:简单了解java使用的人群均可,需要电脑上安装jdk。
一个小工具,用易语言制作,界面友好,使用简单,既能实现对图片尺寸的批量缩放,又能实现图片格式的转换。
PB中图像转换、放大、缩小、旋转、打印等内容
图片文件格式转换最核心的问题就是要解决各种图片格式的编码和解码,推荐用jimi包,可从http://java.sun.com/products/jimi/下载该包及其源码和demo。本文介绍了用jimi进行图片文件格式转换和线性缩放的方法。
PB中图像图像的转换、放大、缩小、旋转、打印等内容,支持PB9开发,打开即用。此代码仅供参考。
图像缩放大师是一款专业的,支持批量修改图片大小软件,支持多种图片格式,如JPG, PNG, GIF, BMP, TIFF等;并且可以自由设置修改后的宽度、高度、是否保留纵横比等; 支持图片格式转换;操作简单,转换速度极快。 ...