当前位置: 首页 > news >正文

java解决修改图片尺寸,压缩图片后出现背景变黑,图片字体模糊问题

将以下数学公式的图片使用Hutool提供的图片工具类改变尺寸
在这里插入图片描述
代码如下:

package com.jason.common.file.word;import cn.hutool.core.img.ImgUtil;
import cn.hutool.core.io.FileUtil;import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.*;
import java.util.HashMap;
import java.util.Map;public class Test {public static void main(String[] args) {BufferedInputStream inputStream1 = FileUtil.getInputStream("E:\\图片\\Picture2.png");ByteArrayOutputStream outputStream1 = new ByteArrayOutputStream(1024);ImgUtil.scale(inputStream1, outputStream1, 200, 50, null);FileUtil.writeBytes(outputStream1.toByteArray(), "E:\\图片\\newPicture2.png");}
}

输出结果:
在这里插入图片描述

输出的照片是我们指定的尺寸大小,但图片是一片漆黑。
原因在于修改了图片的尺寸后,默认会把背景改成黑色,而原来公式的字体颜色就是黑色,所以会一片黑。

问题解决:
我们可以自己写一个修改图片尺寸的方法,代码如下:

  private void resizeImage(InputStream inputStream, OutputStream outputStream, int targetWidth, int targetHeight) throws IOException {BufferedImage to = new BufferedImage(targetWidth, targetHeight, BufferedImage.TYPE_INT_ARGB);Graphics2D g2d = to.createGraphics();// 重要配置Transparency.TRANSLUCENT,指定透明度为半透明to = g2d.getDeviceConfiguration().createCompatibleImage(targetWidth, targetHeight, Transparency.TRANSLUCENT);g2d.dispose();g2d = to.createGraphics();BufferedImage bi2 = ImageIO.read(inputStream);Image from = bi2.getScaledInstance(targetWidth, targetHeight, Image.SCALE_DEFAULT);g2d.drawImage(from, 0, 0, null);g2d.dispose();ImageIO.write(to, "png", outputStream);}

输出结果:

在这里插入图片描述

图片内容是有了,但有没有发现,图片变得很模糊,有点看不清字符的形状。问题在于修改了尺寸后,没有对他进行平滑处理。
最能体现这个问题的一张图片就是如下图:
原图:
在这里插入图片描述
修改尺寸后:
在这里插入图片描述
字都看不清了,那肯定是不行的。

解决方法:

private static void resizeImage(InputStream inputStream, OutputStream outputStream, int targetWidth, int targetHeight) throws IOException {BufferedImage to = new BufferedImage(targetWidth, targetHeight, BufferedImage.TYPE_INT_ARGB);Graphics2D g2d = to.createGraphics();// 重要配置Transparency.TRANSLUCENT,指定透明度为半透明to = g2d.getDeviceConfiguration().createCompatibleImage(targetWidth, targetHeight, Transparency.TRANSLUCENT);g2d.dispose();g2d = to.createGraphics();BufferedImage bi2 = ImageIO.read(inputStream);// 重要配置Image.SCALE_SMOOTH,配置缩放平滑度Image from = bi2.getScaledInstance(targetWidth, targetHeight, Image.SCALE_SMOOTH);g2d.drawImage(from, 0, 0, null);g2d.dispose();ImageIO.write(to, "png", outputStream);}

输出结果:
在这里插入图片描述
修改完尺寸后的图片比较符合预期,尺寸是对的,清晰度也是能看得清每一个字,效果很好。

http://www.lryc.cn/news/212564.html

相关文章:

  • jq/js检测鼠标指针移动离开页面
  • ICC2: 如何在显示GUI操作产生的命令
  • 内网渗透——macOS上搭建Web服务器
  • Centos下用nodejs实现一个简单的web服务器
  • 3.10每日一题(三角有理函数积分(三角函数加减乘除))
  • python练习(猜数字,99乘法表)
  • 正确部署Baichuan2(Ubuntu20.4) 步骤及可能出现的问题
  • docker 部署prometheus和grafana
  • 在本地模拟C/S,Socket套接字的使用
  • 香港科技大学广州|可持续能源与环境学域博士招生宣讲会—东南大学专场!!!(暨全额奖学金政策)
  • [Leetcode] 0108. 将有序数组转换为二叉搜索树
  • Pandas数据导入和导出:CSV、Excel、MySQL、JSON
  • 第16期 | GPTSecurity周报
  • 省钱兄短剧短视频视频滑动播放模块源码支持微信小程序h5安卓IOS
  • SDRAM学习笔记(MT48LC16M16A2,w9812g6kh)
  • ARM 学习笔记3 STM32G4 定时器相关资料整理
  • LeetCode 917 仅仅反转字母 简单
  • JAVA深化篇_25—— IO流章节全网最全总结(附详细思维导图)
  • 易基因:ChIP-seq等揭示BRWD3调控KDM5活性以维持H3K4甲基化水平的表观机制|PNAS
  • C++深度优先(DFS)算法的应用:收集所有金币可获得的最大积分
  • uniapp中APP端使用echarts用formatter设置y轴保留2位小数点不生效
  • 无糖茶饮三十年,从无人问津到人手一瓶
  • 面向Three.js开发者的3D自动纹理化开发包
  • 数字孪生技术与VR:创造数字未来
  • 系统架构设计师-第15章-面向服务架构设计理论与实践-软考学习笔记
  • 为什么我觉得Rust比C++复杂得多?
  • python sqlalchemy(ORM)- 03 增删改查
  • Flutter笔记:完全基于Flutter绘图技术绘制一个精美的Dash图标(上)
  • 学习gorm:彻底弄懂Find、Take、First和Last函数的区别
  • 796. 子矩阵的和(二维前缀和)