求助:我用如下程序给图片加水印,当图片比较大时出现内存错误,不知道如何解决

问题描述

importjava.awt.Color;importjava.awt.Font;importjava.awt.Graphics2D;importjava.awt.Image;importjava.awt.geom.AffineTransform;importjava.awt.image.AffineTransformOp;importjava.awt.image.BufferedImage;importjava.io.File;importjava.io.FileOutputStream;importjava.io.IOException;importjavax.imageio.ImageIO;importjavax.swing.ImageIcon;importcom.sun.image.codec.jpeg.*;/****Title:图片生成水印*Description:让图片生成水印的类*Date:2009-04-10*@authorHunter*@versionV1.0**//***给图片加文字水印的方法,传递五个参数SourceFile,destFile,markContent,markContentColor,qualNum*@paramSourceFile源图片名*@paramdestFile生成的文件名*@parammarkContent文字内容*@parammarkContentColor文字颜色*@paramqualNum图片质量*/publicclassJPGWaterMark{publicbooleancreateStringMark(StringsourceFile,StringdestFile,StringmarkContent,ColormarkContentColor,floatqualNum){ImageIconimgIcon=newImageIcon(sourceFile);ImagetheImg=imgIcon.getImage();intwidth=theImg.getWidth(null);intheight=theImg.getHeight(null);BufferedImagebimage=newBufferedImage(width,height,BufferedImage.TYPE_INT_RGB);Graphics2Dg=bimage.createGraphics();g.setColor(markContentColor);g.setBackground(Color.white);g.drawImage(theImg,0,0,null);g.setFont(newFont(null,Font.BOLD,18));//字体,字型,字号g.drawString(markContent,width-170,height-15);//画文字g.dispose();try{FileOutputStreamout=newFileOutputStream(destFile);JPEGImageEncoderencoder=JPEGCodec.createJPEGEncoder(out);JPEGEncodeParamparam=encoder.getDefaultJPEGEncodeParam(bimage);param.setQuality(qualNum,true);encoder.encode(bimage,param);out.close();}catch(Exceptione){System.out.print("给图片加文字水印出现错误,"+e.toString());returnfalse;}returntrue;}}以上程序当图片比较小时不出现错误,当我处理一张分辨率为3072*2048的图片就出现错误,错误是内存方面的问题,请问高手如何解决?

解决方案

解决方案二:
设置系统环境变量JAVA_OPTS=-Xmx256m
解决方案三:
出现的错误是:严重:Servlet.service()forservletaddPicServletthrewexceptionjava.lang.OutOfMemoryError:Javaheapspaceatjava.awt.image.DataBufferInt.<init>(UnknownSource)atjava.awt.image.Raster.createPackedRaster(UnknownSource)atjava.awt.image.DirectColorModel.createCompatibleWritableRaster(UnknownSource)atjava.awt.image.BufferedImage.<init>(UnknownSource)atcom.util.JPGWaterMark.createStringMark(JPGWaterMark.java:50)atcom.servlet.addPicServlet.doGet(addPicServlet.java:76)atcom.servlet.addPicServlet.doPost(addPicServlet.java:102)atjavax.servlet.http.HttpServlet.service(HttpServlet.java:710)atjavax.servlet.http.HttpServlet.service(HttpServlet.java:803)atorg.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)atorg.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)atcom.util.CharacterEncodingFilter.doFilter(CharacterEncodingFilter.java:24)atorg.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)atorg.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)atorg.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)atorg.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)atorg.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)atorg.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)atorg.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)atorg.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)atorg.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845)atorg.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)atorg.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)atjava.lang.Thread.run(UnknownSource)我修改了环境变量还是出现问题?希望得到大家的帮助
解决方案四:
不知道你这个图片到底多大,我以前用jai做过水印,好像没什么问题,当然没有测试过超大图片
解决方案五:
我的图片分辨率是3076*2048的,图片小的倒不出什么问题.

时间: 2024-08-17 16:31:36

求助:我用如下程序给图片加水印,当图片比较大时出现内存错误,不知道如何解决的相关文章

图片加水印-C#图片以流的形式加水印

