Thumbnails 处理图片

Thumbnails 处理图片博客引用处 以下内容在原有博客基础上进行补充或更改 谢谢这些大牛的博客指导 Thumbnails 处理图片 Java 图片处理开源框架 java 使用 google 开源工具实现图片压缩 Thumbnails 原图 amp Amneiltu 原图宽高都小于 3000 不设置 keepAspectRa false 那么只有高会改

 //原图 1056 2272 &Am neil tu //原图宽高都小于3000 不设置keepAspectRatio(false) 那么只有高会改为指定高,宽等比例改变,反之设置keepAspectRatio(false)那么宽高都会按照指定大小改变 Thumbnails.of("E:\\img3.jpg").size(3000,3000).keepAspectRatio(false).toFile("E:\\3.jpg"); Thumbnails.of("E:\\img3.jpg").size(3000,3000).toFile("E:\\3.jpg"); //原图宽都小于3000 ,高大于2000 不设置keepAspectRatio(false)那么高会减小到指定大小,宽会等比例改变,反之设置keepAspectRatio(false)那么宽高都会按照指定大小改变 Thumbnails.of("E:\\img3.jpg").size(3000,2000).toFile("E:\\3.jpg"); Thumbnails.of("E:\\img3.jpg").size(3000,2000).keepAspectRatio(false).toFile("E:\\3.jpg"); //原图宽都大于500,高小于3000 不设置keepAspectRatio(false)那么宽会减小到指定大小,高会等比例改变,反之设置keepAspectRatio(false)那么宽高都会按照指定大小改变 Thumbnails.of("E:\\img3.jpg").size(500,3000).toFile("E:\\3.jpg"); Thumbnails.of("E:\\img3.jpg").size(500,3000).keepAspectRatio(false).toFile("E:\\3.jpg"); //原图 宽高都大于500 不设置keepAspectRatio(false)那么只有高会改为指定高,宽等比例改变,反之设置keepAspectRatio(false)那么宽高都会按照指定大小改变 Thumbnails.of("E:\\img3.jpg").size(500,500).toFile("E:\\3.jpg"); //只指定高 高度变为指定高,宽等比例改变 Thumbnails.of("E:\\img3.jpg").height(500).toFile("E:\\3.jpg"); //只指定宽,宽变为指定宽,高等比例改变 Thumbnails.of("E:\\img3.jpg").width(500).toFile("E\\3.jpg"); //按照比例因子进行缩放,不指定高宽的具体大小 scale 比例 scale取值越大,比例越高,1f代表原比例,0.5f代表原比例的一半,以此类推 Thumbnails.of("E:\\img3.jpg").scale(0.5f).toFile("E:\\3.jpg"); //图片旋转 rotate 旋转 正数:顺时针, 负数:逆时针 必须有比例大小的设置,不能单独用rotate Thumbnails.of("E:\\img3.jpg").scale(1f).rotate(90).toFile("E:\\3.jpg"); Thumbnails.of("E:\\img3.jpg").size(1000,2000).rotate(90).toFile("E:\\3.jpg"); //水印 watermark(位置(指取水印图放置的位置),水印图,透明度) Thumbnails.of("E:\\img3.jpg").scale(1f).watermark(Positions.BOTTOM_LEFT,ImageIO.read(new File("E:\\img6.jpg")),0.5f).toFile("E:\\3.jpg"); //转化图像格式 如jpg 转 png Thumbnails.of("E:\\img3.jpg").scale(1f).outputFormat("png").toFile("E:\\3.png"); //裁剪 图片中心400*400的区域 Thumbnails.of("E:\\img3.jpg").sourceRegion(Positions.CENTER,400,400).size(200,200) .keepAspectRatio(false).toFile("E:\\3.png"); //裁剪 图片右下400*400的区域 Thumbnails.of("E:\\img3.jpg").sourceRegion(Positions.BOTTOM_RIGHT,400,400).size(200,200) .keepAspectRatio(false).toFile("E:\\3.png"); //裁剪 指定坐标 Thumbnails.of("E:\\img3.jpg") .sourceRegion(600,500,400,400).size(200,200) .keepAspectRatio(false).toFile("E:\\3.png"); //转成ByteArrayOutputStream 或者二进制数组 MultipartFile file = new MultipartFile() { @Override public String getName() { return null; } @Override public String getOriginalFilename() { return null; } @Override public String getContentType() { return null; } @Override public boolean isEmpty() { return false; } @Override public long getSize() { return 0; } @Override public byte[] getBytes() throws IOException { return new byte[0]; } @Override public InputStream getInputStream() throws IOException { return null; } @Override public void transferTo(File dest) throws IOException, IllegalStateException { } }; byte [] buf = null; ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); Thumbnails.of(file.getInputStream()).scale(0.1f).toOutputStream(outputStream); //或者 File file2 = new File("E:\\img3.jpg"); FileInputStream fileInputStream = new FileInputStream(file2); Thumbnails.of(fileInputStream).scale(0.1f).toOutputStream(outputStream); //或者 ByteArrayOutputStream byteOutputStream = new ByteArrayOutputStream(); Thumbnails.of(file.getInputStream()).height(720).outputQuality(1f).toOutputStream(byteOutputStream); ByteArrayInputStream inputStream = new ByteArrayInputStream(byteOutputStream.toByteArray()); byteOutputStream.flush(); InputStream inputStreamParent = inputStream; buf = outputStream.toByteArray(); //图片的压缩质量 outputQuality是图片的质量,值是在0到1,越接近于1质量越好,越接近于0质量越差。 Thumbnails.of("原图文件的路径").scale(1f) .outputQuality(0.5f).toFile("压缩后文件的路径"); 

