zoukankan      html  css  js  c++  java
  • 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 }
  • 相关阅读:
    Flutter form 的表单 input
    FloatingActionButton 实现类似 闲鱼 App 底部导航凸起按钮
    Flutter 中的常见的按钮组件 以及自 定义按钮组件
    Drawer 侧边栏、以及侧边栏内 容布局
    AppBar 自定义顶部导航按钮 图标、颜色 以及 TabBar 定义顶部 Tab 切换 通过TabController 定义TabBar
    清空路由 路由替换 返回到根路由
    应对ubuntu linux图形界面卡住的方法
    [转] 一块赚零花钱
    [转]在树莓派上搭建LAMP服务
    ssh保持连接
  • 原文地址:https://www.cnblogs.com/always-online/p/4177822.html
Copyright © 2011-2022 走看看