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

java.imageIo給圖片添加水印的實(shí)現(xiàn)代碼

 更新時(shí)間:2013年07月02日 15:32:35   作者:  
最近項(xiàng)目在做一個(gè)商城項(xiàng)目, 項(xiàng)目上的圖片要添加水?、?添加圖片水印;②:添加文字水印;一下提供下個(gè)方法,希望大家可以用得著

復(fù)制代碼 代碼如下:

package com.blogs.image;
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;
/**
 * 圖片水印
 */
public class ImageUtil {
    /**
     * @param args
     */
    public static void main(String[] args) {
        String srcImgPath = "e:/2.png";
        String iconPath = "e:\\logo.jpg";
        String targerPath = "e:/3.jpg";
        // 給圖片添加水印
        ImageUtil.waterMarkImageByIcon(iconPath, srcImgPath, targerPath, 0, 0,
, 0.1f);
        // 給圖片添加水印,水印旋轉(zhuǎn)-45
        // ImageMarkLogoByIcon.markImageByIcon(iconPath, srcImgPath,
        // targerPath2, -45);
    }
    /**
     * 給圖片添加水印、可設(shè)置水印圖片旋轉(zhuǎn)角度
     *
     * @param iconPath
     *            水印圖片路徑
     * @param srcImgPath
     *            源圖片路徑
     * @param targerPath
     *            目標(biāo)圖片路徑
     * @param degree
     *            水印圖片旋轉(zhuǎn)角度
     * @param width
     *            寬度(與左相比)
     * @param height
     *            高度(與頂相比)
     * @param clarity
     *            透明度(小于1的數(shù))越接近0越透明
     */
    public static void waterMarkImageByIcon(String iconPath, String srcImgPath,
            String targerPath, Integer degree, Integer width, Integer height,
            float clarity) {
        OutputStream os = null;
        try {
            Image srcImg = ImageIO.read(new File(srcImgPath));
            System.out.println("width:" + srcImg.getWidth(null));
            System.out.println("height:" + srcImg.getHeight(null));
            BufferedImage buffImg = new BufferedImage(srcImg.getWidth(null),
                    srcImg.getHeight(null), BufferedImage.TYPE_INT_RGB);
            // 得到畫筆對(duì)象
            // Graphics g= buffImg.getGraphics();
            Graphics2D g = buffImg.createGraphics();
            // 設(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);
            if (null != degree) {
                // 設(shè)置水印旋轉(zhuǎn)
                g.rotate(Math.toRadians(degree),
                        (double) buffImg.getWidth() / 2,
                        (double) buffImg.getHeight() / 2);
            }
            // 水印圖象的路徑 水印一般為gif或者png的,這樣可設(shè)置透明度
            ImageIcon imgIcon = new ImageIcon(iconPath);
            // 得到Image對(duì)象。
            Image img = imgIcon.getImage();
            float alpha = clarity; // 透明度
            g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP,
                    alpha));
            // 表示水印圖片的位置
            g.drawImage(img, width, height, null);
            g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER));
            g.dispose();
            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();
            }
        }
    }
    /**
     * 給圖片添加水印、可設(shè)置水印圖片旋轉(zhuǎn)角度
     *
     * @param logoText
     *            水印文字
     * @param srcImgPath
     *            源圖片路徑
     * @param targerPath
     *            目標(biāo)圖片路徑
     * @param degree
     *            水印圖片旋轉(zhuǎn)角度
     * @param width
     *            寬度(與左相比)
     * @param height
     *            高度(與頂相比)
     * @param clarity
     *            透明度(小于1的數(shù))越接近0越透明
     */
    public static void waterMarkByText(String logoText, String srcImgPath,
            String targerPath, Integer degree, Integer width, Integer height,
            Float clarity) {
        // 主圖片的路徑
        InputStream is = null;
        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);
            // 得到畫筆對(duì)象
            // Graphics g= buffImg.getGraphics();
            Graphics2D g = buffImg.createGraphics();
            // 設(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);
            if (null != degree) {
                // 設(shè)置水印旋轉(zhuǎn)
                g.rotate(Math.toRadians(degree),
                        (double) buffImg.getWidth() / 2,
                        (double) buffImg.getHeight() / 2);
            }
            // 設(shè)置顏色
            g.setColor(Color.red);
            // 設(shè)置 Font
            g.setFont(new Font("宋體", Font.BOLD, 30));
            float alpha = clarity;
            g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP,
                    alpha));
            // 第一參數(shù)->設(shè)置的內(nèi)容,后面兩個(gè)參數(shù)->文字在圖片上的坐標(biāo)位置(x,y) .
            g.drawString(logoText, width, height);
            g.dispose();
            os = new FileOutputStream(targerPath);
            // 生成圖片
            ImageIO.write(buffImg, "JPG", os);
            System.out.println("添加水印文字完成!");
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                if (null != is)
                    is.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
            try {
                if (null != os)
                    os.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
}

還有一個(gè)圖片縮放代碼:
復(fù)制代碼 代碼如下:

/**
     * 圖片縮放(圖片等比例縮放為指定大小,空白部分以白色填充)
     *
     * @param srcPath
     *            源圖片路徑
     * @param destPath
     *            縮放后圖片路徑
     */
    public static void zoomImage(String srcPath, String destPath, int destHeight, int destWidth) {
        try {
            BufferedImage srcBufferedImage = ImageIO.read(new File(srcPath));
            int imgWidth = destWidth;
            int imgHeight = destHeight;
            int srcWidth = srcBufferedImage.getWidth();
            int srcHeight = srcBufferedImage.getHeight();
            if (srcHeight >= srcWidth) {
                imgWidth = (int) Math.round(((destHeight * 1.0 / srcHeight) * srcWidth));
            } else {
                imgHeight = (int) Math.round(((destWidth * 1.0 / srcWidth) * srcHeight));
            }
            BufferedImage destBufferedImage = new BufferedImage(destWidth, destHeight, BufferedImage.TYPE_INT_RGB);
            Graphics2D graphics2D = destBufferedImage.createGraphics();
            graphics2D.setBackground(Color.WHITE);
            graphics2D.clearRect(0, 0, destWidth, destHeight);
            graphics2D.drawImage(srcBufferedImage.getScaledInstance(imgWidth, imgHeight, Image.SCALE_SMOOTH), (destWidth / 2) - (imgWidth / 2), (destHeight / 2) - (imgHeight / 2), null);
            graphics2D.dispose();
            ImageIO.write(destBufferedImage, "JPEG", new File(destPath));
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

相關(guān)文章

  • 對(duì)SpringMVC的@RequestParam的解釋

    對(duì)SpringMVC的@RequestParam的解釋

    下面小編就為大家?guī)硪黄獙?duì)SpringMVC的@RequestParam的解釋。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-09-09
  • spring?boot項(xiàng)目中集成rocketmq詳細(xì)步驟

    spring?boot項(xiàng)目中集成rocketmq詳細(xì)步驟

    這篇文章主要給大家介紹了關(guān)于spring?boot項(xiàng)目中集成rocketmq的相關(guān)資料,springboot集成rocketmq的方法非常簡(jiǎn)單,文中直接上代碼,需要的朋友可以參考下
    2023-09-09
  • Springboot自定義mvc組件如何實(shí)現(xiàn)

    Springboot自定義mvc組件如何實(shí)現(xiàn)

    這篇文章主要介紹了Springboot自定義mvc組件如何實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-11-11
  • java編程 中流對(duì)象選取規(guī)律詳解

    java編程 中流對(duì)象選取規(guī)律詳解

    下面小編就為大家?guī)硪黄猨ava編程 中流對(duì)象選取規(guī)律詳解。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-01-01
  • Java中printStackTrace()用法示例

    Java中printStackTrace()用法示例

    這篇文章主要給大家介紹了關(guān)于Java中printStackTrace()用法的相關(guān)資料,printStackTrace()方法一般與拋出異常搭配使用,效果是打印出異常位置,需要的朋友可以參考下
    2024-05-05
  • Java?Collections.sort()實(shí)現(xiàn)List排序的默認(rèn)方法和自定義方法

    Java?Collections.sort()實(shí)現(xiàn)List排序的默認(rèn)方法和自定義方法

    這篇文章主要介紹了Java?Collections.sort()實(shí)現(xiàn)List排序的默認(rèn)方法和自定義方法,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2017-06-06
  • Java NIO原理圖文分析及代碼實(shí)現(xiàn)

    Java NIO原理圖文分析及代碼實(shí)現(xiàn)

    本文主要介紹Java NIO原理的知識(shí),這里整理了詳細(xì)資料及簡(jiǎn)單示例代碼和原理圖,有需要的小伙伴可以參考下
    2016-09-09
  • SpringBoot如何實(shí)現(xiàn)各種參數(shù)校驗(yàn)

    SpringBoot如何實(shí)現(xiàn)各種參數(shù)校驗(yàn)

    文章詳細(xì)介紹了SpringValidation的使用,包括簡(jiǎn)單使用、requestBody參數(shù)校驗(yàn)、requestParam/PathVariable參數(shù)校驗(yàn)、統(tǒng)一異常處理、分組校驗(yàn)、嵌套校驗(yàn)、集合校驗(yàn)、自定義校驗(yàn)、編程式校驗(yàn)、快速失敗、@Valid和@Validated的區(qū)別以及實(shí)現(xiàn)原理
    2024-12-12
  • 深度理解Java訪問修飾符

    深度理解Java訪問修飾符

    今天帶大家學(xué)習(xí)的是Java的相關(guān)知識(shí),文章圍繞著Java訪問修飾符展開,有非常詳細(xì)的介紹及代碼示例,需要的朋友可以參考下
    2021-06-06
  • Java8實(shí)戰(zhàn)之Stream的延遲計(jì)算

    Java8實(shí)戰(zhàn)之Stream的延遲計(jì)算

    JDK中Stream的中間函數(shù)如 filter(Predicate super T>)是惰性求值的,filter并非對(duì)流中所有元素調(diào)用傳遞給它的Predicate,下面這篇文章主要給大家介紹了關(guān)于Java8實(shí)戰(zhàn)之Stream延遲計(jì)算的相關(guān)資料,需要的朋友可以參考下
    2021-09-09

最新評(píng)論

偃师市| 大宁县| 保定市| 铜鼓县| 南陵县| 馆陶县| 四子王旗| 阳春市| 报价| 温州市| 田林县| 珠海市| 醴陵市| 定南县| 灵石县| 资溪县| 阳城县| 阿克苏市| 烟台市| 新巴尔虎右旗| 太康县| 宝鸡市| 卫辉市| 湘潭县| 平定县| 威信县| 根河市| 瓮安县| 温泉县| 昌黎县| 茂名市| 齐齐哈尔市| 东方市| 红安县| 青田县| 宿州市| 南宁市| 乐安县| 平武县| 宾川县| 长兴县|