• thumbnailator图片处理


    一、简介
      thumbnailator是一个用来对图片对象进行操作的Java类库。通过它我们可以很方面的使用代码的方式,对图片进行一些操作。如缩放,裁减,旋转,水印等。thumbnailator项目主页如下:https://code.google.com/p/thumbnailator/

    二、示例
      以下示例使用maven构建,需要添加如下依赖

    <dependency>
      <groupId>net.coobird</groupId>
      <artifactId>thumbnailator</artifactId>
      <version>0.4.8</version>
    </dependency>

      示例代码如下:

     1 package com.demo.test;
     2 
     3 import java.awt.image.BufferedImage;
     4 import java.io.File;
     5 import java.io.IOException;
     6 import java.math.BigDecimal;
     7 
     8 import javax.imageio.ImageIO;
     9 
    10 import org.slf4j.Logger;
    11 import org.slf4j.LoggerFactory;
    12 
    13 import com.longtime.app.image.web.ImageServlet;
    14 
    15 import net.coobird.thumbnailator.Thumbnails;
    16 import net.coobird.thumbnailator.Thumbnails.Builder;
    17 import net.coobird.thumbnailator.geometry.Positions;
    18 
    19 public class CovertUtils {
    20 
    21     /**
    22      * 
    23      * @param sourceFile
    24      *            源图片文件
    25      * @param targetFile
    26      *            目标图片文件
    27      * @param targetWidth
    28      *            目标图片文件宽 高
    29      * @param targetHeight
    30      *            目标图片文件 高
    31      * @throws IOException
    32      * @throws MagickException
    33      */
    34     public static void cover(String sourceFile, String targetFile, int targetWidth, int targetHeight) {
    35         File fromFile = new File(sourceFile);
    36         BufferedImage srcImage = null;
    37         int s_height = 0;
    38         int s_width = 0;
    39         try {
    40             srcImage = ImageIO.read(fromFile);
    41             // 获取源文件的宽高
    42             s_height = srcImage.getHeight();
    43             s_width = srcImage.getWidth(); 
    44             System.out.println(s_height + "");
    45             System.out.println(s_width + "");
    46         } catch (IOException e1) {
    47             e1.printStackTrace();
    48         }
    49         // 判断是否需要压缩
    50         if (targetWidth != s_width || targetHeight != s_height) {// 需要压缩
    51             BigDecimal n = new BigDecimal(s_height).divide(new BigDecimal(s_width), 10, BigDecimal.ROUND_UP);// 源图片文件高/宽  的比例
    52             BigDecimal m = new BigDecimal(targetHeight).divide(new BigDecimal(targetWidth), 10, BigDecimal.ROUND_UP);// 目标图片文件高/宽 的比例
    53             System.out.println(n+ "");
    54             System.out.println(m+ "");
    55             int flag = n.compareTo(m); //比较源图片文件和目标图片 的高/宽 比
    56             try {
    57                 if (flag == 0) {// n == m,高/宽 比一致, 无需裁减, 直接压缩
    58                     System.out.println("flag: " + flag);
    59                     Thumbnails.of(sourceFile).forceSize(targetWidth, targetHeight).toFile(targetFile);
    60                 } else { // 高/宽 比不一致,需要裁减
    61                     if (flag > 0) {// 高的比例 > 宽的比例,以宽的比例进行缩放, 需要裁减高
    62                         srcImage = Thumbnails.of(sourceFile).width(targetWidth).asBufferedImage();//以宽的比例进行缩放
    63                     } else if (flag < 0) {// n < m 高的比例 < 宽的比例,以高的比例进行缩放, 需要裁减宽
    64                         srcImage = Thumbnails.of(sourceFile).height(targetHeight).asBufferedImage();//以高的比例进行缩放
    65                     }
    66                     // 居中裁减
    67                     Builder<BufferedImage> builder = Thumbnails.of(srcImage)
    68                             .sourceRegion(Positions.CENTER, targetWidth, targetHeight).size(targetWidth, targetHeight);
    69                     builder.toFile(targetFile);
    70                 }
    71             } catch (IOException e) {
    72                 // TODO Auto-generated catch block
    73                 e.printStackTrace();
    74             }
    75         }
    76     }
    77 
    78     public static void main(String[] args) throws IOException {
    79         String sourceFile = "E://uploadimg//2014//12//6972df55641a4c5ca287a2cb1a86627c.png";//源文件
    80         String targetFile = "E://uploadimg//2014//12//6972df55641a4c5ca287a2cb1a86627c_400x800.png"; //处理之后的文件
    81         int width = 400; //处理之后文件的宽
    82         int height = 800; //处理之后文件的高
    83         try {
    84             cover(sourceFile, targetFile, width, height);
    85         } catch (Exception e) {
    86             e.printStackTrace();
    87         }
    88 
    89     }
    90 }
  • 相关阅读:
    四、Ubuntu16.04下TestLink的部署【测试管理必备工具】
    配置反向代理服务器
    三、Ubuntu16.04 安装Jira8.2.2(自带中文包)和破解
    二、Ubuntu16.04安装搜狗wps
    【C#实现漫画算法系列】-判断 2 的乘方
    [Entity Framework+MVC复习总结1]-WebForm与Asp.Net MVC
    【数据结构总结1】-数据结构的自述
    快速理解区块链
    CSS容器属性
    CSS background-clip 属性
  • 原文地址:https://www.cnblogs.com/always-online/p/4177822.html
Copyright © 2020-2023  润新知