项目需求:有很多尺寸很大的图片(图片大小可能几十MB,甚至上百MB),需要等比例缩小它们的尺寸,相当于生成缩略图。

例如:原图8268x6201,需要压缩成400x300。

我现在的方法:将图片整个读入内存,然后修改宽、高,最后写回磁盘。

核心代码大概这样:

BufferedImage oldImg = ImageIO.read(in);

BufferedImage newImg = new BufferedImage(400, 300, BufferedImage.TYPE_INT_RGB);

Graphs2D g = newImg.createGraphics();

g.drawImage(oldImg, 0, 0, 400, 300, null);

g.dispose();

ImageIO.write(newImg, 'jpg', new BufferedStream(out));

但是由于图片本身很大,而且可能会同时有多个线程在转,所以频繁发生内存溢出,报错:

java.lang.OutOfMemoryError: Java heap space.

尝试:

我试过增大分配给JVM的内存,但是效果不明显。首先机器内存有限,不可能无限增加。而且图片的大小没有上限,所以此方法不能很好地解决问题。

理想的情况,应该是通过一种“流式的算法”,一边把原始图片从磁盘读到内存,一边修改尺寸,一边写到磁盘生成目标图片。这种算法理论上只需要常数级内存空间。不过我在网上找了很久也没有找到。

我对图形学、图片格式、图片处理相关的知识不熟悉,不知道是否存在这样的算法,以及Java是否支持这样的算法。在此请教大家。

java 图片 内存溢出_Java修改图片尺寸,总是报内存溢出怎么解决?相关推荐

  1. js获取图片像素颜色,修改图片像素颜色

    直接上代码示例 <!DOCTYPE HTML PUBLIC> <html><head><meta charset="utf-8">& ...

  2. php 截取图片像素,php 如何修改图片像素大小

    php修改图片像素大小的方法:首先创建一个PHP示例文件:然后根据后缀,由文件或URL创建一个新图象:接着获取当前待修改图片的像素:最后重采样拷贝部分图像并调整大小即可. 推荐:<PHP视频教程 ...

  3. ps批量修改名片文字_怎么修改图片上的文字 修改图片文字比如名片图片上面的地址需要修改下...

    现在在网络上下载的图片是不是都对有文字水印的咧是不,那么怎么修改图片上的文字呢,修改图片文字比如名片图片上面的地址需要修改下这些怎么完成?OK ,今天就让小编来给大伙科普一下,其实要做到真正的无痕迹修 ...

  4. CTF 图片隐写之修改图片高宽

                                                 CTF WriteUp                                            ...

  5. java thumbnails 内存_Java修改图片尺寸,总是报内存溢出怎么解决?

    项目需求:有很多尺寸很大的图片(图片大小可能几十MB,甚至上百MB),需要等比例缩小它们的尺寸,相当于生成缩略图. 例如:原图8268x6201,需要压缩成400x300. 我现在的方法:将图片整个读 ...

  6. java 修改图片分辨率_java 修改图片的像素大小,清晰度

    修改图片的像素,清晰度 代码 /** * 改变图片 像素 * * @param file * @param qality 参数qality是取值0~1范围内 清晰程度 数值越小分辨率越低 * @par ...

  7. java 给图片加马赛克_java处理图片--图片的缩放,旋转和马赛克化

    下面是编程之家 jb51.cc 通过网络收集整理的代码片段. 编程之家小编现在分享给大家,也给大家做个参考. 这是我自己结合网上的一些资料封装的java图片处理类,支持图片的缩放,旋转,马赛克化.(转 ...

  8. java 图片上写字_java 在图片上写字,两个图片合并的实现方法

    实例如下: package writeimg; import javax.imageio.ImageIO; import java.awt.Color; import java.awt.Font; i ...

  9. java 两张图片合并_java 在图片上写字,两个图片合并的实现方法

    实例如下: package writeimg; import javax.imageio.ImageIO; import java.awt.Color; import java.awt.Font; i ...

最新文章

  1. 9适应之力加多少攻击_NBA球星生涯最低分都是多少?詹皇碰上麦迪仅得3分,哈登最低1分...
  2. 判断字符串1是否在字符串2中出现的方法
  3. springboot整合redis操作缓存(将查询到的数据放在缓存中)
  4. 安装navicat之后双击就会闪退_Adobe 2020版本,安装教程来咯
  5. unity3d 人员控制代码
  6. 理论基础 —— 查找 —— 顺序查找
  7. cockroachdb设计翻译
  8. 学校家教服务管理系统mysql_数据库课程设计报告-学校家教服务管理系统.doc
  9. 用c语言电脑系统指令,c语言文件 DOS命令大全(10)
  10. MATLAB从入门到精通:MATLAB调色板,作图更酷炫
  11. php调用API支付接口 可个人使用,无需营业执照(使用第三方接口,调用的天工接口。)...
  12. 计算机专业课程设计收获及总结,课程设计的心得体会
  13. 中国农业大学计算机研究生专业课,2020年中国农业大学计算机科学与技术考研经验分享...
  14. linux克隆机器IP问题
  15. 启蒙、亲情、乐趣、营养,“健康童乐园”全面支持乡村儿童成长
  16. 延时加载技术-----仿照手机淘宝网站图片延时加载
  17. 商品条码三大编码原则,您知道吗?
  18. 康拓电梯卡数据分析软件 门禁卡数据分析软件
  19. 正能量励志歌曲十大榜单盘点
  20. PHPCMS使用教程:设置站点信息

热门文章

  1. C语言基础:折半查找
  2. CSS transform属性
  3. 广义互相关 matlab,关于小波分析和广义互相关
  4. Thinkpad X61 安装 Mac Snow Leopard
  5. 微信小程序实例:实现tabs选项卡效果
  6. 【新书推荐】卡神之路,不过如此
  7. 【构造+拓扑序】【JZOJ5405】Permutation
  8. 电脑怎么翻译图片中的文字?快速翻译图片文字的方法
  9. 带栩字的优美古诗句_栩字取名的寓意 带栩字好听大气的名字女孩
  10. 常见界面布局之LinearLayout线性布局