亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

java實現(xiàn)傾斜水印鋪滿整張圖

 更新時間:2016年06月26日 11:12:15   作者:Mr_Smile2014  
這篇文章主要為大家詳細介紹了java實現(xiàn)傾斜水印鋪滿整張圖的具體代碼,教大家如何控制水印之間的空隙,感興趣的小伙伴們可以參考一下

今天遇到一個需求對上傳的圖鋪滿水印,在網(wǎng)上找了半天都是在指定位置設置水印,下面代碼是我通過在網(wǎng)上找的代碼,然后改造而成的。我們先看一下效果圖

 

下面講實現(xiàn)方法:
第一步:使用ps或美圖軟件設計水印圖片,比如:

 

第二步:把下面代碼放入類中:

package org.platform.framework.commons.util;

import java.awt.AlphaComposite;
import java.awt.Color;
import java.awt.Font;
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.InputStream;
import java.io.OutputStream;

import javax.imageio.ImageIO;
import javax.swing.ImageIcon;

import com.founder.cms.watermark.util.ImageMarkLogoUtil;

/**
 * 
 * 生成水印
 * 
 */
public class ImageMarkUtil {

 /** 水印透明度 */
 private static float alpha = 0.5f;
 /** 水印圖片旋轉角度 */
 private static double degree = 0f;
 private static int interval = 0;

 /**
 * 設置水印參數(shù),不設置就使用默認值
 * 
 * @param alpha
 *   水印透明度
 * @param degree
 *   水印圖片旋轉角度 *
 * @param interval
 *   水印圖片間隔
 */
 public static void setImageMarkOptions(float alpha, int degree,
 int interval) {
 if (alpha != 0.0f) {
 ImageMarkUtil.alpha = alpha;
 }
 if (degree != 0f) {
 ImageMarkUtil.degree = degree;
 }
 if (interval != 0f) {
 ImageMarkUtil.interval = interval;
 }

 }

 /**
 * 給圖片添加水印圖片
 * 
 * @param waterImgPath
 *   水印圖片路徑
 * @param srcImgPath
 *   源圖片路徑
 * @param targerPath
 *   目標圖片路徑
 */
 public static void waterMarkByImg(String waterImgPath, String srcImgPath,
 String targerPath) throws Exception {
 waterMarkByImg(waterImgPath, srcImgPath, targerPath, 0);
 }

 /**
 * 給圖片添加水印圖片
 * 
 * @param waterImgPath
 *   水印圖片路徑
 * @param srcImgPath
 *   源圖片路徑
 * @param targerPath
 *   目標圖片路徑
 */
 public static void waterMarkByImg(String waterImgPath, String srcImgPath) {
 try {
 waterMarkByImg(waterImgPath, srcImgPath, srcImgPath, 0);
 } catch (Exception e) {
 // TODO Auto-generated catch block
 e.printStackTrace();
 }
 }

 /**
 * 給圖片添加水印圖片、可設置水印圖片旋轉角度
 * 
 * @param waterImgPath
 *   水印圖片路徑
 * @param srcImgPath
 *   源圖片路徑
 * @param targerPath
 *   目標圖片路徑
 * @param degree
 *   水印圖片旋轉角度
 */
 public static void waterMarkByImg(String waterImgPath, String srcImgPath,
 String targerPath, double degree) throws Exception {
 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);

 // 1、得到畫筆對象
 Graphics2D g = buffImg.createGraphics();

 // 2、設置對線段的鋸齒狀邊緣處理
 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);
 // 3、設置水印旋轉
 if (0 != degree) {
 g.rotate(Math.toRadians(degree),
  (double) buffImg.getWidth() / 2, (double) buffImg
  .getHeight() / 2);
 }

 // 4、水印圖片的路徑 水印圖片一般為gif或者png的,這樣可設置透明度
 ImageIcon imgIcon = new ImageIcon(waterImgPath);

 // 5、得到Image對象。
 Image img = imgIcon.getImage();

 g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP,
  alpha));

 // 6、水印圖片的位置
 for (int height = interval + imgIcon.getIconHeight(); height < buffImg
  .getHeight(); height = height +interval+ imgIcon.getIconHeight()) {
 for (int weight = interval + imgIcon.getIconWidth(); weight < buffImg
  .getWidth(); weight = weight +interval+ imgIcon.getIconWidth()) {
  g.drawImage(img, weight - imgIcon.getIconWidth(), height
  - imgIcon.getIconHeight(), null);
 }
 }
 g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER));
 // 7、釋放資源
 g.dispose();

 // 8、生成圖片
 os = new FileOutputStream(targerPath);
 ImageIO.write(buffImg, "JPG", os);

 System.out.println("圖片完成添加水印圖片");

 } catch (Exception e) {
 e.printStackTrace();
 } finally {
 try {
 if (null != os)
  os.close();
 } catch (Exception e) {
 e.printStackTrace();
 }
 }
 }

 public static void main(String[] args) {

 System.out.println("..添加水印圖片開始...");
 /**
 * watermarkPath 水印圖片地址 uploadPath 上傳成功后文件地址
 */
 //修改默認參數(shù)
 //ImageMarkUtil.setImageMarkOptions(0.0f, 0,
 20);
 //ImageMarkUtil.waterMarkByImg(watermarkPath, uploadPath);
 System.out.println("..添加水印圖片結束...");
 }

}

