最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

 

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

 

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

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;
 /** 水印圖片旋轉(zhuǎn)角度 */
 private static double degree = 0f;
 private static int interval = 0;

 /**
 * 設(shè)置水印參數(shù),不設(shè)置就使用默認(rèn)值
 * 
 * @param alpha
 *   水印透明度
 * @param degree
 *   水印圖片旋轉(zhuǎn)角度 *
 * @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
 *   目標(biāo)圖片路徑
 */
 public static void waterMarkByImg(String waterImgPath, String srcImgPath,
 String targerPath) throws Exception {
 waterMarkByImg(waterImgPath, srcImgPath, targerPath, 0);
 }

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

 /**
 * 給圖片添加水印圖片、可設(shè)置水印圖片旋轉(zhuǎn)角度
 * 
 * @param waterImgPath
 *   水印圖片路徑
 * @param srcImgPath
 *   源圖片路徑
 * @param targerPath
 *   目標(biāo)圖片路徑
 * @param degree
 *   水印圖片旋轉(zhuǎn)角度
 */
 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、得到畫筆對(duì)象
 Graphics2D g = buffImg.createGraphics();

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

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

 // 5、得到Image對(duì)象。
 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 上傳成功后文件地址
 */
 //修改默認(rèn)參數(shù)
 //ImageMarkUtil.setImageMarkOptions(0.0f, 0,
 20);
 //ImageMarkUtil.waterMarkByImg(watermarkPath, uploadPath);
 System.out.println("..添加水印圖片結(jié)束...");
 }

}

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

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

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

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java 靜態(tài)數(shù)據(jù)初始化的示例代碼

    Java 靜態(tài)數(shù)據(jù)初始化的示例代碼

    這篇文章主要介紹了Java 靜態(tài)數(shù)據(jù)初始化的示例代碼,幫助大家更好的理解和學(xué)習(xí)Java,感興趣的朋友可以了解下
    2020-09-09
  • SpringBoot整合MongoDB實(shí)現(xiàn)文檔存儲(chǔ)功能

    SpringBoot整合MongoDB實(shí)現(xiàn)文檔存儲(chǔ)功能

    MongoDB是可以應(yīng)用于各種規(guī)模的企業(yè)、各個(gè)行業(yè)以及各類應(yīng)用程序的開源數(shù)據(jù)庫,本文將結(jié)合MongoDB和SpringBoot實(shí)現(xiàn)文檔存儲(chǔ)功能,需要的可以參考下
    2024-12-12
  • SpringBoot中ApplicationEvent和ApplicationListener用法小結(jié)

    SpringBoot中ApplicationEvent和ApplicationListener用法小結(jié)

    這篇文章介紹SpringBoot中ApplicationEvent用法,注意ApplicationEvent和MQ隊(duì)列雖然實(shí)現(xiàn)的功能相似,但是MQ還是有其不可替代性的,最本質(zhì)的區(qū)別就是MQ可以用于不同系統(tǒng)之間的消息發(fā)布,而SpringEvent這種模式只能在一個(gè)系統(tǒng)中,需要的朋友可以參考下
    2023-03-03
  • mybatis插件實(shí)現(xiàn)自定義改寫表名實(shí)例代碼

    mybatis插件實(shí)現(xiàn)自定義改寫表名實(shí)例代碼

    在數(shù)據(jù)庫操作過程中,經(jīng)常有修改表名的需求,下面這篇文章主要給大家介紹了關(guān)于mybatis插件實(shí)現(xiàn)自定義改寫表名的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-04-04
  • 自定義注解實(shí)現(xiàn)Spring容器注入Bean方式(類似于mybatis的@MapperScans)

    自定義注解實(shí)現(xiàn)Spring容器注入Bean方式(類似于mybatis的@MapperScans)

    本文介紹了如何通過自定義注解@MyService和@MyServiceScans在SpringBoot項(xiàng)目中自動(dòng)將指定包下的類注入Spring容器,詳細(xì)解釋了創(chuàng)建自定義注解、定義包掃描器ClassPathBeanDefinitionScanner的作用與實(shí)現(xiàn)
    2024-09-09
  • java括號(hào)匹配問題介紹

    java括號(hào)匹配問題介紹

    大家好,本篇文章主要講的是java括號(hào)匹配問題介紹,感興趣的同學(xué)趕快來看一看吧,對(duì)你有幫助的話記得收藏一下,方便下次瀏覽
    2021-12-12
  • 淺談Java面向接口編程

    淺談Java面向接口編程

    本文通過結(jié)合接口的本質(zhì)、面向?qū)ο缶幊膛c面向接口編程的關(guān)系以及一些作者自身的理解,向大家介紹了面向接口編程的一些東西,需要的朋友可以了解下。
    2017-09-09
  • 使用Lombok的@Builder注解帶來的兩大坑

    使用Lombok的@Builder注解帶來的兩大坑

    這篇文章主要介紹了使用Lombok的@Builder注解帶來的兩大坑,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • Dubbo服務(wù)校驗(yàn)參數(shù)的解決方案

    Dubbo服務(wù)校驗(yàn)參數(shù)的解決方案

    這篇文章主要介紹了Dubbo服務(wù)如何優(yōu)雅的校驗(yàn)參數(shù),Dubbo框架本身是支持參數(shù)校驗(yàn)的,同時(shí)也是基于JSR303去實(shí)現(xiàn)的,今天通過示例代碼介紹下詳細(xì)實(shí)現(xiàn)過程,需要的朋友可以參考下
    2022-03-03
  • spring?boot集成smart-doc自動(dòng)生成接口文檔詳解

    spring?boot集成smart-doc自動(dòng)生成接口文檔詳解

    這篇文章主要介紹了spring?boot集成smart-doc自動(dòng)生成接口文檔詳解,smart-doc是一款同時(shí)支持java?restful?api和Apache?Dubbo?rpc接口文檔生成的工具,smart-doc顛覆了傳統(tǒng)類似swagger這種大量采用注解侵入來生成文檔的實(shí)現(xiàn)方法
    2022-09-09

最新評(píng)論

罗源县| 长武县| 正阳县| 金溪县| 南华县| 曲水县| 林口县| 茌平县| 龙游县| 乐昌市| 兴安县| 旬阳县| 航空| 嵩明县| 巴楚县| 阿克苏市| 遵义县| 疏附县| 惠安县| 师宗县| 怀仁县| 宁远县| 香港 | 清流县| 朝阳县| 台北县| 叶城县| 瑞安市| 札达县| 肇东市| 汶川县| 英超| 余干县| 任丘市| 彝良县| 南开区| 武鸣县| 阜康市| 根河市| 三明市| 炎陵县|