注意:scale、width|height、size三者不能同时共存,但必须要有一个

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/221057.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月17日 下午7:01
下一篇 2026年3月17日 下午7:01


相关推荐

  • ResNet解析_restnet

    ResNet解析_restnetResNet在2015年被提出,在ImageNet比赛classification任务上获得第一名,因为它“简单与实用”并存,之后很多方法都建立在ResNet50或者ResNet101的基础上完成的,检测,分割,识别等领域都纷纷使用ResNet,Alphazero也使用了ResNet,所以可见ResNet确实很好用。下面我们从实用的角度去看看ResNet。1.ResNet意义随着…

    2022年10月7日
    7
  • 字符串类的设计与实现_C语言字符串编程题

    字符串类的设计与实现_C语言字符串编程题Java程序设计(基础)- 字符串

    2022年4月22日
    44
  • 时序数据库(TSDB)

    时序数据库(TSDB)时序数据库 TSDB 是一种特定类型的数据库 主要用来存储时序数据 随着 5G 技术的不断成熟 物联网技术将会使得万物互联 物联网时代之前只有手机 电脑可以联网 以后所有设备都会联网 这些设备每时每刻都会吐出大量的按照时间组织的数据 需要存储下来进行查询 统计和分析 时序数据和普通的业务数据在各个方面都有很大的不同 本文将会试图带大家进入 TSDB 的世界 TSDB 应用场景 哪些场景会用到 TSDB

    2026年3月16日
    2
  • 仙之侠道二九章怎么开青门_仙之侠道2玖章全面攻略

    仙之侠道二九章怎么开青门_仙之侠道2玖章全面攻略仙之侠道这一系列的图小编也玩了好几年了(初章一直到现在的六章)。都是单机或者找两个朋友玩的。六章任务中前期推荐做:可以得衣服,得钱的任务,例如:狼皮任务,包包果,巨虾甲任务,古币以及挖蘑菇(牛洞的走法下面有介绍)等。这一系列图前期的等级以及衣服是最最重要的。当然挑战系列不要忘了前期有个移动最大化的鞋子,特别实用。紧急的书信这是游戏中最简单的一个任务了,只要去找NPC接了任务拿了信,再送去南诏就可…

    2025年8月22日
    7
  • 运行时异常和一般异常_异常代码c0000005

    运行时异常和一般异常_异常代码c0000005说到异常,大家都熟悉,只要程序出错了,那么肯定会说:“哎呀,我的程序出错啦~它抛出异常啦”。但单单以“异常”的名称来称呼它们,未免也太粗糙了。我们毕竟是一个精致的程序员,当然得知道他们到底都有哪些种类啦。这就好比一个优质的男朋友(比如本帅博主)必须能够精准地区分女朋友的口红色号一般。那Java到底有哪些异常呢?其实也不多,Java提供了两种错误的异常类,分别是Error和Excepti…

    2026年4月16日
    5
  • 唤醒词_好听的唤醒词

    唤醒词_好听的唤醒词语音唤醒定义语音唤醒在学术上被称为keywordspotting(简称KWS),给它做了一个定义:在连续语流中实时检测出说话人特定片段。这里要注意,检测的“实时性”是一个关键点,语音唤醒的目的

    2022年8月6日
    5

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号