首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

增添水印方法大全

2012-12-22 
添加水印方法大全1.css 文字上加背景图片 p styledispaly:blockbackground:url(images/pic.jpg)文字

添加水印方法大全

1.css 文字上加背景图片 <p style="dispaly:block;background:url(images/pic.jpg)">文字</p>

2.添加水印代码 简单版本

?

?

/*
* Created on 2005-3-29
*
* TODO 实现图片的水印效果,只针对jpg
*/
package com.tryitsoft.image;

import java.awt.*;
import java.awt.image.*;
import java.io.*;
import javax.swing.*;
import com.sun.image.codec.jpeg.*;

public class WaterMark {
? ? /**
? ?? ?* 给图片添加水印
? ???* @param filePath 需要添加水印的图片的路径
? ???* @param markContent 水印的文字
? ???* @param markContentColor 水印文字的颜色
? ???* @param qualNum 图片质量
? ???* @return
? ???*/
? ? public boolean createMark(String filePath,String markContent,Color markContentColor,float qualNum)
? ? {?
???????File file = new File(targetImg);???
???????????????
??????? Image image = ImageIO.read(file);?

????????int width=theImg.getWidth(null);
? ?? ???int height= theImg.getHeight(null);
? ?? ???BufferedImage bimage = new BufferedImage(width,height, BufferedImage.TYPE_INT_RGB);
? ?? ???Graphics2D g=bimage.createGraphics();
? ?? ???g.setColor(markContentColor);
? ?? ???g.setBackground(Color.white);
? ?? ???g.drawImage(theImg, 0, 0, null );
? ?? ???g.drawString(markContent,width/5,height/5); //添加水印的文字和设置水印文字出现的内容
? ?? ???g.dispose();
? ?? ???try{
? ?? ???FileOutputStream out=new FileOutputStream(filePath);
? ?? ???JPEGImageEncoder encoder =JPEGCodec.createJPEGEncoder(out);
? ?? ???JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam(bimage);
? ?? ???param.setQuality(qualNum, true);
? ?? ???encoder.encode(bimage, param);
? ?? ???out.close();
? ?? ???}catch(Exception e)
? ?? ???{ return false; }
? ?? ???return true;
? ? }
}

jsp调用文件 tt.jsp

<%@ page language="java" pageEncoding="GBK" %>
<%@ page import="java.awt.*" %>
<!DOCTYPE HTML PUBLIC "-//w3c//dtd html 4.0 transitional//en">
<html>
<head>
<title>Lomboz JSP</title>
</head>
<body bgcolor="#FFFFFF">


<%com.tryitsoft.image.WaterMark wm = new com.tryitsoft.image.WaterMark();

if (wm.createMark("d://map.jpg","http://www.tryitsoft.com",Color.ORANGE,70f))
{
? ? out.print("添加水印成功!");
}
else
{
? ? out.print("添加水印失败!");
}
%>
</body>
</html>

?

3 添加水印复杂版本

?

?

