lexy

          支持開源,尊重他人的勞動!

            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            17 隨筆 :: 0 文章 :: 9 評論 :: 0 Trackbacks

          貼一段 最近寫的用來 給 給定目錄下的圖片 添加水印的代碼。

          WaterMark.java:


          import com.sun.image.codec.jpeg.JPEGImageEncoder;
          import com.sun.image.codec.jpeg.JPEGCodec;

          import javax.imageio.ImageIO;
          import java.io.File;
          import java.io.IOException;
          import java.io.FilenameFilter;
          import java.io.FileOutputStream;
          import java.util.Properties;
          import java.awt.*;
          import java.awt.image.BufferedImage;
          import java.util.List;
          import java.util.Arrays;
          import java.util.ArrayList;

          public class WaterMark {

          ??? private List<File> filterFiles(String path, FilenameFilter filter, List<File> fileList) {
          ??????? if (new File(path).exists() && new File(path).isDirectory()) {
          ??????????? File[] files = new File(path).listFiles(filter);
          ??????????? fileList.addAll(Arrays.asList(files));

          ??????????? File[] allFiles = new File(path).listFiles();
          ??????????? for (File file : allFiles) {
          ??????????????? if (file.isDirectory())
          ??????????????????? filterFiles(file.getPath(), filter, fileList);
          ??????????? }
          ??????? }
          ??????? return fileList;
          ??? }

          ??? private void drawWaterMark(File srcPicture, File logoPicture, String destPath, float logoPercent) {
          ??????? try {
          ??????????? Image src = ImageIO.read(srcPicture);
          ??????????? int width = src.getWidth(null);
          ??????????? int height = src.getHeight(null);
          ??????????? BufferedImage image = new BufferedImage(width, height,
          ??????????????????? BufferedImage.TYPE_INT_RGB);
          ??????????? Graphics g = image.createGraphics();
          ??????????? g.drawImage(src, 0, 0, width, height, null);

          ??????????? Image src_logo = ImageIO.read(logoPicture);

          ??????????? int width_src_logo = src_logo.getWidth(null);
          ??????????? int heigth_src_logo = src_logo.getHeight(null);

          ??????????? int width_logo = (int) (width * logoPercent);
          ??????????? int height_logo = heigth_src_logo * width_logo / width_src_logo;

          ??????????? g.drawImage(src_logo, (width - width_logo) / 2, (height - height_logo) / 2,
          ??????????????????? width_logo, height_logo, null);
          ??????????? g.dispose();
          ??????????? FileOutputStream out = new FileOutputStream(destPath + "\\" + srcPicture.getName());
          ??????????? JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
          ??????????? encoder.encode(image);
          ??????????? out.close();
          ??????? } catch (IOException e) {
          ??????????? e.printStackTrace();
          ??????? }
          ??? }

          ??? public void draw() {
          ??????? try {
          ??????????? Properties props = new Properties();
          ??????????? props.load(WaterMark.class.getClassLoader().getResourceAsStream("system.properties"));
          ??????????? FFilter filter = new FFilter(props.getProperty("extensions.pictures"));
          ??????????? List<File> files = new ArrayList<File>();
          ??????????? String srcPath = props.getProperty("path.pictures.src");
          ??????????? files = filterFiles(srcPath, filter, files);
          ??????????? File logoPic = new File(props.getProperty("path.picture.logo"));
          ??????????? String destPath = props.getProperty("path.pictures.dest");
          ??????????? float logoSize = Float.valueOf(props.getProperty("percent.picture.logo"));
          ??????????? for (File pic : files) {
          ??????????????? String path = pic.getPath().substring(srcPath.length());
          ??????????????? path = path.substring(0, path.indexOf(pic.getName()));
          ??????????????? String newPath = destPath + path;
          ??????????????? if (!new File(newPath).exists())
          ??????????????????? new File(newPath).mkdirs();
          ??????????????? drawWaterMark(pic, logoPic, newPath, logoSize);
          ??????????? }
          ??????? } catch (Exception e) {
          ??????????? e.printStackTrace();
          ??????? }
          ??? }

          ??? public static void main(String[] args) {
          ??????? new WaterMark().draw();
          ??? }
          }

          FFilter.java :

          import java.io.FilenameFilter;
          import java.io.File;
          import java.util.regex.Pattern;
          import java.util.regex.Matcher;

          public class FFilter implements FilenameFilter {
          ??? private String regEx = "";

          ??? public FFilter(String regEx) {
          ??????? this.regEx = regEx;
          ??? }

          ??? public boolean accept(File dir, String filename) {
          ??????? Pattern p = Pattern.compile(regEx);
          ??????? Matcher m = p.matcher(filename);
          ??????? return m.find();
          ??? }
          }

          system.properties:

          #source pictures directory
          path.pictures.src=C:\\Documents and Settings\\Lexy\\Desktop\\testPic
          #destination pictures directory
          path.pictures.dest=C:\\Documents and Settings\\Lexy\\Desktop\\destTestPicDest
          #picture's extensions,space by "|"
          extensions.pictures=.jpg
          #path of the watermark logo
          path.picture.logo=C:\\Documents and Settings\\Lexy\\Desktop\\logo.png
          #the watermark percent of the pictures
          percent.picture.logo=0.5

          posted on 2008-04-01 17:28 lexy 閱讀(707) 評論(1)  編輯  收藏

          評論

          # re: 給圖片添加水印的JAVA實現 2008-04-12 10:49 豆抓搜索
          找了好長時間了,哈謝啦.http://www.douzhua.com  回復  更多評論
            


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 仙居县| 格尔木市| 岐山县| 贵港市| 泰兴市| 九台市| 长汀县| 阜平县| 禹城市| 安乡县| 武山县| 溆浦县| 梁河县| 吉木乃县| 拉萨市| 兴国县| 富裕县| 宜兰县| 阳春市| 清徐县| 正安县| 莆田市| 响水县| 江口县| 左权县| 临沂市| 南木林县| 石楼县| 安陆市| 麻江县| 同仁县| 长治市| 西和县| 建昌县| 肇东市| 上高县| 盐城市| 乌海市| 林芝县| 儋州市| 阿城市|