`
fanjf
  • 浏览: 332735 次
  • 性别: Icon_minigender_1
  • 来自: 安徽
社区版块
存档分类
最新评论

缩放图片工具类,创建缩略图、伸缩图片比例

    博客分类:
  • Java
 
阅读更多

支持将Image的宽度、高度缩放到指定width、height,并保存在指定目录
通过目标对象的大小和标准(指定)大小计算出图片缩小的比例
可以设置图片缩放质量,并且可以根据指定的宽高缩放图片

 

源码:

 

package com.hoo.util;

 

import java.awt.Image;

import java.awt.image.BufferedImage;

import java.io.File;

import java.io.FileOutputStream;

import java.io.IOException;

import java.net.MalformedURLException;

import java.net.URL;

import javax.imageio.ImageIO;

import com.sun.image.codec.jpeg.ImageFormatException;

import com.sun.image.codec.jpeg.JPEGCodec;

import com.sun.image.codec.jpeg.JPEGEncodeParam;

import com.sun.image.codec.jpeg.JPEGImageEncoder;

 

/**

* <b>function:</b> 缩放图片工具类,创建缩略图、伸缩图片比例

* @author hoojo

* @createDate 2012-2-3 上午10:08:47

* @file ScaleImageUtils.java

* @package com.hoo.util

* @blog http://blog.csdn.net/IBM_hoojo

* http://hoojo.cnblogs.com

* @email hoojo_@126.com

* @version 1.0

*/

public abstract class ScaleImageUtils {

 

private static final float DEFAULT_SCALE_QUALITY = 1f;

private static final String DEFAULT_IMAGE_FORMAT = ".jpg" ; // 图像文件的格式

private static final String DEFAULT_FILE_PATH = "C:/temp-" ;

 

/**

* <b>function:</b> 设置图片压缩质量枚举类;

* Some guidelines: 0.75 high quality、0.5 medium quality、0.25 low quality

* @author hoojo

* @createDate 2012-2-7 上午11:31:45

* @file ScaleImageUtils.java

* @package com.hoo.util

* @project JQueryMobile

* @blog http://blog.csdn.net/IBM_hoojo

* @email hoojo_@126.com

* @version 1.0

*/

public enum ImageQuality {

max(1.0f), high(0.75f), medium(0.5f), low(0.25f);

 

private Float quality;

public Float getQuality() {

return this .quality;

}

ImageQuality(Float quality) {

this .quality = quality;

}

}

 

private static Image image;

 

/**

* <b>function:</b> 通过目标对象的大小和标准(指定)大小计算出图片缩小的比例

* @author hoojo

* @createDate 2012-2-6 下午04:41:48

* @param targetWidth 目标的宽度

* @param targetHeight 目标的高度

* @param standardWidth 标准(指定)宽度

* @param standardHeight 标准(指定)高度

* @return 最小的合适比例

*/

public static double getScaling(double targetWidth, double targetHeight, double standardWidth, double standardHeight) {

double widthScaling = 0d;

double heightScaling = 0d;

if (targetWidth > standardWidth) {

widthScaling = standardWidth / (targetWidth * 1.00d);

} else {

widthScaling = 1d;

}

if (targetHeight > standardHeight) {

heightScaling = standardHeight / (targetHeight * 1.00d);

} else {

heightScaling = 1d;

}

return Math.min(widthScaling, heightScaling);

}

 

/**

* <b>function:</b> 将Image的宽度、高度缩放到指定width、height,并保存在savePath目录

* @author hoojo

* @createDate 2012-2-6 下午04:54:35

* @param width 缩放的宽度

* @param height 缩放的高度

* @param savePath 保存目录

* @param targetImage 即将缩放的目标图片

* @return 图片保存路径、名称

* @throws ImageFormatException

* @throws IOException

*/

public static String resize(int width, int height, String savePath, Image targetImage) throws ImageFormatException, IOException {

width = Math.max(width, 1);

height = Math.max(height, 1);

BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);

image.getGraphics().drawImage(targetImage, 0, 0, width, height, null);

 

if (savePath == null || "" .equals(savePath)) {

savePath = DEFAULT_FILE_PATH + System.currentTimeMillis() + DEFAULT_IMAGE_FORMAT;

}

 

FileOutputStream fos = new FileOutputStream(new File(savePath));

JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(fos);

encoder.encode(image);

 

image.flush();

fos.flush();

fos.close();

 

return savePath;

}

 

/**

* <b>function:</b> 可以设置图片缩放质量,并且可以根据指定的宽高缩放图片

* @author hoojo

* @createDate 2012-2-7 上午11:01:27

* @param width 缩放的宽度

* @param height 缩放的高度

* @param quality 图片压缩质量,最大值是1; 使用枚举值:{@link ImageQuality}

* Some guidelines: 0.75 high quality、0.5 medium quality、0.25 low quality

* @param savePath 保存目录

* @param targetImage 即将缩放的目标图片

* @return 图片保存路径、名称

* @throws ImageFormatException

* @throws IOException

*/

public static String resize(int width, int height, Float quality, String savePath, Image targetImage) throws ImageFormatException, IOException {

width = Math.max(width, 1);

height = Math.max(height, 1);

BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);

image.getGraphics().drawImage(targetImage, 0, 0, width, height, null);

 

if (savePath == null || "" .equals(savePath)) {

savePath = DEFAULT_FILE_PATH + System.currentTimeMillis() + DEFAULT_IMAGE_FORMAT;

}

 

FileOutputStream fos = new FileOutputStream(new File(savePath));

JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(fos);

 

JPEGEncodeParam encodeParam = JPEGCodec.getDefaultJPEGEncodeParam(image);

if (quality == null || quality <= 0) {

quality = DEFAULT_SCALE_QUALITY;

}

/** 设置图片压缩质量 */

encodeParam.setQuality(quality, true);

encoder.encode(image, encodeParam);

 

image.flush();

fos.flush();

fos.close();

 

return savePath;

}

 

/**

* <b>function:</b> 通过指定大小和图片的大小,计算出图片缩小的合适大小

* @author hoojo

* @createDate 2012-2-6 下午05:53:10

* @param width 指定的宽度

* @param height 指定的高度

* @param image 图片文件

* @return 返回宽度、高度的int数组

*/

public static int [] getSize(int width, int height, Image image) {

int targetWidth = image.getWidth(null);

int targetHeight = image.getHeight(null);

double scaling = getScaling(targetWidth, targetHeight, width, height);

long standardWidth = Math.round(targetWidth * scaling);

long standardHeight = Math.round(targetHeight * scaling);

return new int [] { Integer.parseInt(Long.toString(standardWidth)), Integer.parseInt(String.valueOf(standardHeight)) };

}

 

/**

* <b>function:</b> 通过指定的比例和图片对象,返回一个放大或缩小的宽度、高度

* @author hoojo

* @createDate 2012-2-7 上午10:27:59

* @param scale 缩放比例

* @param image 图片对象

* @return 返回宽度、高度

*/

public static int [] getSize(float scale, Image image) {

int targetWidth = image.getWidth(null);

int targetHeight = image.getHeight(null);

long standardWidth = Math.round(targetWidth * scale);

long standardHeight = Math.round(targetHeight * scale);

return new int [] { Integer.parseInt(Long.toString(standardWidth)), Integer.parseInt(String.valueOf(standardHeight)) };

}

 

public static int [] getSize(int width, Image image) {

int targetWidth = image.getWidth(null);

int targetHeight = image.getHeight(null);

long height = Math.round((targetHeight * width) / (targetWidth * 1.00f));

return new int [] { width, Integer.parseInt(String.valueOf(height)) };

}

 

public static int [] getSizeByHeight(int height, Image image) {

int targetWidth = image.getWidth(null);

int targetHeight = image.getHeight(null);

long width = Math.round((targetWidth * height) / (targetHeight * 1.00f));

return new int [] { Integer.parseInt(String.valueOf(width)), height };

}

 

/**

*

* <b>function:</b> 将指定的targetFile图片文件的宽度、高度大于指定width、height的图片缩小,并保存在savePath目录

* @author hoojo

* @createDate 2012-2-6 下午04:57:02

* @param width 缩小的宽度

* @param height 缩小的高度

* @param savePath 保存目录

* @param targetImage 改变的目标图片

* @return 图片保存路径、名称

* @throws ImageFormatException

* @throws IOException

*/

public static String resize(int width, int height, String savePath, File targetFile) throws ImageFormatException, IOException {

image = ImageIO.read(targetFile);

int [] size = getSize(width, height, image);

return resize(size[0], size[1], savePath, image);

}

 

/**

*

* <b>function:</b> 将指定的targetURL网络图片文件的宽度、高度大于指定width、height的图片缩小,并保存在savePath目录

* @author hoojo

* @createDate 2012-2-6 下午04:57:07

* @param width 缩小的宽度

* @param height 缩小的高度

* @param savePath 保存目录

* @param targetImage 改变的目标图片

* @return 图片保存路径、名称

* @throws ImageFormatException

* @throws IOException

*/

public static String resize(int width, int height, String savePath, URL targetURL) throws ImageFormatException, IOException {

image = ImageIO.read(targetURL);

int [] size = getSize(width, height, image);

return resize(size[0], size[1], savePath, image);

}

 

/**

* <b>function:</b> 将一个本地的图片文件按照指定的比例进行缩放

* @author hoojo

* @createDate 2012-2-7 上午10:29:18

* @param scale 缩放比例

* @param savePath 保存文件路径、名称

* @param targetFile 本地图片文件

* @return 新的文件名称

* @throws ImageFormatException

* @throws IOException

*/

public static String resize(float scale, String savePath, File targetFile) throws ImageFormatException, IOException {

image = ImageIO.read(targetFile);

int [] size = getSize(scale, image);

return resize(size[0], size[1], savePath, image);

}

 

/**

* <b>function:</b> 将一个网络图片文件按照指定的比例进行缩放

* @author hoojo

* @createDate 2012-2-7 上午10:30:56

* @param scale 缩放比例

* @param savePath 保存文件路径、名称

* @param targetFile 本地图片文件

* @return 新的文件名称

* @throws ImageFormatException

* @throws IOException

*/

public static String resize(float scale, String savePath, URL targetURL) throws ImageFormatException, IOException {

image = ImageIO.read(targetURL);

int [] size = getSize(scale, image);

return resize(size[0], size[1], savePath, image);

}

 

/**

* <b>function:</b> 按照固定宽度进行等比缩放本地图片

* @author hoojo

* @createDate 2012-2-7 上午10:49:56

* @param width 固定宽度

* @param savePath 保存路径、名称

* @param targetFile 本地目标文件

* @return 返回保存路径

* @throws ImageFormatException

* @throws IOException

*/

public static String resize(int width, String savePath, File targetFile) throws ImageFormatException, IOException {

image = ImageIO.read(targetFile);

int [] size = getSize(width, image);

return resize(size[0], size[1], savePath, image);

}

 

/**

* <b>function:</b> 按照固定宽度进行等比缩放网络图片

* @author hoojo

* @createDate 2012-2-7 上午10:50:52

* @param width 固定宽度

* @param savePath 保存路径、名称

* @param targetFile 本地目标文件

* @return 返回保存路径

* @throws ImageFormatException

* @throws IOException

*/

public static String resize(int width, String savePath, URL targetURL) throws ImageFormatException, IOException {

image = ImageIO.read(targetURL);

int [] size = getSize(width, image);

return resize(size[0], size[1], savePath, image);

}

 

/**

*

* <b>function:</b> 按照固定高度进行等比缩放本地图片

* @author hoojo

* @createDate 2012-2-7 上午10:51:17

* @param height 固定高度

* @param savePath 保存路径、名称

* @param targetFile 本地目标文件

* @return 返回保存路径

* @throws ImageFormatException

* @throws IOException

*/

public static String resizeByHeight(int height, String savePath, File targetFile) throws ImageFormatException, IOException {

image = ImageIO.read(targetFile);

int [] size = getSizeByHeight(height, image);

return resize(size[0], size[1], savePath, image);

}

 

/**

* <b>function:</b> 按照固定高度进行等比缩放网络图片

* @author hoojo

* @createDate 2012-2-7 上午10:52:23

* @param height 固定高度

* @param savePath 保存路径、名称

* @param targetFile 本地目标文件

* @return 返回保存路径

* @throws ImageFormatException

* @throws IOException

*/

public static String resizeByHeight(int height, String savePath, URL targetURL) throws ImageFormatException, IOException {

image = ImageIO.read(targetURL);

int [] size = getSizeByHeight(height, image);

return resize(size[0], size[1], savePath, image);

}

 

/**

* <b>function:</b>

* @author hoojo

* @createDate 2012-2-3 上午10:08:47

* @param args

* @throws IOException

* @throws MalformedURLException

* @throws ImageFormatException

*/

public static void main(String[] args) throws ImageFormatException, MalformedURLException, IOException {

 

System.out.println(ScaleImageUtils.resize(140, 140, null, new URL("http://www.open-open.com/lib/images/logo.jpg" )));

ScaleImageUtils.resize(100, 100, ImageQuality.high.getQuality(), null, ImageIO.read(new URL("http://www.open-open.com/lib/images/logo.jpg" )));

}

}


版权所有,转载请注明出处 本文出自: http://www.cnblogs.com/hoojo/archive/2012/02/08/2342608.html

分享到:
评论

相关推荐

    java实现创建缩略图、伸缩图片比例生成的方法

    Java 实现创建缩略图和伸缩图片比例生成的方法,主要涉及到图像处理技术,特别是针对Java平台的图像操作。在Java中,我们可以使用内置的`java.awt.image`包中的类来处理图片,如`BufferedImage`和`Image`。下面我们...

    JQuery&CSS;&CSS;+DIV实例大全.rar

    61.js仿淘宝网鼠标经过缩略图放大图片效果的jQuery Fancy Hover Effect完整实例 62.Supersized jQuery全屏相册图片自动切换插件 63.[荐]jquery仿flash漂亮横向图片滚动效果完整版(兼容性非常好) 64.[荐]...

    网趣网上购物系统的部分特点与精华

     四五、支持订单缩略图显示,增加热门搜索,显示用户最关注的搜索信息。  四六、支持数据库在线备份、在线恢复、数据库大小查看,数据下载等!  四七、支持图片水印与文字水印功能,并可设置文字嵌入的5个方位等...

    网趣网上购物系统时尚版V13.0

     四五、支持订单缩略图显示,增加热门搜索,显示用户最关注的搜索信息。  四六、支持数据库在线备份、在线恢复、数据库大小查看,数据下载等!  四七、支持图片水印与文字水印功能,并可设置文字嵌入的5个方位等...

    网趣网上购物系统时尚版

     四四、支持订单缩略图显示,增加热门搜索,显示用户最关注的搜索信息。  四五、支持数据库在线备份、在线恢复、数据库大小查看,数据下载等!  四六、支持图片水印与文字水印功能,并可设置文字嵌入的5个方位等...

    银色网新企业网站管理系统

    网新企业网站管理系统是专业为个人和企业网站建设而开发的一款智能化程序。该程序基于ASP+ACCESS环境开发,拥有完善的网站前台和后台全智能化管理...2.修复产品缩略图自动缩放功能,图片按比例缩放,解决图片变形问题

    网趣网上购物系统时尚版 V9.0

    二四、增加缩略图弹出显示功能 强大的商品管理无疑给管理者提供了便利,新增的弹出图片显示功能,只需将鼠标移到商品上,即可弹出此商品的图片,非常方便,同时前台报价中心也增加了鼠标指向后显示图片的功能,提供...

    服务器:Iamages API服务器

    2. 图像预览:展示已上传或检索到的图片,可能支持缩略图和全尺寸查看。 3. 操作按钮:如删除、下载、编辑图像等。 4. 搜索功能:根据关键词或元数据搜索图片。 5. 用户身份验证和权限管理:确保只有登录用户才能...

    绿色网新企业网站管理系统

    网新企业网站管理系统(绿色)是专业为个人和企业网站建设而开发的一款智能化程序。该程序基于ASP+ACCESS环境开发,拥有完善的网站前台和后台全智能...2.修复产品缩略图自动缩放功能,图片按比例缩放,解决图片变形问题。

    红色网新企业网站管理系统

    红色网新中英文企业手机电脑建站系统是专业为个人和企业网站建设而开发的一款智能化程序。该程序基于ASP+ACCESS环境开发,拥有完善的网站前台和...2.修复产品缩略图自动缩放功能,图片按比例缩放,解决图片变形问题。

    蓝色网新企业网站管理系统-Asp

    网新企业网站管理系统(蓝色)是专业为个人和企业网站建设而开发的一款智能化程序。蓝色网新企业网站管理系统基于ASP+ACCESS环境开发,拥有完善的...2.修复产品缩略图自动缩放功能,图片按比例缩放,解决图片变形问题。

    红色网新企业网站管理系统-Asp

    红色网新中英文企业手机电脑建站系统是专业为个人和企业网站建设而开发的一款智能化程序。该程序基于ASP+ACCESS环境开发,拥有完善的网站前台和...2.修复产品缩略图自动缩放功能,图片按比例缩放,解决图片变形问题。

Global site tag (gtag.js) - Google Analytics