Thumbnailator是一个非常好的图片开源工具,可以很好的完成图片处理。
从API提供现有的图像文件和图像对象的缩略图中简化了缩略过程,两三行代码就能够从现有图片生成缩略图,且允许微调缩略图生成,同时保持了需要写入到最低限度的代码量。同时还支持根据一个目录批量生成缩略图。
Maven中pom.xml 配置:
<dependency> <groupId>net.coobird</groupId> <artifactId>thumbnailator</artifactId> <version>0.4.8</version> </dependency>
以下是包装类的代码:
package com.sun4j.app.util; import java.awt.image.BufferedImage; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; import javax.imageio.ImageIO; import net.coobird.thumbnailator.Thumbnails; import net.coobird.thumbnailator.geometry.Position; public class ThumbnailatorUtils { /** * 指定大小进行缩放 * 若图片横比width小,高比height小,不变 若图片横比width小,高比height大,高缩小到height,图片比例不变 * 若图片横比width大,高比height小,横缩小到width,图片比例不变 * 若图片横比width大,高比height大,图片按比例缩小,横为width或高为height * * @param source * 输入源 * @param output * 输出源 * @param width * 宽 * @param height * 高 */ public static void ImgThumb(String source, String output, int width, int height) { try { Thumbnails.of(source).size(width, height).toFile(output); } catch (IOException e) { e.printStackTrace(); } } /** * 指定大小进行缩放 * * @param source * 输入源 * @param output * 输出源 * @param width * 宽 * @param height * 高 */ public static void ImgThumb(File source, String output, int width, int height) { try { Thumbnails.of(source).size(width, height).toFile(output); } catch (IOException e) { e.printStackTrace(); } } /** * 按照比例进行缩放 * * @param source * 输入源 * @param output * 输出源 * @param width * 宽 * @param height * 高 */ public static void ImgScale(String source, String output, double scale) { try { Thumbnails.of(source).scale(scale).toFile(output); } catch (IOException e) { e.printStackTrace(); } } public static void ImgScale(File source, String output, double scale) { try { Thumbnails.of(source).scale(scale).toFile(output); } catch (IOException e) { e.printStackTrace(); } } /** * 不按照比例,指定大小进行缩放 * * @param source * 输入源 * @param output * 输出源 * @param width * 宽 * @param height * 高 * @param keepAspectRatio * 默认是按照比例缩放的,值为false 时不按比例缩放 */ public static void ImgNoScale(String source, String output, int width, int height, boolean keepAspectRatio) { try { Thumbnails.of(source).size(width, height).keepAspectRatio(keepAspectRatio).toFile(output); } catch (IOException e) { e.printStackTrace(); } } public static void ImgNoScale(File source, String output, int width, int height, boolean keepAspectRatio) { try { Thumbnails.of(source).size(width, height).keepAspectRatio(keepAspectRatio).toFile(output); } catch (IOException e) { e.printStackTrace(); } } /** * 旋转 ,正数:顺时针 负数:逆时针 * * @param source * 输入源 * @param output * 输出源 * @param width * 宽 * @param height * 高 * @param rotate * 角度 */ public static void ImgRotate(String source, String output, int width, int height, double rotate) { try { Thumbnails.of(source).size(width, height).rotate(rotate).toFile(output); } catch (IOException e) { e.printStackTrace(); } } public static void ImgRotate(File source, String output, int width, int height, double rotate) { try { Thumbnails.of(source).size(width, height).rotate(rotate).toFile(output); } catch (IOException e) { e.printStackTrace(); } } /** * 水印 * * @param source * 输入源 * @param output * 输入源 * @param width * 宽 * @param height * 高 * @param position * 水印位置 Positions.BOTTOM_RIGHT o.5f * @param watermark * 水印图片地址 * @param transparency * 透明度 0.5f * @param quality * 图片质量 0.8f */ public static void ImgWatermark(String source, String output, int width, int height, Position position, String watermark, float transparency, float quality) { try { Thumbnails.of(source).size(width, height).watermark(position, ImageIO.read(new File(watermark)), transparency).outputQuality(0.8f).toFile(output); } catch (IOException e) { e.printStackTrace(); } } public static void ImgWatermark(File source, String output, int width, int height, Position position, String watermark, float transparency, float quality) { try { Thumbnails.of(source).size(width, height).watermark(position, ImageIO.read(new File(watermark)), transparency).outputQuality(0.8f).toFile(output); } catch (IOException e) { e.printStackTrace(); } } /** * 裁剪图片 * * @param source * 输入源 * @param output * 输出源 * @param position * 裁剪位置 * @param x * 裁剪区域x * @param y * 裁剪区域y * @param width * 宽 * @param height * 高 * @param keepAspectRatio * 默认是按照比例缩放的,值为false 时不按比例缩放 */ public static void ImgSourceRegion(String source, String output, Position position, int x, int y, int width, int height, boolean keepAspectRatio) { try { Thumbnails.of(source).sourceRegion(position, x, y).size(width, height).keepAspectRatio(keepAspectRatio).toFile(output); } catch (IOException e) { e.printStackTrace(); } } public static void ImgSourceRegion(File source, String output, Position position, int x, int y, int width, int height, boolean keepAspectRatio) { try { Thumbnails.of(source).sourceRegion(position, x, y).size(width, height).keepAspectRatio(keepAspectRatio).toFile(output); } catch (IOException e) { e.printStackTrace(); } } /** * 按坐标裁剪 * * @param source * 输入源 * @param output * 输出源 * @param x * 起始x坐标 * @param y * 起始y坐标 * @param x1 * 结束x坐标 * @param y1 * 结束y坐标 * @param width * 宽 * @param height * 高 * @param keepAspectRatio * 默认是按照比例缩放的,值为false 时不按比例缩放 */ public static void ImgSourceRegion(String source, String output, int x, int y, int x1, int y1, int width, int height, boolean keepAspectRatio) { try { Thumbnails.of(source).sourceRegion(x, y, x1, y1).size(width, height).keepAspectRatio(keepAspectRatio).toFile(output); } catch (IOException e) { e.printStackTrace(); } } public static void ImgSourceRegion(File source, String output, int x, int y, int x1, int y1, int width, int height, boolean keepAspectRatio) { try { Thumbnails.of(source).sourceRegion(x, y, x1, y1).size(width, height).keepAspectRatio(keepAspectRatio).toFile(output); } catch (IOException e) { e.printStackTrace(); } } /** * 转化图像格式 * * @param source * 输入源 * @param output * 输出源 * @param width * 宽 * @param height * 高 * @param format * 图片类型,gif、png、jpg */ public static void ImgFormat(String source, String output, int width, int height, String format) { try { Thumbnails.of(source).size(width, height).outputFormat(format).toFile(output); } catch (IOException e) { e.printStackTrace(); } } public static void ImgFormat(File source, String output, int width, int height, String format) { try { Thumbnails.of(source).size(width, height).outputFormat(format).toFile(output); } catch (IOException e) { e.printStackTrace(); } } /** * 输出到OutputStream * * @param source * 输入源 * @param output * 输出源 * @param width * 宽 * @param height * 高 * @return toOutputStream(流对象) */ public static OutputStream ImgOutputStream(String source, String output, int width, int height) { OutputStream os = null; try { os = new FileOutputStream(output); Thumbnails.of(source).size(width, height).toOutputStream(os); } catch (IOException e) { e.printStackTrace(); } return os; } public static OutputStream ImgOutputStream(File source, String output, int width, int height) { OutputStream os = null; try { os = new FileOutputStream(output); Thumbnails.of(source).size(width, height).toOutputStream(os); } catch (IOException e) { e.printStackTrace(); } return os; } /** * 输出到BufferedImage * * @param source * 输入源 * @param output * 输出源 * @param width * 宽 * @param height * 高 * @param format * 图片类型,gif、png、jpg * @return BufferedImage */ public static BufferedImage ImgBufferedImage(String source, String output, int width, int height, String format) { BufferedImage buf = null; try { buf = Thumbnails.of(source).size(width, height).asBufferedImage(); ImageIO.write(buf, format, new File(output)); } catch (IOException e) { e.printStackTrace(); } return buf; } public static BufferedImage ImgBufferedImage(File source, String output, int width, int height, String format) { BufferedImage buf = null; try { buf = Thumbnails.of(source).size(width, height).asBufferedImage(); ImageIO.write(buf, format, new File(output)); } catch (IOException e) { e.printStackTrace(); } return buf; } }
使用此类基本可以完成图片的裁剪、缩略图、水印、图片格式转换、输出流对象等操作!
参考地址:http://rensanning.iteye.com/blog/1545708
时间: 2024-11-02 06:45:48