问题描述 C#图片以流的形式加水印 用流读取的图片,我在上面加了文字水印. 但是我要怎么控制水印的位置,比如说我要加到右下角.应该怎么算坐标?(同一个坐标 .jpg格式跟tif格式位置不一样.)下面是我的代码: /// /// 图片加水印 /// /// 图片路径 /// 字体 /// 字体大小 /// 水印位置 /// 水印文字 /// 存储图片的文件夹 public void AddWaterText(string oldPath,string font,int fontSize,strin

php图片处理类(生成缩略图,图片尺寸调整,图片截取,图片加水印,图片旋转 )

使用演示:  代码如下 复制代码 //加载类库文件 require_once 'path/to/ThumbLib.inc.php'; //实例化类库,传入你要处理的图片的地址可以是网络地址,也可以是本地地址 $thumb = PhpThumbFactory::create('http://www.111cn.net/'); //把图片等比缩小到最大宽度 100px或者最高100px,当只输入一个参数的时候,是限制最宽的尺寸. $thumb->resize(100, 100); //把图片等比缩小

PHP经典的给图片加水印程序

程序   如果对PHP的GD库比较熟悉,看懂这篇文章一点都不难了!   <?php   /******************************************************************************      参数说明:   $max_file_size : 上传文件大小限制, 单位BYTE   $destination_folder : 上传文件路径   $watermark : 是否附加水印(1为加水印,其他为不加水印);      使用说明:

求助:java 如何在不缩放图片大小而对图片加水印

问题描述 求助:java 如何在不缩放图片大小而对图片加水印 如题:java 如何在不缩放图片大小而对图片加水印,网上很多方法都是加完水印图片就被缩放了 解决方案 没回应啊,帮自己顶一下 解决方案二: 楼主解决问题了吗?我也想问这个

PHP给图片加水印教程

PHP给图片加水印相对ASP来说,要简单多了,看下面代码: /***************************************************** 参数说明: $max_file_size : 上传文件大小限制, 单位BYTE $destination_folder : 上传文件路径 $watermark : 是否附加水印(1为加水印,其他为不加水印); 使用说明: 1. 将PHP.INI文件里面的"extension=php_gd2.dll"一行前面的;号去掉,

PHP给图片加水印实例代码

  PHP给图片加水印实例代码: 这也是一个比较常用的功能,用PHP给上传图片加水印的程序,是通过判断文件类型建立图形,然后把其复制到原建立的图形上,填充并建立rectangle,以备写入imagestring(),或是原已经定好的图像程序当中判断水印类型:一是字符串,另是增加一个图形对象在上面.主要运用了PHP的GD库. 参数说明:   $max_file_size : 上传文件大小限制, 单位BYTE   $destination_folder : 上传文件路径   $watermark :

使用snagit为图片加水印的方法

平时大家使用的最频繁的截图工具估计是QQ自带的ctrl+alt+a截图了,不过这个截图方式在聊天中用用尚可,有时候需要给截好的图作修改就比较不方便了.西西给大家介绍一款很不错的截图工具snagit,这款截图软件默认的快捷键是windows系统自带的截图按钮printscreen,而且功能还很多.今天教大家如何用snagit给图片添加水印. 软件下载:snagit下载 软件介绍: 上面给大家提供的snagit是小编平时喜欢用的版本,这个版本是绿色版不用安装破解导入注册表即可使用,非常方便.下载完毕

php-PHP给图片加水印中文乱码问题

问题描述 PHP给图片加水印中文乱码问题 需要开启iconv,我phpinfo()打印为: 应该怎么写个程序,可以支持中文呢? 解决方案 页面编码和字体 字体是否支持中文

想给网站上图片加水印。

问题描述 想给网站上图片加水印.只需要给有些图片加水印.没有上传图片的功能.求代码,,,方法 解决方案 解决方案二:文字水印百度搜一下吧就几句代码很简单的解决方案三:引用1楼longlong881129的回复: 文字水印百度搜一下吧就几句代码很简单的 我很菜的解决方案四:///<summary>///添加水印方法(JPG图片)///</summary>///<paramname="filepath">原始图片路径</param>///&l