java程序給指定的圖片添加水印文字並完美消除文字鋸齒



package com.walkerjava.utils
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.RenderingHints;
import java.awt.font.TextAttribute;
import java.awt.p_w_picpath.BufferedImage;
import java.io.FileOutputStream;
import java.text.AttributedCharacterIterator;
import java.text.AttributedString;

import javax.swing.ImageIcon;

import com.sun.p_w_picpath.codec.jpeg.JPEGCodec;
import com.sun.p_w_picpath.codec.jpeg.JPEGEncodeParam;
import com.sun.p_w_picpath.codec.jpeg.JPEGImageEncoder;

/**
* 構造圖片輸出
*/
public class Test {

        /**
         * 
         * @param souchFilePath
         *            :源圖片路徑
         * @param targetFilePath
         *            :生成後的目標圖片路徑
         * @param markContent
         *            :要加的文字
         * @param markContentColor
         *            :文字顏色
         * @param qualNum
         *            :質量數字
         * @param fontType
         *            :字體類型
         * @param fontSize
         *            :字體大小
         * @return
         */
        public static void createMark(String souchFilePath, String targetFilePath,
                                  String markContent, Color markContentColor, float qualNum,
                                  String fontType, int fontSize, int w, int h, Color color) {
                          markContentColor = color;
                          /* 構建要處理的源圖片 */
                          ImageIcon p_w_picpathIcon = new ImageIcon(souchFilePath);
                          /* 獲取要處理的圖片 */
                          Image p_w_picpath = p_w_picpathIcon.getImage();
                          // Image可以獲得圖片的屬性信息
                          int width = p_w_picpath.getWidth(null);
                          int height = p_w_picpath.getHeight(null);
                          // 爲畫出與源圖片的相同大小的圖片(可以自己定義)
                          BufferedImage bImage = new BufferedImage(width, height,
                                          BufferedImage.TYPE_INT_RGB);
                          // 構建2D畫筆
                          Graphics2D g = bImage.createGraphics();
                          /* 設置2D畫筆的畫出的文字顏色 */
                          g.setColor(markContentColor);
                          /* 設置2D畫筆的畫出的文字背景色 */
                          g.setBackground(Color.white);
                          /* 畫出圖片 */
                          g.drawImage(p_w_picpath, 0, 0, null);
                          /* --------對要顯示的文字進行處理-------------- */
                          AttributedString ats = new AttributedString(markContent);
                          Font font = new Font(fontType, Font.BOLD, fontSize);
                          g.setFont(font);
                         /* 消除java.awt.Font字體的鋸齒 */
                          g.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
                                                    RenderingHints.VALUE_ANTIALIAS_ON);
                          /* 消除java.awt.Font字體的鋸齒 */
                    更多實例請訪問 http://www.walkerjava.com/forum.php?mod=viewthread&tid=135
                          // font = g.getFont().deriveFont(30.0f);
                          ats.addAttribute(TextAttribute.FONT, font, 0, markContent.length());
                          AttributedCharacterIterator iter = ats.getIterator();
                          /* 添加水印的文字和設置水印文字出現的內容 ----位置 */
                          g.drawString(iter, width - w, height - h);
                          /* --------對要顯示的文字進行處理-------------- */
                          g.dispose();// 畫筆結束
                          try {
                                        // 輸出 文件 到指定的路徑
                                        FileOutputStream out = new FileOutputStream(targetFilePath);
                                        JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
                                        JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam(bImage);
                                        param.setQuality(qualNum, true);
                                        encoder.encode(bImage, param);
                                        out.close();
                          } catch (Exception e) {
                                        e.printStackTrace();
                          }
        }

        public static void main(String[] args) {
                          Test.createMark("d:\\p_w_picpath\\daili.jpg", "d:\\p_w_picpath\\601.jpg",
                                          "這是用java程序給圖片添加的文字水印", null, 1, "方正楷體簡體", 30, 700, 300,
                                          Color.GRAY);
        }
}



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章