java 压缩 png 格式图片 至指定大小。如:压缩至2m以内


在Java中,我们可以使用Apache Commons Imaging库或者TwelveMonkeys图像处理库来压缩PNG图片至指定大小。以下是一个使用Apache Commons Imaging的示例: ```java import org.apache.commons.imaging.ImageInfo; import org.apache.commons.imaging.Imaging; import org.apache.commons.imaging.formats.png.PngImageWriter; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; public class ImageCompressor { public static void compressImageToSize(File sourceFile, File targetFile, int maxSizeInBytes) throws IOException { // 获取原始图片信息 ImageInfo imageInfo = Imaging.getImageInfo(sourceFile); int type = imageInfo.getBitsPerPixel() <= 8 ? BufferedImage.TYPE_BYTE_INDEXED : BufferedImage.TYPE_INT_RGB; BufferedImage originalImage = Imaging.getBufferedImage(sourceFile, type); // 压缩图片,循环调整质量直到满足大小要求 float quality = 1.0f; // 最高质量 while (true) { try (PngImageWriter writer = new PngImageWriter()) { writer.setCompressionQuality(quality); writer.writeImage(originalImage, targetFile); if (targetFile.length() <= maxSizeInBytes) { break; // 压缩后大小满足要求,跳出循环 } quality -= 0.1f; // 降低质量 if (quality < 0.1f) { throw new RuntimeException("无法将图片压缩到指定大小"); } } } } public static void main(String[] args) throws IOException { File sourceFile = new File("path_to_your_source_image.png"); File targetFile = new File("path_to_target_image.png"); int maxSizeInBytes = 2 * 1024 * 1024; // 2MB compressImageToSize(sourceFile, targetFile, maxSizeInBytes); } } ``` 注意:Apache Commons Imaging并不直接支持通过调整参数精确控制输出文件大小,上述代码是通过不断尝试不同的压缩质量(减小质量意味着增加压缩率)来达到目标大小的,可能并不能得到最佳效果。PNG格式本身已经是无损压缩格式,压缩效果可能并不明显。 如果你需要更精确地控制输出文件大小,可能需要结合其他算法或工具进行处理,比如先调整图片尺寸再压缩等。对于PNG格式,更多的是通过缩小图像尺寸来减少文件大小,而不是通过改变压缩质量。 [2024-02-27 13:54:15 | AI写代码神器 | 524点数解答]
- import javax.swing.*; import java.awt.*; import java.awt.datatransfer.clipboard; import java.awt.datatransfer.stringselection; import java.awt.datatransfer.transferable; import java.awt.event.*; import java.io.*; import java.nio.file.files; import java.nio.file.path; import java.nio.file.paths; import java.time.localdatetime; import java.util.hashmap; import java.util.list; import java.util.map; import java.util.random; public class copy { static private final jtextarea textarea = new jtext(1497点数解答 | 2024-08-25 09:40:33)321
- 题目(description): 卫星导航系统(如我国自主研发的北斗卫星导航系统)能实时获取位置、速度、时间等时空信息,在交通运输、农林渔业、气象测报、通信授时、救灾减灾、公共安全等领域都得到了广泛应用。 在应用层面,卫星导航系统一般以报文方式进行数据传输,其中$gprmc是常用报文之一,基本的格式如下: $gprmc,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,<10>,<11>,<12>*hh <1> utc时间,hhmmss.sss(时分秒.毫秒)格式 <2> 定位状态,a=有效定位,v=无效定位 <3> 纬度ddmm.mmmm(度分)格式 <4> 纬度半球n(北半球)或s(南半球) <5> 经度dddmm.mmmm(度分)格式 <6> 经度半球e(东经)或w(西经) <7> 地面速率(000.0~999.9节) <8> 地面航向(000.0~359.9度,以正北为参考基准) <9> utc日期,ddmmyy(日月年)格式 <10> 磁偏角(000.0~180.0度,前面的0也(385点数解答 | 2025-01-08 03:43:54)292
- 题目(description): 卫星导航系统(如我国自主研发的北斗卫星导航系统)能实时获取位置、速度、时间等时空信息,在交通运输、农林渔业、气象测报、通信授时、救灾减灾、公共安全等领域都得到了广泛应用。 在应用层面,卫星导航系统一般以报文方式进行数据传输,其中$gprmc是常用报文之一,基本的格式如下: $gprmc,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,<10>,<11>,<12>*hh <1> utc时间,hhmmss.sss(时分秒.毫秒)格式 <2> 定位状态,a=有效定位,v=无效定位 <3> 纬度ddmm.mmmm(度分)格式 <4> 纬度半球n(北半球)或s(南半球) <5> 经度dddmm.mmmm(度分)格式 <6> 经度半球e(东经)或w(西经) <7> 地面速率(000.0~999.9节) <8> 地面航向(000.0~359.9度,以正北为参考基准) <9> utc日期,ddmmyy(日月年)格式 <10> 磁偏角(000.0~180.0度,前面的0也(346点数解答 | 2025-01-08 03:46:29)286
- dm.jdbc.driver.dmexception: 数据溢出 at dm.jdbc.driver.dberror.throwexception(dberror.java:636) at dm.jdbc.c.b.p.s(msg.java:225) at dm.jdbc.c.b.p.p(msg.java:185) at dm.jdbc.c.b.p.o(msg.java:166) at dm.jdbc.c.a.a(dbaccess.java:776) at dm.jdbc.c.a.a(dbaccess.java:327) at dm.jdbc.c.a.a(dbaccess.java:435) at dm.jdbc.driver.dmdbpreparedstatement.executeinner(dmdbpreparedstatement.java:284) at dm.jdbc.driver.dmdbpreparedstatement.do_executequery(dmdbpreparedstatement.java:383) at dm.jdbc.driver.(598点数解答 | 2024-10-15 15:48:38)224
- 问题排查:dm.jdbc.driver.dmexception: 数据溢出 at dm.jdbc.driver.dberror.throwexception(dberror.java:636) at dm.jdbc.c.b.p.s(msg.java:225) at dm.jdbc.c.b.p.p(msg.java:185) at dm.jdbc.c.b.p.o(msg.java:166) at dm.jdbc.c.a.a(dbaccess.java:776) at dm.jdbc.c.a.a(dbaccess.java:327) at dm.jdbc.c.a.a(dbaccess.java:435) at dm.jdbc.driver.dmdbpreparedstatement.executeinner(dmdbpreparedstatement.java:284) at dm.jdbc.driver.dmdbpreparedstatement.do_executequery(dmdbpreparedstatement.java:383) at dm.jdbc.dr(403点数解答 | 2024-10-15 15:48:41)915
- java 压缩 png 格式图片 至指定大小。如:压缩至2m以内(524点数解答 | 2024-02-27 13:54:15)227
- 使用 html 代码制作一个网站完整代码。代码复杂。 该有的方面都有 背景白色 主页面背景上面显示batr.png 在batr.png图片左边的下面显示logo.png logo.png右面显示一个白色的输入框,输入框的右面显示 搜索一下 按钮 在输入框输入文字,并单击 搜索一下 则跳转到epn.html网页 呈现标题与相匹配的结果,或者是标题中包含这些文字。 如果搜索不到关于这个文字任何匹配或者包含的结果,则显示: 结果无! 下面有个“返回”按钮,单击它可返回主页面 主页面搜索框下面有勾选选项: 有mp3、 fiac、 wma、 ogg四个区勾选选项。 勾选某一个选项,主页面下面显示与选项相关的内容。例如内容是发布在fiac区的,则全部显示关于这个区的内容。 主页面的batr.png图片的右上角显示 登陆\注册 按钮 主页面的batr.png图片的左上角显示 头像 显示框在未注册或者登录的情况下,显示白色。 单击这个按钮则跳转到bnhpe.html 页面显示 背景白色,左上角显示logo.png =================================== (这里显示登陆(572点数解答 | 2024-11-17 07:58:26)181
- 题目:为巩固和提高初学加减乘除运算的学生数学方面的认知与运算能力,请使用python语言的tkinter库资源,编写一个简单的gui可视化的小程序,实现一个随机出题(30以内整数加减乘除法的算术题)、判题、打分的小程序。具体要求如下: 【程序要求:】 (1)应用tkinter库资源绘制生成图形界面窗口(大小:800*600):界面元素包括:若干标签控件label、若干文本框控件entry、三个命令按钮控件button,以及其它个性化所需的、你认为有用的相关控件元素。 (2)标签控件label、文本框控件entry元素,功用为:学生姓名的输入与显示、学生学号的输入与显示的载体,以及题号、题目数字、运算符、等号、结果等相关内容输入或显示的载体;三个按钮文本提示内容分别为button 1->“随机生成试题”、 button 2-> “提交”、 button 3-> “查看答案”。 (3)引用随机库资源,通过随机函数产生30以内的随机数,进行加减乘除法题目设计,题目的个数要求10个,且简单的单步运算题目。如:5+8= 、7-3= 、 2*4= 、 5÷2= (除法结果为整数除即可)。 (4)程(1266点数解答 | 2024-06-19 14:45:56)221
- 请你帮我写一个ps批量替换智能对象的脚本,其中要包含导出的格式要有 png,jpg,psd 格式,还要带有一个缩放样式,缩放样式要有四周顶格,短边适应,长边适应,保持原样,还要有九宫格的对齐方式,写完脚本请你教我怎么使用 (477点数解答 | 2025-03-28 12:20:24)195
- 请你帮我写一个ps批量替换智能对象的脚本,需要替换的智能对象图层名为UI, 其中要包含导出的格式要有 png,jpg,psd 格式,还要带有一个缩放样式,缩放样式要有四周顶格,短边适应,长边适应,保持原样,还要有九宫格的对齐方式,写完脚本请你教我怎么使用(2044点数解答 | 2025-07-15 08:58:15)62
- import com.opencsv.csvreader; import com.opencsv.exceptions.csvvalidationexception; import java.io.filereader; import java.io.ioexception; import java.text.parseexception; import java.text.simpledateformat; import java.util.*; public class stockstatistics { public static void main(string[] args) { string filepath = "stocks.csv"; // 请确保csv文件与此java文件在同一目录下,或提供完整路径 simpledateformat sdf = new simpledateformat("yyyy-mm-dd"); map<string, stockdata> monthlydata = new has(66点数解答 | 2024-11-13 15:31:04)189
- 公园里需要种五棵树,一共五棵,背景图片“bg.png”位于窗体的中心,树的图片为“tree.png”,左侧第一棵树的位置为(100,200)树与树的间距为150(494点数解答 | 2024-10-03 19:44:51)147