文章说明:根据用户上传的图片按等比例生成相应的的缩略图,两小例笔记。
第一、java-image-scaling 开源小工具生成图片缩略图
Google Code Url:http://code.google.com/p/java-image-scaling/
Maven地址:http://mvnrepository.com/artifact/com.mortennobel/java-image-scaling/
以下实例以0.8.5为例实例
1、Maven配置文件Pom.xml
<dependency> <groupId>com.mortennobel</groupId> <artifactId>java-image-scaling</artifactId> <version>0.8.5</version> </dependency>
2、简单工具类
import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import javax.imageio.ImageIO; import com.mortennobel.imagescaling.ResampleOp; /** * 生产缩略图主方法 * @param fileFromPath 来源文件地址 * @param fileOutPath 输出缩略图地址 * @param outWidth 输出缩略图宽 * @param outHeight 输出缩略图高 * @throws IOException */ public void chreatePictureChange(String fileFromPath,String fileOutPath, int outWidth, int outHeight) throws IOException { //创建输出缩略图文件 =空 new File(fileOutPath).mkdirs(); //来源文件 BufferedImage fromImage = makeFormFile(new File(fileFromPath)); //输出缩略图尺寸计算 int[] outSize = countOutImgSize(fromImage, outWidth, outHeight); //输出缩略图 文件类型 String outFileType = fileFromPath.substring(fileFromPath.lastIndexOf(".")+1); //输出缩略图 IO输出 writeOutImage(makeOutFile(fromImage, (int) outSize[0], (int) outSize[1]),outFileType ,new File(fileOutPath)); } /** * 将地址转为图片 * @param file * @return * @throws IOException */ private BufferedImage makeFormFile(File file) throws IOException { BufferedImage image = null; if (file != null && file.isFile() && file.exists()) { image = ImageIO.read(file); } return image; } /** * 初始化 封装 目标图片大小 * @param fromImage 源文件 * @param outWidth 目标文件宽 * @param outHeight 目标文件高 * @return */ private int[] countOutImgSize(BufferedImage fromImage, int outWidth, int outHeight) { int[] zoomSize = new int[2]; int fromWidth = fromImage.getWidth(); int fromcHeigth = fromImage.getHeight(); // 根据输出缩略图的宽和高 除以 原图的宽与高 获取缩放比例 double ratio = 1.0; if (fromcHeigth > outHeight || fromWidth > outWidth) { // 根据原图中的 宽和高中较大的 值进行缩放 if (fromcHeigth > fromWidth) { ratio = outHeight * 1.0 / fromcHeigth; } else { ratio = outWidth * 1.0 / fromWidth; } } //计算输出的缩略图宽度和高度 zoomSize[0] = (int) (fromImage.getWidth() * ratio); zoomSize[1] = (int) (fromImage.getHeight() * ratio); return zoomSize; } /** * 组装 目标文件流 * @param fromImage 源文件 * @param outWidth 目标文件宽 * @param outHeigth 目标文件高 * @return */ private BufferedImage makeOutFile(BufferedImage fromImage, int outWidth, int outHeigth) { ResampleOp resampleOp = new ResampleOp(outWidth, outHeigth); BufferedImage tag = resampleOp.filter(fromImage, null); return tag; } /** * 文件写出 * @param fromImage 文件源 * @param outName 目标文件名 * @param outFileType 根据原文件名称后缀获得、指定生成缩略图是以哪种格式生成(JPG/PNG/GIF等) * @throws IOException */ private void writeOutImage(BufferedImage fromImage, String outFileType, File outFile) throws IOException { if (fromImage != null && outFileType!= null && !"".equals(outFileType) && outFile != null) { ImageIO.write(fromImage, outFileType, outFile); } }
直接调用chreatePictureChange方法就可以生成图片缩略图信息
所遇到问题:
1、生成缩略图的尺寸尽量宽高全部都填写---已解决。
2、注意生成的缩略图所设置的格式信息,部分PNG图片格式强制转为JPG时会导致生成的缩略图图片变为红色 --已解决。
优点:生成的大于当前尺寸的缩略图所占物理空间较小(小于等于原图大小),速度较快。
确定:图片清晰度较差。
第二种、thumbnailator 图片缩略小工具
Google Code Url:https://code.google.com/p/thumbnailator/
Maven下载地址:http://mvnrepository.com/artifact/net.coobird/thumbnailator
以下实例以0.4.6版本为例:
1、Maven配置文件Pom.xml
<dependency> <groupId>net.coobird</groupId> <artifactId>thumbnailator</artifactId> <version>0.4.6</version> </dependency>
2、简单工具类
/** * 图片缩略图切割 --- 根据文件地址 生成图片缩略图 * @param fileFromPath 图片源文件地址 * @param fileOutPath 图片缩略图地址 * @param outWidth 图片缩略图宽度 * @param outHeight 图片缩略图高度 * @param scale 缩放比例 * @param rotate 旋转度数 * @return */ public void chreatePictureChange(String fileFromPath,String fileOutPath, Integer outWidth, Integer outHeight, Float scale, Integer rotate) { Builder<File> builder = (Builder<File>) Thumbnails.of(fileFromPath); if (null != outWidth && null == outHeight) { builder.width(outWidth); } if (null == outWidth && null != outHeight) { builder.height(outHeight); } if (null != outWidth && null != outHeight) { builder.size(outWidth, outHeight); } if (null != scale) { builder.scale(scale); } if (null != rotate) { builder.rotate(rotate); } builder.toFile(fileOutPath); } /** * 图片缩略图切割 --- 根据文件流 生成图片缩略图 * @param fileFrom 图片源文件地址 * @param fileOutPath 图片缩略图地址 * @param outWidth 图片缩略图宽度 * @param outHeight 图片缩略图高度 * @param scale 缩放比例 * @param rotate 旋转度数 * @return */ public static void chreatePictureChange(InputStream fileFrom,String fileOutPath, Integer outWidth, Integer outHeight, Float scale, Integer rotate) { Boolean pictureChangeResult = false; try { Builder<InputStream> builder = (Builder<InputStream>) Thumbnails.of(fileFrom); if (null != outWidth && null == outHeight) { builder.width(outWidth); } if (null == outWidth && null != outHeight) { builder.height(outHeight); } if (null != outWidth && null != outHeight) { builder.size(outWidth, outHeight); } if (null != scale) { builder.scale(scale); } if (null != rotate) { builder.rotate(rotate); } builder.outputQuality(1.0d); builder.toFile(fileOutPath); pictureChangeResult = true; } catch (Exception e) { e.printStackTrace(); }finally{ fileFrom.close(); } }
outputQuality:输出的图片质量,范围:0.0~1.0,1为最高质量。注意使用该方法时输出的图片格式必须为jpg(即outputFormat("jpg")。其他格式我没试过,感兴趣的自己可以试试)。否则若是输出png格式图片,则该方法作用无效【这其实应该算是bug】。
来源地址:http://blog.csdn.net/wangpeng047/article/details/19624993
优点:清晰,可以指定缩略图的清晰度,功能强大。
缺点:生成缩略图物理大小大于原图,超出很多。
相关推荐
java代码生成缩略图,亲测有效,代码简洁拿来直接可以使用
java图片缩放 java缩略图 缩略图 java图片处理
NULL 博文链接:https://bavnnsym.iteye.com/blog/491378
缩略图类(通用) 本java类能将jpg、bmp、png、gif图片文件,进行等比或非等比的大小转换。
将图片生成缩略图和转换为二进制的工具类,缩略图大小可调
很好的java代码,
此工具包大大简化了文件缩略图的开发代码编写
用该方法将图片转换为缩略图...最近比较穷,所以分数高点,不要见怪
网上找的缩略图生成方法都不够清晰,于是决定自己研究和改进生成缩略图方法。此方法压缩后的图片小,清晰度高,压缩速度快。5000张图片大概抽根烟的功夫就压缩完了。高清的哦。各种参数都是可配的,方便移植到自己...
java 上传图片时生成对应的缩略图,缩略图的大小可手动更改,代码中有详细注释
java程序开发中,将图片以缩略图形式展示,不错的资料,欢迎下载,共同学习
超简单 获取视频缩略图。
java头像剪上传剪切设置大小,生成固定缩略图大小,支持图像切割,图像缩放,图像格式转换等,图像缩放后图片太大变成图片过小失真问题暂未解决
JspSmart 实现JSP上传图片并生成缩略图
java实现将图片和缩略图存储到数据库中
Java实现图片等比例缩略图
java生成缩略图
java 生成缩略图类 源代码 (已经封装好)