java 實現給圖片添加浮水印

來源:互聯網
上載者:User

原圖如下:




代碼如下:

package test;import java.awt.AlphaComposite;import java.awt.Color;import java.awt.Font;import java.awt.Graphics;import java.awt.Graphics2D;import java.awt.Image;import java.awt.RenderingHints;import java.awt.image.BufferedImage;import java.io.File;import java.io.FileOutputStream;import java.io.OutputStream;import javax.imageio.ImageIO;import javax.swing.ImageIcon;import com.sun.image.codec.jpeg.JPEGCodec;import com.sun.image.codec.jpeg.JPEGEncodeParam;import com.sun.image.codec.jpeg.JPEGImageEncoder;public class ImageMark {/**      * 添加文字浮水印      * @param targetImg 靶心圖表片路徑,如:D://fj.jp      * @param pressText 浮水印文字, 如:XingKong22star     * @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 boolean createMark(String filePath,String newFilePath) {float watermarkAlpha = (float) 0.5;// 讀取原圖片ImageIcon imgIcon = new ImageIcon(filePath);Image theImg = imgIcon.getImage();int width = theImg.getWidth(null);int height = theImg.getHeight(null);// 建立一個和原圖片同大小的新空白圖片BufferedImage bimage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);Graphics2D g = bimage.createGraphics();// bimage = g.getDeviceConfiguration().createCompatibleImage(width,// height, Transparency.TRANSLUCENT);// g.dispose();// g = bimage.createGraphics(); //設定字型 Font font = new Font("SansSerif", Font.BOLD, 18); g.setFont(font);// 設定前景色彩 g.setColor(Color.white);// 設定背景色g.setBackground(Color.white);// 畫原圖g.drawImage(theImg, 0, 0, null);// 值從0f-1.0fg.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP, watermarkAlpha));// 畫字 g.drawString("XingKong22star", imgIcon.getIconWidth() - 150 ,imgIcon.getIconHeight() - 20);// 透明度設定 結束g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER));g.dispose();FileOutputStream out = null;try {String newWaterFile = newFilePath;out = new FileOutputStream(newWaterFile);JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam(bimage);param.setQuality(50f, true);encoder.encode(bimage, param);} catch (Exception e) {System.out.println("---產生失敗---");return false;} finally {if (out != null) {try {out.close();out = null;} catch (Exception e) {}}}System.out.println("浮水印文字載入完畢");return true;}    /**     * 把圖片印刷到圖片上     *     * @param iconPath --     *            浮水印檔案     * @param srcImgPath --     *            目標檔案     * @param targerPath     *            儲存位置              * @param x     *            --x座標     * @param y     *            --y座標     */    public static void markImageByIcon(String iconPath, String srcImgPath,             String targerPath, Integer degree,int x,int y) {         OutputStream os = null;         try {             Image srcImg = ImageIO.read(new File(srcImgPath));              BufferedImage buffImg = new BufferedImage(srcImg.getWidth(null),                     srcImg.getHeight(null), BufferedImage.TYPE_INT_RGB);              // 得到畫筆對象             // Graphics g= buffImg.getGraphics();             Graphics2D g = buffImg.createGraphics();              // 設定對線段的鋸齒狀邊緣處理             g.setRenderingHint(RenderingHints.KEY_INTERPOLATION,                     RenderingHints.VALUE_INTERPOLATION_BILINEAR);              g.drawImage(srcImg.getScaledInstance(srcImg.getWidth(null), srcImg                     .getHeight(null), Image.SCALE_SMOOTH), 0, 0, null);              if (null != degree) {                 // 設定浮水印旋轉                 g.rotate(Math.toRadians(degree),                         (double) buffImg.getWidth() / 2, (double) buffImg                                 .getHeight() / 2);             }              // 浮水印圖象的路徑 浮水印一般為gif或者png的,這樣可設定透明度             ImageIcon imgIcon = new ImageIcon(iconPath);              // 得到Image對象。             Image img = imgIcon.getImage();              float alpha = 0.5f; // 透明度             g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP,                     alpha));              // 表示浮水印圖片的位置             g.drawImage(img, x, y, null);              g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER));              g.dispose();              os = new FileOutputStream(targerPath);              // 產生圖片             ImageIO.write(buffImg, "JPG", os);              System.out.println("圖片完成添加Icon。。。。。。");         } catch (Exception e) {             e.printStackTrace();         } finally {             try {                 if (null != os)                     os.close();             } catch (Exception e) {                 e.printStackTrace();             }         }     }  public static void main(String[] args) {String filePath = "D:/fj.jpg";String newFilePath = "D:/fj_water.jpg";ImageMark.createMark(filePath,newFilePath); String srcImgPath = "D:/fj.jpg";         String iconPath = "D:/3.png";         String targerPath = "D:/markImageByIcon.jpg";         // 給圖片添加浮水印         ImageMark.markImageByIcon(iconPath, srcImgPath, targerPath, null, 800, 730);}}

運行結果如下:



浮水印文字效果:


                               



圖片浮水印效果


浮水印圖片:

   


添加完後:


                    





相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.