设为首页收藏本站
网站公告 | 这是第一条公告
     

 找回密码
 立即注册
缓存时间00 现在时间00 缓存数据 对自己狠一点,逼自己努力,再过几年你将会感谢今天发狠的自己、恨透今天懒惰自卑的自己。晚安!

对自己狠一点,逼自己努力,再过几年你将会感谢今天发狠的自己、恨透今天懒惰自卑的自己。晚安!

查看: 1283|回复: 2

Java调整图片大小的3种方式小结

[复制链接]

  离线 

TA的专栏

等级头衔

等級:晓枫资讯-列兵

在线时间
0 小时

积分成就
威望
0
贡献
19
主题
17
精华
0
金钱
63
积分
36
注册时间
2023-9-30
最后登录
2025-2-17

发表于 2024-9-26 21:10:20 | 显示全部楼层 |阅读模式
目录
  • 1:使用Thumbnailator
    • pom.xml
    • 工具类ThumbnailsUtils
  • 2:Graphics2D 自带的方法
    • 3:前两种我在使用 ImageCombiner 项目的时候 不生效;
      • 总结 

        1:使用Thumbnailator

        1. Thumbnailator是Java的开源图像大小调整库,它使用渐进式双线性缩放。它支持JPG,BMP,JPEG,WBMP,PNG和GIF。
        复制代码

        通过将以下Maven依赖项添加到我们的pom.xml中,将其包括在我们的项目中:

        pom.xml

        1. <dependency>
        2. <groupId>net.coobird</groupId>
        3. <artifactId>thumbnailator</artifactId>
        4. <version>0.4.11</version>
        5. </dependency>
        复制代码

        工具类ThumbnailsUtils

        1. import net.coobird.thumbnailator.Thumbnails;
        2. import org.slf4j.Logger;
        3. import org.slf4j.LoggerFactory;
        4. import javax.imageio.ImageIO;
        5. import java.awt.image.BufferedImage;
        6. import java.io.ByteArrayInputStream;
        7. import java.io.ByteArrayOutputStream;
        8. import java.io.IOException;
        9. public class ThumbnailsUtils{
        10. private static final Logger logger = LoggerFactory.getLogger(ThumbnailsUtils.class);
        11. /**
        12. * 通过BufferedImage图片流调整图片大小
        13. */
        14. public static BufferedImage resizeImageOne(BufferedImage originalImage, int targetWidth, int targetHeight) throws Exception {
        15. ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
        16. Thumbnails.of(originalImage)
        17. .size(targetWidth, targetHeight)
        18. .outputFormat("JPEG")
        19. .outputQuality(1)
        20. .toOutputStream(outputStream);
        21. byte[] data = outputStream.toByteArray();
        22. ByteArrayInputStream inputStream = new ByteArrayInputStream(data);
        23. return ImageIO.read(inputStream);
        24. }
        25. /**
        26. * BufferedImage图片流转byte[]数组
        27. */
        28. public static byte[] imageToBytes(BufferedImage bImage) {
        29. ByteArrayOutputStream out = new ByteArrayOutputStream();
        30. try {
        31. ImageIO.write(bImage, "jpg", out);
        32. } catch (IOException e) {
        33. logger.error("错误信息: ", e);
        34. }
        35. return out.toByteArray();
        36. }
        37. /**
        38. * byte[]数组转BufferedImage图片流
        39. */
        40. private static BufferedImage bytesToBufferedImage(byte[] ImageByte) {
        41. ByteArrayInputStream in = new ByteArrayInputStream(ImageByte);
        42. BufferedImage image = null;
        43. try {
        44. image = ImageIO.read(in);
        45. } catch (IOException e) {
        46. logger.error("错误信息: ", e);
        47. }
        48. return image;
        49. }
        50. }
        复制代码

        2:Graphics2D 自带的方法

        1. public static BufferedImage scaleImage(BufferedImage originalImage, int targetWidth, int targetHeight) {
        2. int type = originalImage.getType() == 0 ? BufferedImage.TYPE_INT_ARGB : originalImage.getType();
        3. BufferedImage scaledImage = new BufferedImage(targetWidth, targetHeight, type);
        4. Graphics2D g = scaledImage.createGraphics();
        5. // Calculate the ratio between the original and scaled image size
        6. double scaleX = (double) targetWidth / originalImage.getWidth();
        7. double scaleY = (double) targetHeight / originalImage.getHeight();
        8. double scale = Math.min(scaleX, scaleY);
        9. // Now we perform the actual scaling
        10. int newWidth = (int) (originalImage.getWidth() * scale);
        11. int newHeight = (int) (originalImage.getHeight() * scale);
        12. int x = (targetWidth - newWidth) / 2;
        13. int y = (targetHeight - newHeight) / 2;
        14. g.drawImage(originalImage.getScaledInstance(newWidth, newHeight, Image.SCALE_SMOOTH), x, y, null);
        15. g.dispose();
        16. return scaledImage;
        17. }
        复制代码
        1. public static void main(String[] args) throws Exception {
        2. // 读取原始图片
        3. File originalFile = new File("D:\\test1\\schoolLogo.png");
        4. BufferedImage originalImage = ImageIO.read(originalFile);
        5. // 设定目标宽高
        6. int targetWidth = 1000; // 两倍放大
        7. int targetHeight = 1000; // 两倍放大
        8. // 调用 resizeImageOne 方法进行放大
        9. BufferedImage resizedImage = ThumbnailsUtils.scaleImage(originalImage, targetWidth, targetHeight);
        10. // 将放大后的图片保存到文件
        11. File outputFile = new File("D:\\test1\\big.png");
        12. ImageIO.write(resizedImage, "png", outputFile);
        13. }
        复制代码

        3:前两种我在使用 ImageCombiner 项目的时候 不生效;

        1. // 创建新的 BufferedImage,并设置绘制质量
        2. BufferedImage resizedImage = new BufferedImage(newWidth, newHeight, BufferedImage.TYPE_INT_RGB);
        3. Graphics2D g2d = resizedImage.createGraphics();
        4. g2d.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);
        5. // 绘制原始图像到新的 BufferedImage,并进行缩放
        6. Image scaledImage = image.getScaledInstance(newWidth, newHeight, Image.SCALE_SMOOTH);
        7. g2d.drawImage(scaledImage, 0, 0, null);
        8. g2d.dispose();
        9. // 保存新的图片
        10. String outputImagePath = "C:\\Users\\up1.jpg"; // 替换为实际的输出路径
        11. ImageIO.write(resizedImage, "jpg", new File(outputImagePath));
        12. System.out.println("图片尺寸调整完成!");
        复制代码

        总结 

        到此这篇关于Java调整图片大小的3种方式小结的文章就介绍到这了,更多相关Java调整图片大小内容请搜索晓枫资讯以前的文章或继续浏览下面的相关文章希望大家以后多多支持晓枫资讯!


        免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
        晓枫资讯-科技资讯社区-免责声明
        免责声明:以上内容为本网站转自其它媒体,相关信息仅为传递更多信息之目的,不代表本网观点,亦不代表本网站赞同其观点或证实其内容的真实性。
              1、注册用户在本社区发表、转载的任何作品仅代表其个人观点,不代表本社区认同其观点。
              2、管理员及版主有权在不事先通知或不经作者准许的情况下删除其在本社区所发表的文章。
              3、本社区的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,举报反馈:点击这里给我发消息进行删除处理。
              4、本社区一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
              5、以上声明内容的最终解释权归《晓枫资讯-科技资讯社区》所有。
        http://bbs.yzwlo.com 晓枫资讯--游戏IT新闻资讯~~~

          离线 

        TA的专栏

        • 打卡等级:即来则安
        • 打卡总天数:23
        • 打卡月天数:0
        • 打卡总奖励:319
        • 最近打卡:2025-10-30 04:36:05
        等级头衔

        等級:晓枫资讯-列兵

        在线时间
        0 小时

        积分成就
        威望
        0
        贡献
        0
        主题
        0
        精华
        0
        金钱
        366
        积分
        54
        注册时间
        2023-1-1
        最后登录
        2025-10-30

        发表于 2025-2-26 13:26:37 | 显示全部楼层
        感谢楼主分享。
        http://bbs.yzwlo.com 晓枫资讯--游戏IT新闻资讯~~~

          离线 

        TA的专栏

        等级头衔

        等級:晓枫资讯-列兵

        在线时间
        0 小时

        积分成就
        威望
        0
        贡献
        0
        主题
        0
        精华
        0
        金钱
        19
        积分
        18
        注册时间
        2022-12-26
        最后登录
        2022-12-26

        发表于 2025-7-8 08:42:01 | 显示全部楼层
        感谢楼主,顶。
        http://bbs.yzwlo.com 晓枫资讯--游戏IT新闻资讯~~~
        严禁发布广告,淫秽、色情、赌博、暴力、凶杀、恐怖、间谍及其他违反国家法律法规的内容。!晓枫资讯-社区
        您需要登录后才可以回帖 登录 | 立即注册

        本版积分规则

        1楼
        2楼
        3楼

        手机版|晓枫资讯--科技资讯社区 本站已运行

        CopyRight © 2022-2025 晓枫资讯--科技资讯社区 ( BBS.yzwlo.com ) . All Rights Reserved .

        晓枫资讯--科技资讯社区

        本站内容由用户自主分享和转载自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。

        如有侵权、违反国家法律政策行为,请联系我们,我们会第一时间及时清除和处理! 举报反馈邮箱:点击这里给我发消息

        Powered by Discuz! X3.5

        快速回复 返回顶部 返回列表