java实现创建缩略图、伸缩图片比例生成的方法
发布时间:2020-12-14 14:20:22 所属栏目:Java 来源:网络整理
导读:本篇章节讲解java实现创建缩略图、伸缩图片比例生成的方法。供大家参考研究。具体实现方法如下: 该实例支持将Image的宽度、高度缩放到指定width、height,并保存在指定目录 通过目标对象的大小和标准(指定)大小计算出图片缩小的比例,可以设置图
本篇章节讲解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 * @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 * @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,width,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,Float quality,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,Image image) { int targetWidth = image.getWidth(null); int targetHeight = image.getHeight(null); double scaling = getScaling(targetWidth,targetHeight,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,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> 将指定的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,URL targetURL) throws ImageFormatException,IOException { image = ImageIO.read(targetURL); int[] size = getSize(width,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,IOException { image = ImageIO.read(targetFile); int[] size = getSize(scale,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,IOException { image = ImageIO.read(targetURL); int[] size = getSize(scale,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,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,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,IOException { image = ImageIO.read(targetFile); int[] size = getSizeByHeight(height,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,IOException { image = ImageIO.read(targetURL); int[] size = getSizeByHeight(height,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(),ImageIO.read(new URL("http://www.open-open.com/lib/images/logo.jpg"))); } } 希望本文所述对大家的Java程序设计有所帮助。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |