Thumbnailator-图片处理的Google开源Java类库

最近认识了一个图片处理的类库Thumbnailator,可以进行图片缩放,裁剪,打水印,调整图片比例等。

优势在于处理效果比Java API好,代码量少。

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

以下例子转自https://blog.csdn.net/qq_34839150/article/details/109903432

处理方法例子:

从图像文件创建缩略图
Thumbnails.of(new File("original.jpg"))
        .size(160, 160)
        .toFile(new File("thumbnail.jpg"));
在此示例中,图像来自original.jpg调整大小,然后保存到thumbnail.jpg。

或者,Thumbnailator将接受文件名作为String。File不需要使用对象指定图像文件:

Thumbnails.of("original.jpg")
        .size(160, 160)
        .toFile("thumbnail.jpg");
在编写快速原型代码或从脚本语言中使用Thumbnailator时,此表单非常有用。

使用旋转和水印创建缩略图
Thumbnails.of(new File("original.jpg"))
        .size(160, 160)
        .rotate(90)
        .watermark(Positions.BOTTOM_RIGHT, ImageIO.read(new File("watermark.png")), 0.5f)
        .outputQuality(0.8)
        .toFile(new File("image-with-watermark.jpg"));
在此示例中,original.jpg调整图像大小,然后顺时针旋转90度,然后在右下角放置一个半透明水印,然后image-with-watermark.jpg以80%压缩质量设置保存。

创建缩略图并写入 OutputStream
OutputStream os = ...;
		
Thumbnails.of("large-picture.jpg")
        .size(200, 200)
        .outputFormat("png")
        .toOutputStream(os);
在此示例中,将文件中的图像large-picture.jpg调整为最大尺寸200 x 200(保持原始图像的纵横比),并将其写入指定OutputStream的PNG图像。

创建固定大小的缩略图
BufferedImage originalImage = ImageIO.read(new File("original.png"));

BufferedImage thumbnail = Thumbnails.of(originalImage)
        .size(200, 200)
        .asBufferedImage();
上面的代码采用图像originalImage并创建一个200像素乘200像素的缩略图,并使用并存储结果thumbnail。

按给定因子缩放图像
BufferedImage originalImage = ImageIO.read(new File("original.png"));

BufferedImage thumbnail = Thumbnails.of(originalImage)
        .scale(0.25)
        .asBufferedImage();
上面的代码将图像originalImage带入并创建一个缩略图,该缩略图是原始图像的25%,并使用默认缩放技术来制作存储在其中的缩略图thumbnail。

创建缩略图时旋转图像
BufferedImage originalImage = ImageIO.read(new File("original.jpg"));

BufferedImage thumbnail = Thumbnails.of(originalImage)
        .size(200, 200)
        .rotate(90)
        .asBufferedImage();
上面的代码采用原始图像并创建一个顺时针旋转90度的缩略图。

使用水印创建缩略图
BufferedImage originalImage = ImageIO.read(new File("original.jpg"));
BufferedImage watermarkImage = ImageIO.read(new File("watermark.png"));

BufferedImage thumbnail = Thumbnails.of(originalImage)
        .size(200, 200)
        .watermark(Positions.BOTTOM_RIGHT, watermarkImage, 0.5f)
        .asBufferedImage();
如图所示,可以通过调用该watermark方法将水印添加到缩略图。

可以从Positions枚举中选择定位。

缩略图的不透明度(或相反地,透明度)可以通过改变最后一个参数来调整,其中0.0f缩略图是完全透明的,并且1.0f水印是完全不透明的。

将缩略图写入特定目录
File destinationDir = new File("path/to/output");

Thumbnails.of("apple.jpg", "banana.jpg", "cherry.jpg")
        .size(200, 200)
        .toFiles(destinationDir, Rename.PREFIX_DOT_THUMBNAIL);
此示例将获取源图像,并将缩略图作为文件写入destinationDir(path/to/output目录),同时thumbnail.在文件名前添加重命名。

因此,缩略图将被写为以下文件:

path/to/output/thumbnail.apple.jpg
path/to/output/thumbnail.banana.jpg
path/to/output/thumbnail.cherry.jpg
写入指定目录时,也可以保留原始文件名:

File destinationDir = new File("path/to/output");

Thumbnails.of("apple.jpg", "banana.jpg", "cherry.jpg")
        .size(200, 200)
        .toFiles(destinationDir, Rename.NO_CHANGE);
在上面的代码中,缩略图将写入:

path/to/output/apple.jpg
path/to/output/banana.jpg
path/to/output/cherry.jpg

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 在 Java 中,可以使用 Apache HttpComponents 组件来解析请求头中的 IP 地址。具体方法是使用 HttpComponents 中的 HttpClient 类来获取请求头,再从中获取 IP 地址。代码示例如下: ``` import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; public class Main { public static void main(String[] args) throws IOException { CloseableHttpClient client = HttpClients.createDefault(); HttpGet request = new HttpGet("http://www.example.com"); CloseableHttpResponse response = client.execute(request); String ip = response.getFirstHeader("X-Forwarded-For").getValue(); System.out.println("IP address: " + ip); response.close(); client.close(); } } ``` 这段代码假设请求头中的 IP 地址位于 "X-Forwarded-For" 头部。如果请求头中的 IP 地址位于其他地方,可以调整代码中的 ".getFirstHeader("X-Forwarded-For")" 为相应的请求头部。 ### 回答2: 要解析请求头中的IP地址,可以使用Java开源来帮助完成。 在Java中,我们可以使用Servlet API中的HttpServletRequest对象来获取请求信息,包括请求头。可以通过调用HttpServletRequest对象的getHeader方法,传入"X-Forwarded-For"参数,来获取代理服务器传递的客户端IP地址。 然而,并不是所有的代理服务器都会添加"X-Forwarded-For"头部信息。因此,还可以使用Java开源来解析不同的请求头。 常用的Java开源包括: 1. Apache Commons IO:可以使用该类中的IOUtils类来读取和分析请求头的内容,获取IP地址。 2. Servlets API:Java Servlet规范中提供了HttpServletRequest对象,可以直接用它的getHeader方法来获取请求头信息。 3. Spring Framework:Spring框架提供了很多有用的类和方法,可以帮助我们解析请求头,包括获取IP地址。 这些开源都可以通过Maven或Gradle等构建工具导入到项目中,以便使用其中的类和方法。根据具体的需求和项目情况,选择适合的开源使用即可。 总的来说,Java开源为我们解析请求头中的IP地址提供了方便和灵活的方式。我们可以根据不同的需求和情况,选择合适的类来使用。 ### 回答3: 要解析请求头中的ip地址,可以使用Java开源中的servlet相关类。 首先,需要获取HttpServletRequest对象,它包含了请求头的信息。可以在Servlet中通过参数或者ServletContext获取HttpServletRequest对象。 然后,通过HttpServletRequest对象的getHeader方法获得指定名称的请求头的值。IP地址一般存储在请求头中的"X-Forwarded-For"或者"X-Real-IP"字段中。 可以这样获取IP地址: ```java HttpServletRequest request = ...; // 获取HttpServletRequest对象 String ip = request.getHeader("X-Forwarded-For"); if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getHeader("X-Real-IP"); } if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getRemoteAddr(); } ``` 上述代码首先尝试从"X-Forwarded-For"字段获取IP地址,如果获取不到,再尝试从"X-Real-IP"字段获取IP地址,最后从request.getRemoteAddr()获取IP地址。 这样就可以通过Java开源解析请求头中的IP地址了。注意,通过上述方式获取的IP地址可能是中间代理服务器的IP地址,而非真正的客户端IP地址,所以需要根据具体的环境和需求进行适配和判断。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LemonSmile_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值