`
TimerBin
  • 浏览: 360957 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

java 缩略图

    博客分类:
  • JAVA
阅读更多

文章说明:根据用户上传的图片按等比例生成相应的的缩略图,两小例笔记。

第一、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缩略图涉及读取图像、计算缩放比例、使用图形上下文进行缩放绘制以及保存结果。通过`ThumbnailUtils.java`文件,我们可以创建一个独立的工具类,方便地在项目中复用这个功能。

    java缩略图代码

    【Java 缩略图代码详解】 在 Java 中生成图片缩略图是一项常见的需求,这通常涉及到图像处理技术。以下是一个 Java 类 `GetPicture` 的示例,它包含了获取网络图片、截取屏幕以及创建图片缩略图的功能。我们将详细...

    java 缩略图实现

    在Java编程中,生成缩略图是一项常见的任务,特别是在处理图像处理、网页设计或移动应用开发等领域。这个主题涉及到如何利用Java的APIs来创建图片的缩小版本,以节省存储空间,提高页面加载速度,或者优化用户体验。...

    java缩略图jar包

    总的来说,“java缩略图jar包”(thumbnailator)是Java开发中创建和管理缩略图的高效工具,它的强大功能和简洁API降低了图像处理的门槛,使得开发者能够更加专注于业务逻辑,而不用过多关心底层的图像处理细节。...

    java图片缩放 java缩略图 缩略图 java图片处理

    java图片缩放 java缩略图 缩略图 java图片处理

    JspSmart_img.rar_JAVA 缩略图_JSP上传_img缩略图_jspsmar_jspsmart

    "JspSmart_img.rar" 文件内容涉及到使用JAVA技术来处理图片上传以及生成缩略图的功能,这在网站开发中是非常常见的需求,特别是对于那些需要展示大量图像的网站,如社交媒体、电子商务平台等。 "JAVA 缩略图" 指的...

    ImageScale java 缩略图 算法

    本篇我们将深入探讨“ImageScale”这个Java算法,它是用于创建图片缩略图的一种技术。 首先,让我们理解“缩略图”的概念。缩略图是指按照一定的比例缩小原图尺寸的图片,通常用于预览或快速浏览。在Java中,生成...

    java 图片生成缩略图

    "java 图片生成缩略图" Java 图片生成缩略图是Java程序开发中一个常见的需求,通过将图片以缩略图形式展示,可以提高用户体验和网站性能。在本文中,我们将介绍使用Java生成缩略图的方法。 缩略图生成方法 在 ...

    java实现缩略图

    缩略图类(通用) 本java类能将jpg、bmp、png、gif图片文件,进行等比或非等比的大小转换。

    java生成图片缩略图和二进制文件的工具类

    将图片生成缩略图和转换为二进制的工具类,缩略图大小可调

    java 上传图片生成缩略图

    ### Java 上传图片生成缩略图的知识点解析 在现代Web开发中,处理图像是一项常见的需求,尤其是在涉及用户上传图片的应用场景中。本篇文章将基于提供的代码片段详细讲解如何使用Java来实现上传图片并自动生成缩略图...

    java 生成缩略图

    在Java编程中,生成缩略图是一项常见的任务,特别是在处理图像处理、网页设计或移动应用开发时。这个任务涉及到读取原始图像,调整其尺寸,然后保存为较小的版本,即缩略图。在这个过程中,我们可以使用Java的内置库...

    java高清缩略图不丢真

    网上找的缩略图生成方法都不够清晰,于是决定自己研究和改进生成缩略图方法。此方法压缩后的图片小,清晰度高,压缩速度快。5000张图片大概抽根烟的功夫就压缩完了。高清的哦。各种参数都是可配的,方便移植到自己...

    JAVA获取视频缩略图

    在Java编程环境中,获取视频缩略图是一项常见的需求,尤其在多媒体应用或者视频分享平台中。这个过程涉及到多媒体处理和图像操作的知识。本文将详细解释如何在Java中实现这一功能,以及相关的技术点。 首先,Java...

    java头像剪上传剪切设置大小,生成固定缩略图大小

    在Java编程语言中,处理图像任务,如头像剪切、上传、设置大小以及生成固定缩略图,是一项常见的需求。这些操作广泛应用于社交媒体、个人资料管理或任何需要用户自定义头像的系统中。本篇文章将深入探讨如何使用Java...

    java利用ffmpeg获取视频缩略图

    本项目就是关于如何在Java环境中使用ffmpeg来获取视频的缩略图,提供了一个简单易用的解决方案。 首先,ffmpeg是一个强大的命令行工具,它支持多种视频、音频格式的处理,包括转换、合并、剪辑以及生成缩略图等。在...

    java上传图片,处理图片,word转pdf图片缩略图生成

    java上传图片,处理图片,word转pdf图片缩略图生成,替换所有图片的ip地址工具类

    java生成缩略图类(已经封装好)

    java 生成缩略图类 源代码 (已经封装好)

Global site tag (gtag.js) - Google Analytics