import java.awt.AlphaComposite;??
import java.awt.Color;??
import java.awt.Font;??
import java.awt.Graphics2D;??
import java.awt.Image;??
import java.awt.geom.AffineTransform;??
import java.awt.image.AffineTransformOp;??
import java.awt.image.BufferedImage;??
import java.io.File;??
import java.io.IOException;??
?
import javax.imageio.ImageIO;??
?
/**?
?* 图片工具类, 图片水印,文字水印,缩放,补白等?
?* @author Carl He?
?*/?
public final class ImageUtils {??
??? /**图片格式:JPG*/?
??? private static final String PICTRUE_FORMATE_JPG = "jpg";??
??????
??? private ImageUtils(){}??
??? /**?
???? * 添加图片水印?
???? * @param targetImg 目标图片路径,如:C://myPictrue//1.jpg?
???? * @param waterImg? 水印图片路径,如:C://myPictrue//logo.png?
???? * @param x 水印图片距离目标图片左侧的偏移量,如果x<0, 则在正中间?
???? * @param y 水印图片距离目标图片上侧的偏移量,如果y<0, 则在正中间?
???? * @param alpha 透明度(0.0 -- 1.0, 0.0为完全透明,1.0为完全不透明)?
???? */?
??? public final static void pressImage(String targetImg, String waterImg, int x, int y, float alpha) {??
??????????? try {??
??????????????? File file = new File(targetImg);??
??????????????? Image image = ImageIO.read(file);??
??????????????? int width = image.getWidth(null);??
??????????????? int height = image.getHeight(null);??
??????????????? BufferedImage bufferedImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);??
??????????????? Graphics2D g = bufferedImage.createGraphics();??
??????????????? g.drawImage(image, 0, 0, width, height, null);??
??????????????
??????????????? Image waterImage = ImageIO.read(new File(waterImg));??? // 水印文件??
??????????????? int width_1 = waterImage.getWidth(null);??
??????????????? int height_1 = waterImage.getHeight(null);??
??????????????? g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP, alpha));??
??????????????????
??????????????? int widthDiff = width - width_1;??
??????????????? int heightDiff = height - height_1;??
??????????????? if(x < 0){??
??????????????????? x = widthDiff / 2;??
??????????????? }else if(x > widthDiff){??
??????????????????? x = widthDiff;??
??????????????? }??
??????????????? if(y < 0){??
??????????????????? y = heightDiff / 2;??
??????????????? }else if(y > heightDiff){??
??????????????????? y = heightDiff;??
??????????????? }??
??????????????? g.drawImage(waterImage, x, y, width_1, height_1, null); // 水印文件结束??
??????????????? g.dispose();??
??????????????? ImageIO.write(bufferedImage, PICTRUE_FORMATE_JPG, file);??
??????????? } catch (IOException e) {??
??????????????? e.printStackTrace();??
??????????? }??
??? }??
?
??? /**?
???? * 添加文字水印?
???? * @param targetImg 目标图片路径,如:C://myPictrue//1.jpg?
???? * @param pressText 水印文字, 如:中国证券网?
???? * @param fontName 字体名称,??? 如:宋体?
???? * @param fontStyle 字体样式,如:粗体和斜体(Font.BOLD|Font.ITALIC)?
???? * @param fontSize 字体大小,单位为像素?
???? * @param color 字体颜色?
???? * @param x 水印文字距离目标图片左侧的偏移量,如果x<0, 则在正中间?
???? * @param y 水印文字距离目标图片上侧的偏移量,如果y<0, 则在正中间?
???? * @param alpha 透明度(0.0 -- 1.0, 0.0为完全透明,1.0为完全不透明)?
???? */?
??? public static void pressText(String targetImg, String pressText, String fontName, int fontStyle, int fontSize, Color color, int x, int y, float alpha) {??
??????? try {??
??????????? File file = new File(targetImg);??
??????????????
??????????? Image image = ImageIO.read(file);??
??????????? int width = image.getWidth(null);??
??????????? int height = image.getHeight(null);??
??????????? BufferedImage bufferedImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);??
??????????? Graphics2D g = bufferedImage.createGraphics();??
??????????? g.drawImage(image, 0, 0, width, height, null);??
??????????? g.setFont(new Font(fontName, fontStyle, fontSize));??
??????????? g.setColor(color);??
??????????? g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP, alpha));??
??????????????
??????????? int width_1 = fontSize * getLength(pressText);??
??????????? int height_1 = fontSize;??
??????????? int widthDiff = width - width_1;??
??????????? int heightDiff = height - height_1;??
??????????? if(x < 0){??
??????????????? x = widthDiff / 2;??
??????????? }else if(x > widthDiff){??
??????????????? x = widthDiff;??
??????????? }??
??????????? if(y < 0){??
??????????????? y = heightDiff / 2;??
??????????? }else if(y > heightDiff){??
??????????????? y = heightDiff;??
??????????? }??
??????????????
??????????? g.drawString(pressText, x, y + height_1);??
??????????? g.dispose();??
??????????? ImageIO.write(bufferedImage, PICTRUE_FORMATE_JPG, file);??
??????? } catch (Exception e) {??
??????????? e.printStackTrace();??
??????? }??
??? }??
??????
??? /**?
???? * 获取字符长度,一个汉字作为 1 个字符, 一个英文字母作为 0.5 个字符?
???? * @param text?
???? * @return 字符长度,如:text="中国",返回 2;text="test",返回 2;text="中国ABC",返回 4.?
???? */?
??? public static int getLength(String text) {??
??????? int textLength = text.length();??
??????? int length = textLength;??
??????? for (int i = 0; i < textLength; i++) {??
??????????? if (String.valueOf(text.charAt(i)).getBytes().length > 1) {??
??????????????? length++;??
??????????? }??
??????? }??
??????? return (length % 2 == 0) ? length / 2 : length / 2 + 1;??
??? }??
?
??? /**?
???? * 图片缩放?
???? * @param filePath 图片路径?
???? * @param height 高度?
???? * @param width 宽度?
???? * @param bb 比例不对时是否需要补白?
???? */?
??? public static void resize(String filePath, int height, int width, boolean bb) {??
??????? try {??
??????????? double ratio = 0; //缩放比例??????
??????????? File f = new File(filePath);?????
??????????? BufferedImage bi = ImageIO.read(f);?????
??????????? Image itemp = bi.getScaledInstance(width, height, BufferedImage.SCALE_SMOOTH);?????
??????????? //计算比例?????
??????????? if ((bi.getHeight() > height) || (bi.getWidth() > width)) {?????
??????????????? if (bi.getHeight() > bi.getWidth()) {?????
??????????????????? ratio = (new Integer(height)).doubleValue() / bi.getHeight();?????
??????????????? } else {?????
??????????????????? ratio = (new Integer(width)).doubleValue() / bi.getWidth();?????
??????????????? }?????
??????????????? AffineTransformOp op = new AffineTransformOp(AffineTransform.getScaleInstance(ratio, ratio), null);?????
??????????????? itemp = op.filter(bi, null);?????
??????????? }?????
??????????? if (bb) {?????
??????????????? BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);?????
??????????????? Graphics2D g = image.createGraphics();?????
??????????????? g.setColor(Color.white);?????
??????????????? g.fillRect(0, 0, width, height);?????
??????????????? if (width == itemp.getWidth(null))?????
??????????????????? g.drawImage(itemp, 0, (height - itemp.getHeight(null)) / 2, itemp.getWidth(null), itemp.getHeight(null), Color.white, null);?????
??????????????? else????
??????????????????? g.drawImage(itemp, (width - itemp.getWidth(null)) / 2, 0, itemp.getWidth(null), itemp.getHeight(null), Color.white, null);?????
??????????????? g.dispose();?????
??????????????? itemp = image;?????
??????????? }??
??????????? ImageIO.write((BufferedImage) itemp, "jpg", f);?????
??????? } catch (IOException e) {??
??????????? e.printStackTrace();??
??????? }??
??? }??
?
??? public static void main(String[] args) throws IOException {??
??????? pressImage("C://pic//jpg", "C://pic//test.gif", 5000, 5000, 0f);??
??????? pressText("C://pic//jpg", "旺仔之印", "宋体", Font.BOLD|Font.ITALIC, 20, Color.BLACK, 0, 0, 8f);??
??????? resize("C://pic//4.jpg", 1000, 500, true);??
??? }??
}

?

4?。路径问题

URL url = getClass().getResource("a.gif"); //当前编译后class文件所在目录查找

?

?

?

?

?

?

?

?


?

热点排行