方法一:
方法二:
import javax.imageio.ImageIO;
import javax.imageio.IIOException;
import java.awt.image.BufferedImage;
import java.awt.Image;
import java.io.File;
import java.awt.image.AffineTransformOp;
import java.awt.geom.AffineTransform;
public class bbb {
public static void main (String argv[]) {
try {
File fi = new File("c:/image2.jpg"); //大图文件
File fo = new File("c:/imgTest.jpg"); //将要转换出的小图文件
int nw = 100;
/*
AffineTransform 类表示 2D 仿射变换,它执行从 2D 坐标到其他 2D
坐标的线性映射,保留了线的“直线性”和“平行性”。可以使用一系
列平移、缩放、翻转、旋转和剪切来构造仿射变换。
*/
AffineTransform transform = new AffineTransform();
BufferedImage bis = ImageIO.read(fi); //读取图片
int w = bis.getWidth();
int h = bis.getHeight();
//double scale = (double)w/h;
int nh = (nw*h)/w ;
double sx = (double)nw/w;
double sy = (double)nh/h;
transform.setToScale(sx,sy); //setToScale(double sx, double sy) 将此变换设置为缩放变换。
System.out.println(w + " " +h);
/*
* AffineTransformOp类使用仿射转换来执行从源图像或 Raster 中 2D 坐标到目标图像或
* Raster 中 2D 坐标的线性映射。所使用的插值类型由构造方法通过
* 一个 RenderingHints 对象或通过此类中定义的整数插值类型之一来指定。
如果在构造方法中指定了 RenderingHints 对象,则使用插值提示和呈现
的质量提示为此操作设置插值类型。要求进行颜色转换时,可以使用颜色
呈现提示和抖动提示。 注意,务必要满足以下约束:源图像与目标图像
必须不同。 对于 Raster 对象,源图像中的 band 数必须等于目标图像中
的 band 数。
*/
AffineTransformOp ato = new AffineTransformOp(transform,null);
BufferedImage bid = new BufferedImage(nw,nh,BufferedImage.TYPE_3BYTE_BGR);
/*
* TYPE_3BYTE_BGR 表示一个具有 8 位 RGB 颜色分量的图像,
* 对应于 Windows 风格的 BGR 颜色模型,具有用 3 字节存
* 储的 Blue、Green 和 Red 三种颜色。
*/
ato.filter(bis,bid);
ImageIO.write(bid,"jpeg",fo);
} catch(Exception e) {
e.printStackTrace();
}
}
}
import javax.imageio.IIOException;
import java.awt.image.BufferedImage;
import java.awt.Image;
import java.io.File;
import java.awt.image.AffineTransformOp;
import java.awt.geom.AffineTransform;
public class bbb {
public static void main (String argv[]) {
try {
File fi = new File("c:/image2.jpg"); //大图文件
File fo = new File("c:/imgTest.jpg"); //将要转换出的小图文件
int nw = 100;
/*
AffineTransform 类表示 2D 仿射变换,它执行从 2D 坐标到其他 2D
坐标的线性映射,保留了线的“直线性”和“平行性”。可以使用一系
列平移、缩放、翻转、旋转和剪切来构造仿射变换。
*/
AffineTransform transform = new AffineTransform();
BufferedImage bis = ImageIO.read(fi); //读取图片
int w = bis.getWidth();
int h = bis.getHeight();
//double scale = (double)w/h;
int nh = (nw*h)/w ;
double sx = (double)nw/w;
double sy = (double)nh/h;
transform.setToScale(sx,sy); //setToScale(double sx, double sy) 将此变换设置为缩放变换。
System.out.println(w + " " +h);
/*
* AffineTransformOp类使用仿射转换来执行从源图像或 Raster 中 2D 坐标到目标图像或
* Raster 中 2D 坐标的线性映射。所使用的插值类型由构造方法通过
* 一个 RenderingHints 对象或通过此类中定义的整数插值类型之一来指定。
如果在构造方法中指定了 RenderingHints 对象,则使用插值提示和呈现
的质量提示为此操作设置插值类型。要求进行颜色转换时,可以使用颜色
呈现提示和抖动提示。 注意,务必要满足以下约束:源图像与目标图像
必须不同。 对于 Raster 对象,源图像中的 band 数必须等于目标图像中
的 band 数。
*/
AffineTransformOp ato = new AffineTransformOp(transform,null);
BufferedImage bid = new BufferedImage(nw,nh,BufferedImage.TYPE_3BYTE_BGR);
/*
* TYPE_3BYTE_BGR 表示一个具有 8 位 RGB 颜色分量的图像,
* 对应于 Windows 风格的 BGR 颜色模型,具有用 3 字节存
* 储的 Blue、Green 和 Red 三种颜色。
*/
ato.filter(bis,bid);
ImageIO.write(bid,"jpeg",fo);
} catch(Exception e) {
e.printStackTrace();
}
}
}
方法二:
import java.io.*;import java.awt.*;
import java.awt.image.*;import com.sun.image.codec.jpeg.*;
/**
* <p>Title: </p>
* <p>Description: </p>
* <p>Copyright: Copyright (c)2007-6-13</p>
* <p>Company: fuen</p>
* @author 杨振朋
* @version 1.0
*/
public class ccc {
private String srcFile;
private String destFile;
private int width;
private int height;
private Image img;
/**
* 构造函数
* @param fileName String
* @throws IOException
*/
public ccc(String fileName) throws IOException {
File _file = new File(fileName); //读入文件
this.srcFile = _file.getName();
this.destFile = "c:/aa.jpg";//this.srcFile.substring(0, this.srcFile.lastIndexOf(".")) +"_s.jpg";
img = javax.imageio.ImageIO.read(_file); //构造Image对象
width = img.getWidth(null); //得到源图宽
height = img.getHeight(null); //得到源图长
} /**
* 强制压缩/放大图片到固定的大小
* @param w int 新宽度
* @param h int 新高度
* @throws IOException
*/
public void resize(int w, int h) throws IOException {
BufferedImage _image = new BufferedImage(w, h,BufferedImage.TYPE_INT_RGB);
_image.getGraphics().drawImage(img, 0, 0, w, h, null); //绘制缩小后的图
FileOutputStream newimageout = new FileOutputStream(destFile); //输出到文件流
/*
* JPEGImageEncoder 将图像缓冲数据编码为 JPEG 数据流。该接口的用户应在 Raster
* 或 BufferedImage 中提供图像数据,在 JPEGEncodeParams 对象中设置必要的参数,
* 并成功地打开 OutputStream(编码 JPEG 流的目的流)。JPEGImageEncoder 接口可
* 将图像数据编码为互换的缩略 JPEG 数据流,该数据流将写入提供给编码器的 OutputStream 中。
注意:com.sun.image.codec.jpeg 包中的类并不属于核心 Java API。它们属于 Sun 发布的
JDK 和 JRE 产品的组成部分。虽然其它获得许可方可能选择发布这些类,但开发人员不能寄
希望于从非 Sun 实现的软件中得到它们。我们期望相同的功能最终可以在核心 API 或标准扩
展中得到。
*/
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(newimageout);
encoder.encode(_image); //近JPEG编码
newimageout.close();
} /**
* 按照固定的比例缩放图片
* @param t double 比例
* @throws IOException
*/
public void resize(double t) throws IOException {
int w = (int) (width * t);
int h = (int) (height * t);
resize(w, h);
} /**
* 以宽度为基准,等比例放缩图片
* @param w int 新宽度
* @throws IOException
*/
public void resizeByWidth(int w) throws IOException {
int h = (int) (height * w / width);
resize(w, h);
} /**
* 以高度为基准,等比例缩放图片
* @param h int 新高度
* @throws IOException
*/
public void resizeByHeight(int h) throws IOException {
int w = (int) (width * h / height);
resize(w, h);
} /**
* 按照最大高度限制,生成最大的等比例缩略图
* @param w int 最大宽度
* @param h int 最大高度
* @throws IOException
*/
public void resizeFix(int w, int h) throws IOException {
if (width / height > w / h) {
resizeByWidth(w);
}
else {
resizeByHeight(h);
}
} /**
* 设置目标文件名
* setDestFile
* @param fileName String 文件名字符串
*/
public void setDestFile(String fileName) throws Exception {
if (!fileName.endsWith(".jpg")) {
throw new Exception("Dest File Must end with \".jpg\".");
}
destFile = fileName;
} /**
* 获取目标文件名
* getDestFile
*/
public String getDestFile() {
return destFile;
} /**
* 获取图片原始宽度
* getSrcWidth
*/
public int getSrcWidth() {
return width;
}
/**
* 获取图片原始高度
* getSrcHeight
*/
public int getSrcHeight() {
return height;
}
/*
* 调用测试
*/
public static void main(String[] args) throws Exception {
ccc ccc = new ccc("c:/image2.jpg");
ccc.resizeFix(500, 300);
}
}
import java.awt.image.*;import com.sun.image.codec.jpeg.*;
/**
* <p>Title: </p>
* <p>Description: </p>
* <p>Copyright: Copyright (c)2007-6-13</p>
* <p>Company: fuen</p>
* @author 杨振朋
* @version 1.0
*/
public class ccc {
private String srcFile;
private String destFile;
private int width;
private int height;
private Image img;
/**
* 构造函数
* @param fileName String
* @throws IOException
*/
public ccc(String fileName) throws IOException {
File _file = new File(fileName); //读入文件
this.srcFile = _file.getName();
this.destFile = "c:/aa.jpg";//this.srcFile.substring(0, this.srcFile.lastIndexOf(".")) +"_s.jpg";
img = javax.imageio.ImageIO.read(_file); //构造Image对象
width = img.getWidth(null); //得到源图宽
height = img.getHeight(null); //得到源图长
} /**
* 强制压缩/放大图片到固定的大小
* @param w int 新宽度
* @param h int 新高度
* @throws IOException
*/
public void resize(int w, int h) throws IOException {
BufferedImage _image = new BufferedImage(w, h,BufferedImage.TYPE_INT_RGB);
_image.getGraphics().drawImage(img, 0, 0, w, h, null); //绘制缩小后的图
FileOutputStream newimageout = new FileOutputStream(destFile); //输出到文件流
/*
* JPEGImageEncoder 将图像缓冲数据编码为 JPEG 数据流。该接口的用户应在 Raster
* 或 BufferedImage 中提供图像数据,在 JPEGEncodeParams 对象中设置必要的参数,
* 并成功地打开 OutputStream(编码 JPEG 流的目的流)。JPEGImageEncoder 接口可
* 将图像数据编码为互换的缩略 JPEG 数据流,该数据流将写入提供给编码器的 OutputStream 中。
注意:com.sun.image.codec.jpeg 包中的类并不属于核心 Java API。它们属于 Sun 发布的
JDK 和 JRE 产品的组成部分。虽然其它获得许可方可能选择发布这些类,但开发人员不能寄
希望于从非 Sun 实现的软件中得到它们。我们期望相同的功能最终可以在核心 API 或标准扩
展中得到。
*/
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(newimageout);
encoder.encode(_image); //近JPEG编码
newimageout.close();
} /**
* 按照固定的比例缩放图片
* @param t double 比例
* @throws IOException
*/
public void resize(double t) throws IOException {
int w = (int) (width * t);
int h = (int) (height * t);
resize(w, h);
} /**
* 以宽度为基准,等比例放缩图片
* @param w int 新宽度
* @throws IOException
*/
public void resizeByWidth(int w) throws IOException {
int h = (int) (height * w / width);
resize(w, h);
} /**
* 以高度为基准,等比例缩放图片
* @param h int 新高度
* @throws IOException
*/
public void resizeByHeight(int h) throws IOException {
int w = (int) (width * h / height);
resize(w, h);
} /**
* 按照最大高度限制,生成最大的等比例缩略图
* @param w int 最大宽度
* @param h int 最大高度
* @throws IOException
*/
public void resizeFix(int w, int h) throws IOException {
if (width / height > w / h) {
resizeByWidth(w);
}
else {
resizeByHeight(h);
}
} /**
* 设置目标文件名
* setDestFile
* @param fileName String 文件名字符串
*/
public void setDestFile(String fileName) throws Exception {
if (!fileName.endsWith(".jpg")) {
throw new Exception("Dest File Must end with \".jpg\".");
}
destFile = fileName;
} /**
* 获取目标文件名
* getDestFile
*/
public String getDestFile() {
return destFile;
} /**
* 获取图片原始宽度
* getSrcWidth
*/
public int getSrcWidth() {
return width;
}
/**
* 获取图片原始高度
* getSrcHeight
*/
public int getSrcHeight() {
return height;
}
/*
* 调用测试
*/
public static void main(String[] args) throws Exception {
ccc ccc = new ccc("c:/image2.jpg");
ccc.resizeFix(500, 300);
}
}
发表评论
-
db2, oracle和sqlserver取前几行的语法
2010-10-18 11:58 884db2: select * from tab f ... -
项目总结(Ajax+Struts+Spring+Hiberante+SQLServer2000) 第一部分 (转载)
2008-03-29 16:49 646总算将一个项目勉强上线,也是第一次我独立完成的这么多任务,框架 ... -
实例学习Spring和Hibernate的一点点体会 (转载)
2008-03-29 17:36 750昨天用Spring写DAO,有朋友说比较Hibernate还是 ... -
jsp+xsl查询数据库
2008-04-06 19:26 990往往JSP通常用来动态的生成HTML文件,来 ... -
hibernate3.0中文查询问题解决方法
2008-04-07 13:08 711在applicationContext.xml中加入如下代码: ... -
简单的JSTL应用(入门)
2008-04-07 19:51 977需要的包及TLD文件: 首先需要将用到的jar包放入WEB-I ... -
EL表达式语言
2008-04-09 00:30 656引用:http://blog.163.com/s_zhchlu ... -
使用COOKIE登录验证(转载)
2008-04-21 20:11 1490附加功能:登录成功后 ... -
JavaMail
2008-04-30 13:19 615package org.hank.mail;import ... -
用"window.showModalDialog()"实现DIV模式弹出窗口 (转)
2008-05-04 09:20 17371、test.html 测试页 <html> ... -
以二进制流的方式存取图像
2008-05-07 00:03 1197imageinfo.sql CREATE TABLE ... -
一个不错的弹出窗口的js效果(值的收藏)
2008-06-02 19:00 1078<script type="text/jav ... -
<c:forEach>&条件标签使用
2008-06-06 09:57 7062<c:forEach>标签的使 ... -
div 缓慢下拉效果
2008-06-10 18:05 1493<!DOCTYPE html PUBLIC " ... -
弹出窗口传值
2008-06-13 09:07 871子窗口中内容: function change(obj){ ... -
Action之间传值
2008-06-13 09:13 828return new ActionForward(" ... -
数据库连接池简介
2008-06-15 14:30 709数据库连接是一种关键的有限的昂贵的资源,这一点在多用户的网页应 ... -
Spring的事务管理
2008-06-15 14:32 392Spring提供了一致的事务管理抽象。这个抽象是Sprin ... -
form产生的空行的解决
2008-06-16 16:32 638利用css属性,将form的内部上下左右的填充距离设置为0就好 ... -
实现Web程序的自动登录
2008-06-16 17:13 746...
相关推荐
将图片生成缩略图和转换为二进制的工具类,缩略图大小可调
java程序开发中,将图片以缩略图形式展示,不错的资料,欢迎下载,共同学习
java 上传图片时生成对应的缩略图,缩略图的大小可手动更改,代码中有详细注释
网上找的缩略图生成方法都不够清晰,于是决定自己研究和改进生成缩略图方法。此方法压缩后的图片小,清晰度高,压缩速度快。5000张图片大概抽根烟的功夫就压缩完了。高清的哦。各种参数都是可配的,方便移植到自己...
java生成图片的缩略图 直接运行代码可看效果
java视频生成图片(缩略图)-实例-(指定时间)
* 压缩图片方法 * * @param oldFile 将要压缩的图片 * @param width 压缩宽 * @param height 压缩高 * @param quality 压缩清晰度 建议为1.0 * @param smallIcon 压缩图片后,添加的扩展名(在图片后缀名前添加...
java图片裁剪和java生成缩略图.pdf
使用java swing生成图片缩略图,可以自己设置图片的高度和宽度即可生成自己想要的图片。(双击jar包便可运行(在安装了jdk的环境下))
平时工作中用到的一些技术点,拿出来和大家共享一下。 有些功能比较粗糙,如果大家有更加完善的示例或建议,欢迎交流。...1、jpg图片缩略图:ImageUtil 2、poi创建excel:CDSHdlReport 3、计算表达式求值:Cal
java上传图片,处理图片,word转pdf图片缩略图生成,替换所有图片的ip地址工具类
从ueditor中把批量上传图片的flash分离出来,同时实现生成缩略图
使用jspsmartupload实现图片的批量上传,并保存到服务器的指定路径,自动生成缩略图,与图片的路径相同。(需要导入jspsmartupload.jar,在工程下的WebContent\WEB-INF\lib中 )
动态缩略图实现方案,java实现动态缩略图
使用 phantomjs 和 im4java 生成网页缩略图,切图用的是ImageMagick,附送im4java调用ImageMagick处理图片代码,包括剪切、调整大小、调整到指定比例大小不足部分补白边。包含 phantomjs 包,不包含ImageMagick。
这是一个java利用ffmpeg获取视频缩略图的java工程,里面有什么都有了,你只需要导入你的myeclpise,然后运行,看效果就是了,总共就一个类,二十多行代码
java:html生成图片,所有生成方法的优缺点。
这个小项目主要是利用java Thumbnaillator类库实现对图片的缩放功能,代码参考自慕课网Java实现图片等比例缩略图教学视频,目的为需求源码的小伙伴提供一个参考,如有问题大家再一起交流(附:资源积分是必选项,...
java头像剪上传剪切设置大小,生成固定缩略图大小,支持图像切割,图像缩放,图像格式转换等,图像缩放后图片太大变成图片过小失真问题暂未解决
很好的java代码,