首页 > Java教程 > 正文

最近工作中遇到需要在Java处理图片的大小以及添加水印的功能,查询资料中发现了thumbnailator,这个thumbnailator组件确实让人眼睛一亮,确实小组件干大事,对图片的处理解决了Java开发中处理图片的困难。这篇文章通过几个例子和一些注释说明thumbnailator的用法,体会其短小精悍的强大之处。

thumbnailator网址:https://code.google.com/p/thumbnailator

1.对图片尺寸进行重设

/**
 * 重设图片尺寸
 *
 * @throws IOException
 */
@Ignore
@Test
public void test1() throws IOException {
    Thumbnails.of(new File("E:\\test\\1a.jpg"))
              .size(160, 160)
              .toFile(new File("E:\\test\\1a_size_1.jpg"));
}

注:可以通过查看源码或者API获取响应的操作。比如:toFile(String outputFilePath)

2.对图片尺寸进行重设,并且在中间添加水印

/**
 * 重设图片尺寸,并在中间添加水印
 *
 * @throws IOException
 */
@Ignore
@Test
public void test2() throws IOException {
    Thumbnails.of(new File("E:\\test\\1a.jpg"))
              .size(480, 480)
              .watermark(Positions.CENTER,
                         ImageIO.read(new File("E:\\test\\02.png")), 0.8f)
              .toFile(new File("E:\\test\\1a_water_1.jpg"));
}

注:水印的位置通过枚举类Positions设置。对于水印位置的设置可以通过对枚举类Positions扩展。watermark方法的第三个参数是透明度,0.0f(完全透明)-1.0f(完全不透明) 。

3.缩放图片,并添加文字处理

/**
 * 缩放图片,并在图片右下角添加文字
 *
 * @throws IOException
 */
@Ignore
@Test
public void test4() throws IOException {
    //根据文字自定义出一张水印图片
    BufferedImage bi = new BufferedImage(64, 64, BufferedImage.TYPE_INT_RGB);
    Graphics2D g = bi.createGraphics();
    g.setColor(Color.LIGHT_GRAY);
    g.drawRect(0, 0, 64, 64);
    char[] data = "csyor.com".toCharArray();
    g.drawChars(data, 0, data.length, 5, 32);

    Thumbnails.of(new File("E:\\test\\1a.jpg"))
              .scale(0.5f)
              .watermark(Positions.BOTTOM_RIGHT, bi, 0.9f)
              .toFile(new File("E:\\test\\1a_front_1.jpg"));
}

注:这个方法对水印生成进行扩展,通过对BufferedImage进行处理产生自定义的水印。不建议这么去做,因为thumbnailator组件本意就是为了减轻Java对图片处理的负担,因此建议准备好作为水印的图片,然后根据 2 中的方式为目标图片添加水印。scale方法用于缩放图片。

4.图片进行缩放,并且旋转

/**
 * 图片旋转
 *
 * @throws IOException
 */
@Ignore
@Test
public void test6() throws IOException {
    Thumbnails.of(new File("E:\\test\\1a.jpg"))
              .scale(0.5f)
              .rotate(45.0f)
              .toFile(new File("E:\\test\\1a_rotate_1.jpg"));
}

注:对图片进行0.5倍缩放,并且旋转45度,效果图如下:

图片旋转效果图

5.批量处理

前面的几个例子展示了thumbnailator对单个图片的尺寸重设,缩放,打水印,旋转,更为强大的是一个图片能做的事批量也能做,甚至批量对图片输出格式设定,重命名,复制,移动都可以。

/**
 * 批量处理图片
 *
 * @throws IOException
 */
@Ignore
@Test
public void test7() throws IOException {
    File dir = new File("E:\\test\");
    File[] fs = dir.listFiles();
    Thumbnails.of(fs)
              .scale(0.8f)
              .outputFormat("jpg")
              .outputQuality(1.0f)
              .toFiles(new File("E:\\test\"), Rename.PREFIX_HYPHEN_THUMBNAIL);
}

注:这个例子对test目录下的图片进行0.8倍缩放,输入格式设为jpg,最高质量,输入值test目录,且重命名为:thumbnail-原图片名。

通过以上几个例子涵盖了thumbnailator的基础功能,我们可以在源代码的基础上进行扩展来实现更多的功能或者满足比较特殊的需要,例如:对于输出文件的重命名,水印位置等都可以进行扩展。另外还可以将图片裁剪,缩放,水印,重命名等结合起来解决更复杂的问题。具体的可以参看thumbnailator的帮助文档。

以上内容来自于网络,如有侵权联系即删除。

猜你喜欢
发表评论

电子邮件地址不会被公开。 必填项已用*标注

评论信息