Java 文字水印处理的补充

       前段时间,写了篇Java文字水印处理,实际运用过程中发现经常会报内存溢出错误,发现是在创建BufferedImage时报的错误。

    水印处理最基本实现就是:

    1)创建BufferedImage,在BufferedImage绘制原始图像,绘制文字;

    2)根据BufferedImage生成物理的image file

       这里,尤其注意的是创建BufferedImage的时候,代码如下:

    BufferedImage bimage = new BufferedImage(原始图片宽度, 原始图片高度,

                BufferedImage.TYPE_INT_RGB);

       宽度、高度单位都是像素;

 

       在程序处理一张大小为3537*5017的图像的时候,程序报错,内存溢出。发现是在构建BufferedImage的时候出的错,这令我很惊奇。

    据我所知3537*5017rgb模式图像的数据量为:

       3537*5017*3/1024/1024 =

       假设,有一张图像大小为3537*5017的图像,则构建后的BufferedImage所需要的内存大概为:

       3537*5017*3/1024/1024 = 50.8M

       而我java虚拟机的最大内存是设置成2G的,很费解?????

 

       由于,实际业务上传上来的图片只要打印成A4纸即可,因此只要把原始图片缩放即可,然后再缩放的图片上打印水印文字即可。这样,确实可以绕过刚才说的内存溢出问题。

       但是有2点我还一直不是很明白:

       1BufferedImage构建的时候,其到底耗费多少内存,如何计算?

    2)如果不用BufferedImage,有没有比较好的替代品?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值