我在servlet 里,给一个jpg文件加上透明的gif logo(加水印),但出现了白色的锯齿。
请问如何解决?折腾了一上午。以下是代码:private void water(String imgSrc,HttpServletRequest req)
{
//Color bgColor = Color.WHITE;
String waterSrc = req.getRealPath("/images/common/wm_logo.gif");
int waterLocationX;
int waterLocationY;
ImageIcon srcFile = new ImageIcon(imgSrc);//read src image
Image srcImage = srcFile.getImage();
int srcW = srcImage.getWidth(null);
int srcH = srcImage.getHeight(null);
waterLocationX = srcW-150;
waterLocationY = srcH-60;
ImageIcon waterFile = new ImageIcon(waterSrc);//load water file
Image waterImage = waterFile.getImage();
BufferedImage tagImg = new BufferedImage(srcW,srcH, BufferedImage.TYPE_INT_RGB);
Graphics2D g = tagImg.createGraphics( );
//g.setBackground(bgColor);
g.drawImage(srcImage, 0, 0, null );
//g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP,0.4f));
g.drawImage(waterImage, waterLocationX,waterLocationY, null ); //draw water image
//g.drawString(word,wordLocationX,wordLocationY); //draw string
g.dispose();
paint(tagImg,imgSrc);
}private void paint(BufferedImage tagImg,String pathImg)
{
try
{
FileOutputStream out = new FileOutputStream(pathImg);
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam(tagImg);
param.setQuality(50f, true);
encoder.encode(tagImg, param);
out.close();
}catch(Exception e)
{
e.getMessage();
}
}
楼主【7xin】截止到2008-07-03 10:47:06的历史汇总数据(不包括此帖):
发帖的总数量:14 发帖的总分数:700
结贴的总数量:12 结贴的总分数:680
无满意结贴数:0 无满意结贴分:0
未结的帖子数:2 未结的总分数:20
结贴的百分比:85.71 % 结分的百分比:97.14 %
无满意结贴率:0.00 % 无满意结分率:0.00 %
楼主加油
RenderingHints.KEY_RENDERING,
RenderingHints.VALUE_RENDER_QUALITY
);
hintQuality.put( //抗锯齿提示键。
RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON
);
hintQuality.put( //文本抗锯齿提示键。
RenderingHints.KEY_TEXT_ANTIALIASING,
RenderingHints.VALUE_TEXT_ANTIALIAS_ON
);
hintQuality.put( //插值提示键。
RenderingHints.KEY_INTERPOLATION,
RenderingHints.VALUE_INTERPOLATION_BICUBIC
);
hintQuality.put( //Alpha插值提示键。
RenderingHints.KEY_ALPHA_INTERPOLATION,
RenderingHints.VALUE_ALPHA_INTERPOLATION_QUALITY
);
hintQuality.put( //颜色呈现提示键。
RenderingHints.KEY_COLOR_RENDERING,
RenderingHints.VALUE_COLOR_RENDER_QUALITY
);
hintQuality.put( //抖动提示键。
RenderingHints.KEY_DITHERING,
RenderingHints.VALUE_DITHER_ENABLE
);
hintQuality.put( //字体规格提示键。
RenderingHints.KEY_FRACTIONALMETRICS,
RenderingHints.VALUE_FRACTIONALMETRICS_ON
);
hintQuality.put( //笔划规范化控制提示键。
RenderingHints.KEY_STROKE_CONTROL,
RenderingHints.VALUE_STROKE_PURE
);
Graphics2D g2d = (Graphics2D) g;
g2d.setRenderingHints(hintQuality);
g2d./*你的绘图方法*/;
//其它绘图绘图操作
半透明的,如果全透明那还看得见吗,而且一般边缘要渐变的由半透明到全透明,这样平滑过渡锯齿就消除了。这样的图片用 Photoshop 很容易处理,发光效果处理图层就行。