第三步:在實現(xiàn)上傳成功的地方,調用該類,如:

 /**
 * watermarkPath 水印圖片地址
 * uploadPath 上傳成功后文件地址
 */
 ImageMarkUtil.waterMarkByImg(watermarkPath, uploadPath);如果你覺得水印間隔太近了,可以通過下面代碼設置間隔:

//修改默認參數(shù)
 ImageMarkUtil.setImageMarkOptions(0.0f, 0,
 20);
 ImageMarkUtil.waterMarkByImg(watermarkPath, uploadPath);

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • Java?數(shù)據(jù)結構與算法系列精講之貪心算法

    Java?數(shù)據(jù)結構與算法系列精講之貪心算法

    我們可能在好多地方都會聽到貪心算法這一概念,并且它的算法思想也比較簡單就是說算法只保證局部最優(yōu),進而達到全局最優(yōu)。但我們實際編程的過程中用的并不是很多,究其原因可能是貪心算法使用的條件比較苛刻,所要解決的問題必須滿足貪心選擇性質
    2022-02-02
  • 利用MyBatis進行不同條件的like模糊查詢的方法

    利用MyBatis進行不同條件的like模糊查詢的方法

    這篇文章主要介紹了利用MyBatis進行不同條件的like模糊查詢,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-08-08
  • JavaCV實現(xiàn)照片馬賽克效果

    JavaCV實現(xiàn)照片馬賽克效果

    這篇文章主要介紹了如何通過JavaCV實現(xiàn)照片馬賽克效果,文中的示例代碼講解詳細,對我們學習JavaCV有一定的幫助,感興趣的小伙伴可以跟隨小編一起動手試一試
    2022-01-01
  • IDEA 開發(fā)配置SparkSQL及簡單使用案例代碼

    IDEA 開發(fā)配置SparkSQL及簡單使用案例代碼

    這篇文章主要介紹了IDEA 開發(fā)配置SparkSQL及簡單使用案例代碼,本文通過代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-08-08
  • Mybatis 中的一對一,一對多,多對多的配置原則示例代碼

    Mybatis 中的一對一,一對多,多對多的配置原則示例代碼

    這篇文章主要介紹了 Mybatis 中的一對一,一對多,多對多的配置原則示例代碼,需要的朋友可以參考下
    2017-03-03
  • SpringBoot使用Filter實現(xiàn)簽名認證鑒權的示例代碼

    SpringBoot使用Filter實現(xiàn)簽名認證鑒權的示例代碼

    這篇文章主要介紹了SpringBoot使用Filter實現(xiàn)簽名認證鑒權的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-04-04
  • 深入淺出講解Java比較器及數(shù)學常用類

    深入淺出講解Java比較器及數(shù)學常用類

    這篇文章主要介紹了深入淺出講解Java比較器及數(shù)學常用類,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-09-09
  • Mybatis關聯(lián)映射舉例詳解

    Mybatis關聯(lián)映射舉例詳解

    關聯(lián)關系是面向對象分析、面向對象設計最終的思想,Mybatis完全可以理解這種關聯(lián)關系,如果關系得當,Mybatis的關聯(lián)映射將可以大大簡化持久層數(shù)據(jù)的訪問
    2022-07-07
  • 基于SpringBoot實現(xiàn)自動裝配返回屬性的設計思路

    基于SpringBoot實現(xiàn)自動裝配返回屬性的設計思路

    這篇文章主要介紹了基于SpringBoot實現(xiàn)自動裝配返回屬性,這里涉及到的技術知識點有注解解析器,為什么用ResponseBodyAdvice這里解析?不在Filter,Interceptors,本文結合示例代碼給大家介紹的非常詳細,需要的朋友參考下吧
    2022-03-03
  • Java?數(shù)據(jù)結構與算法系列精講之棧

    Java?數(shù)據(jù)結構與算法系列精講之棧

    棧(stack)又名堆棧,它是一種運算受限的線性表。限定僅在表尾進行插入和刪除操作的線性表。這一端被稱為棧頂,相對地,把另一端稱為棧底,棧是基礎中的基礎,如果你還沒掌握透徹就來接著往下看吧
    2022-02-02

最新評論