- 浏览: 139527 次
- 性别:
- 来自: 北京
文章分类
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.geom.AffineTransform;
import java.awt.image.BufferedImage;
import java.awt.image.ColorModel;
import java.awt.image.WritableRaster;
import java.io.File;
import javax.imageio.ImageIO;
public class a {
public static BufferedImage resize(BufferedImage source, int targetW, int targetH) {
// targetW,targetH分别表示目标长和宽
int type = source.getType();
BufferedImage target = null;
double sx = (double) targetW / source.getWidth();
double sy = (double) targetH / source.getHeight();
//这里想实现在targetW,targetH范围内实现等比缩放。如果不需要等比缩放
//则将下面的if else语句注释即可
if(sx>sy)
{
sx = sy;
targetW = (int)(sx * source.getWidth());
}else{
sy = sx;
targetH = (int)(sy * source.getHeight());
}
if (type == BufferedImage.TYPE_CUSTOM) { //handmade
ColorModel cm = source.getColorModel();
WritableRaster raster = cm.createCompatibleWritableRaster(targetW, targetH);
boolean alphaPremultiplied = cm.isAlphaPremultiplied();
target = new BufferedImage(cm, raster, alphaPremultiplied, null);
} else
target = new BufferedImage(targetW, targetH, type);
Graphics2D g = target.createGraphics();
//smoother than exlax:
g.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY );
g.drawRenderedImage(source, AffineTransform.getScaleInstance(sx, sy));
g.dispose();
return target;
}
public static void saveImageAsJpg (String fromFileStr,String saveToFileStr,int width,int hight)
throws Exception {
BufferedImage srcImage;
// String ex = fromFileStr.substring(fromFileStr.indexOf("."),fromFileStr.length());
String imgType = "JPEG";
if (fromFileStr.toLowerCase().endsWith(".png")) {
imgType = "PNG";
}
// System.out.println(ex);
File saveFile=new File(saveToFileStr);
File fromFile=new File(fromFileStr);
srcImage = ImageIO.read(fromFile);
if(width > 0 || hight > 0)
{
srcImage = resize(srcImage, width, hight);
}
ImageIO.write(srcImage, imgType, saveFile);
}
public static void main (String argv[]) {
try{
//参数1(from),参数2(to),参数3(宽),参数4(高)
saveImageAsJpg("/home/liguojun/NetWork.jpg",
"/home/liguojun/NetWork1.jpg",
120,120);
} catch(Exception e){
e.printStackTrace();
}
}
}
import java.awt.RenderingHints;
import java.awt.geom.AffineTransform;
import java.awt.image.BufferedImage;
import java.awt.image.ColorModel;
import java.awt.image.WritableRaster;
import java.io.File;
import javax.imageio.ImageIO;
public class a {
public static BufferedImage resize(BufferedImage source, int targetW, int targetH) {
// targetW,targetH分别表示目标长和宽
int type = source.getType();
BufferedImage target = null;
double sx = (double) targetW / source.getWidth();
double sy = (double) targetH / source.getHeight();
//这里想实现在targetW,targetH范围内实现等比缩放。如果不需要等比缩放
//则将下面的if else语句注释即可
if(sx>sy)
{
sx = sy;
targetW = (int)(sx * source.getWidth());
}else{
sy = sx;
targetH = (int)(sy * source.getHeight());
}
if (type == BufferedImage.TYPE_CUSTOM) { //handmade
ColorModel cm = source.getColorModel();
WritableRaster raster = cm.createCompatibleWritableRaster(targetW, targetH);
boolean alphaPremultiplied = cm.isAlphaPremultiplied();
target = new BufferedImage(cm, raster, alphaPremultiplied, null);
} else
target = new BufferedImage(targetW, targetH, type);
Graphics2D g = target.createGraphics();
//smoother than exlax:
g.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY );
g.drawRenderedImage(source, AffineTransform.getScaleInstance(sx, sy));
g.dispose();
return target;
}
public static void saveImageAsJpg (String fromFileStr,String saveToFileStr,int width,int hight)
throws Exception {
BufferedImage srcImage;
// String ex = fromFileStr.substring(fromFileStr.indexOf("."),fromFileStr.length());
String imgType = "JPEG";
if (fromFileStr.toLowerCase().endsWith(".png")) {
imgType = "PNG";
}
// System.out.println(ex);
File saveFile=new File(saveToFileStr);
File fromFile=new File(fromFileStr);
srcImage = ImageIO.read(fromFile);
if(width > 0 || hight > 0)
{
srcImage = resize(srcImage, width, hight);
}
ImageIO.write(srcImage, imgType, saveFile);
}
public static void main (String argv[]) {
try{
//参数1(from),参数2(to),参数3(宽),参数4(高)
saveImageAsJpg("/home/liguojun/NetWork.jpg",
"/home/liguojun/NetWork1.jpg",
120,120);
} catch(Exception e){
e.printStackTrace();
}
}
}
发表评论
-
storm 安装
2013-09-02 16:32 3067------------------------------- ... -
动态代理性能比较
2013-01-18 17:02 1155转自http://javatar.iteye.com/blog ... -
java 类加载器学习
2012-12-14 10:47 1033引用1.自定义类加载器 public interface ... -
jackson 学习
2012-11-13 15:42 10021.json 转为object对象 public clas ... -
java 线程池 异常 处理 机制 分析
2012-10-31 19:34 2131public class ThreadTest { ... -
ThreadPoolExecutor 原理-- java 线程池
2012-08-08 19:14 1143整个ThreadPoolExecutor的任务处理有4 ... -
java 缓冲
2012-08-08 19:12 1063import org.apache.log4j.Logge ... -
java 程序消耗 cpu 100% 查找方法
2012-05-16 14:38 17216问题原因:由于HashMap是非线程安全的,在多线程访问时,造 ... -
java io
2012-04-24 11:06 9161、按字节读取文件内容 2、按字符读取文件内容 3、按行读取 ... -
java 内省
2011-11-20 22:58 835java内省 -
系统常用工具类
2011-04-20 17:46 10331.ArithUtil.java ... -
spring 面向切面编程
2010-12-27 17:03 1088@Aspect public class AspectCoup ... -
jxl 写入excel
2010-11-10 13:52 10131.程序调用 ReportInterface report ... -
java 读取excel
2010-11-10 09:04 954package com.longtuo.client.act ... -
XStream简单介绍
2010-09-10 15:44 1684创建能够序列化的类 这是一组简单的类。XStream能把这 ... -
java中对集合类的排序
2010-05-04 13:47 9021.第一种 public class User impleme ... -
Java 获取操作系统信息与Desktop类
2009-11-17 16:24 1365import java.util.Properties; ... -
java 事物处理
2009-10-15 10:52 1432public boolean deleteSchedule ...
相关推荐
在Java编程中,生成略缩图是一项常见的任务,特别是在开发涉及图像处理的应用,如图库系统或社交媒体平台。本文将深入讲解如何使用Java实现单图和批量生成略缩图的方法。 ### 一、单图生成略缩图 单图生成略缩图的...
Java实现添加水印,文件上传,生成略缩图,文件操作,Md5加密码,时间日期操作等java常用的工具类源码(28个合集),可直接用于你的项目设计中,实战中有些代码直接套用就ok,不用动手了,会写代码的不一定是高手,...
- 使用 `BitmapRegionDecoder` 可以只解码图片的一部分,这对于处理大图生成略缩图非常有效,可以显著减少内存占用。 - `PurgeableBitmap` 是一个优化的 Bitmap 实现,允许系统在内存紧张时释放其占用的内存,适用...
总的来说,Java提供了强大的图像处理能力,使得在服务器端动态生成缩略图成为可能。通过熟练掌握Java 2D API和其他相关库,开发者可以构建高效、灵活的动态缩略图系统,满足各种应用场景的需求。
在IT行业中,自动生成缩略图是一项常见的任务,特别是在网站开发、图像处理和多媒体应用中。缩略图的生成能够帮助我们快速预览大尺寸图片,节省存储空间,提高页面加载速度,提升用户体验。以下是对这个主题的详细...
略缩图的生成有助于快速查看大量图片,节省内存和提高性能。 删除和复制图片的操作涉及到文件系统操作。Java的java.io包提供了File类,可以用于创建、删除、重命名文件和目录。复制文件时,可以使用FileInputStream...
Android提供了多种方式来生成图片的缩略图,如`Bitmap.createScaledBitmap()`或`ThumbnailUtils.extractThumbnail()`。这里我们使用`MediaStore.Images.Media.getBitmap()`方法,它可以基于图片的ID获取系统的缩略图...
本资源分享了28个Java常用的工具类源码,涵盖了多种实用功能,包括添加水印、文件上传、生成略缩图、文件操作、MD5加密、时间日期处理、字符串操作以及过滤器和数据导出到Excel。 1. **添加水印**:在图像处理中,...
它位于`android.media`包下,主要提供了静态方法来生成视频的缩略图。下面我们将深入解析`ThumbnailUtils`的使用方法。 1. **获取视频缩略图** 获取视频缩略图主要通过`ThumbnailUtils.createVideoThumbnail()`...
这个压缩包“BMP文件采样读取缩略图.rar”显然包含了与BMP文件处理相关的代码或教程,特别是关于如何采样读取BMP文件以生成缩略图的内容。以下是对这个主题的详细讲解: 首先,BMP文件结构主要包括以下几个部分: ...
Android同样提供了`ThumbnailUtils`类,可以方便地生成视频的缩略图。以下是一个示例方法: ```java public static Bitmap getVideoThumbnail(String videoPath, int width, int height, int kind) { Bitmap ...