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

Java為圖片添加水印并保存實現(xiàn)方法(附帶源碼)

 更新時間:2025年03月20日 10:07:09   作者:Katie。  
這篇文章主要介紹了如何使用Java編程語言在圖像上添加文字或圖片水印,并提供了一個簡單的Java程序?qū)崿F(xiàn),文中給出了詳細的代碼示例,需要的朋友可以參考下

項目背景

在圖像處理領(lǐng)域,水印是一種常見的保護版權(quán)和標(biāo)識圖片歸屬的方法。水印可以是文字、水印圖片或透明圖層,它通常位于圖片的中央或角落。在很多應(yīng)用中,例如圖片共享、相冊管理等,我們可能需要在圖像上添加水印。

Java提供了強大的圖像處理能力,可以通過Graphics2D類在圖像上繪制水印。本項目的目標(biāo)是實現(xiàn)一個Java程序,能夠?qū)⑽淖只驁D片水印添加到圖像上,并將修改后的圖像保存為文件。

相關(guān)知識

BufferedImage

BufferedImage是Java中用來表示圖像的類,它允許對圖像進行像素級別的操作。圖像可以通過Graphics2D進行繪制、縮放、添加水印等。

Graphics2D

Graphics2DGraphics的一個子類,用于圖形繪制。通過Graphics2D,我們可以在圖像上繪制各種元素,如文本、圖片、形狀等,并控制繪制的透明度、顏色、字體等屬性。

ImageIO

ImageIO類用于從文件讀取圖像,或?qū)D像保存為指定格式的文件(如PNG、JPEG等)。

實現(xiàn)思路

  • 加載圖像:使用ImageIO.read()從文件中加載圖像。
  • 添加水印
    • 文字水印:通過Graphics2DdrawString()方法在圖像上繪制文本。
    • 圖片水印:通過Graphics2DdrawImage()方法將另一張圖片作為水印繪制到目標(biāo)圖像上。
  • 保存圖像:使用ImageIO.write()將修改后的圖像保存為文件。

實現(xiàn)代碼

以下是一個實現(xiàn)為圖片添加文字水印和圖片水印的Java程序:

1. Java代碼:添加水印并保存圖像

import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

public class ImageWatermark {

    public static void main(String[] args) {
        try {
            // 1. 加載圖像
            File inputFile = new File("path/to/your/image.jpg");  // 修改為你的圖片路徑
            BufferedImage image = ImageIO.read(inputFile);

            // 2. 添加文字水印
            String textWatermark = "Sample Watermark";
            BufferedImage textWatermarkedImage = addTextWatermark(image, textWatermark);

            // 3. 添加圖片水印
            File watermarkImageFile = new File("path/to/your/watermark_image.png");  // 修改為水印圖片路徑
            BufferedImage watermarkImage = ImageIO.read(watermarkImageFile);
            BufferedImage finalImage = addImageWatermark(textWatermarkedImage, watermarkImage);

            // 4. 保存添加水印后的圖像
            File outputFile = new File("path/to/save/watermarked_image.png");  // 輸出文件路徑
            ImageIO.write(finalImage, "PNG", outputFile);  // 保存為PNG格式

            System.out.println("Watermark added and image saved successfully!");

        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    // 添加文字水印
    private static BufferedImage addTextWatermark(BufferedImage originalImage, String watermarkText) {
        Graphics2D g2d = (Graphics2D) originalImage.getGraphics();

        // Set font and transparency
        Font font = new Font("Arial", Font.BOLD, 50);
        g2d.setFont(font);
        g2d.setColor(new Color(255, 255, 255, 128));  // 白色且半透明

        // Get the watermark's position (center the watermark on the image)
        FontMetrics fontMetrics = g2d.getFontMetrics();
        int x = (originalImage.getWidth() - fontMetrics.stringWidth(watermarkText)) / 2;
        int y = originalImage.getHeight() / 2;

        // Draw watermark text
        g2d.drawString(watermarkText, x, y);

        // Dispose the graphics context
        g2d.dispose();

        return originalImage;
    }

    // 添加圖片水印
    private static BufferedImage addImageWatermark(BufferedImage originalImage, BufferedImage watermarkImage) {
        Graphics2D g2d = (Graphics2D) originalImage.getGraphics();

        // Get the watermark image's position (bottom-right corner)
        int x = originalImage.getWidth() - watermarkImage.getWidth() - 10;  // 10px margin from the right edge
        int y = originalImage.getHeight() - watermarkImage.getHeight() - 10;  // 10px margin from the bottom edge

        // Draw watermark image with transparency
        g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.5f));  // Set transparency
        g2d.drawImage(watermarkImage, x, y, null);

        // Dispose the graphics context
        g2d.dispose();

        return originalImage;
    }
}

代碼解讀

  • 加載圖像

    • 使用ImageIO.read(inputFile)讀取指定路徑的圖像文件并將其存儲在BufferedImage對象中。
  • 添加文字水印

    • 使用Graphics2D對象的drawString()方法在圖像上繪制文字水印。我們設(shè)置了字體、顏色(白色且?guī)в型该鞫龋┮约拔恢茫ň又校?/li>
    • g2d.setColor(new Color(255, 255, 255, 128))設(shè)置文字的顏色為白色,并帶有128的透明度。
  • 添加圖片水印

    • 使用Graphics2D對象的drawImage()方法將另一個圖像作為水印繪制到目標(biāo)圖像的右下角。
    • 通過AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.5f)設(shè)置透明度,使水印圖片具有50%的透明度。
  • 保存圖像

    • 使用ImageIO.write()方法將添加水印后的圖像保存為PNG格式。
  • 資源管理

    • g2d.dispose()釋放Graphics2D對象占用的資源,防止內(nèi)存泄漏。

常見的水印操作

  • 文字水印

    • 可以調(diào)整字體、顏色、大小、透明度等屬性來控制水印的外觀。字體可以使用Font類設(shè)置,顏色使用Color類設(shè)置。
    • 文字水印的位置可以通過計算圖像的寬度和文字的寬度來確定,使其居中或位于指定位置。
  • 圖片水印

    • 使用drawImage()方法繪制另一張圖像作為水印??梢哉{(diào)整水印的位置、大小、透明度等。
    • 水印圖片的透明度通過AlphaComposite類設(shè)置。
  • 透明度控制

    • 對于圖片水印,透明度的控制是非常重要的。通過設(shè)置AlphaComposite的值,可以讓水印圖片更加隱約,從而不遮蓋原圖的細節(jié)。
  • 水印位置

    • 文字水印的位置可以選擇居中或定位置。圖片水印常見位置有右下角、左下角、右上角等。通過坐標(biāo)計算可以實現(xiàn)靈活定位。

項目總結(jié)

通過本項目,我們實現(xiàn)了一個簡單的Java程序,能夠在圖像上添加文字水印和圖片水印。使用Graphics2D類,我們可以靈活地控制水印的外觀,包括位置、透明度、顏色等,并通過ImageIO.write()保存修改后的圖像。

優(yōu)化方向

  • 自定義水印樣式:可以為文字水印提供更多的自定義選項,比如字體、大小、顏色、透明度等。
  • 批量水印添加:可以擴展程序,支持批量處理多個圖像文件,并添加統(tǒng)一的水印。
  • 圖形界面:可以為程序添加圖形界面,允許用戶通過界面選擇水印類型(文字或圖片)、位置、透明度等參數(shù)。

通過這個項目,您可以掌握如何使用Java進行圖像水印的處理,適用于版權(quán)保護、品牌宣傳、圖片批量處理等場景。

到此這篇關(guān)于Java為圖片添加水印并保存實現(xiàn)方法的文章就介紹到這了,更多相關(guān)Java為圖片添加水印并保存內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java Yml格式轉(zhuǎn)換為Properties問題

    Java Yml格式轉(zhuǎn)換為Properties問題

    本文介紹了作者編寫一個Java工具類來解決在線YAML到Properties轉(zhuǎn)換時屬性內(nèi)容遺漏的問題,通過遍歷YAML文件的樹結(jié)構(gòu),作者成功實現(xiàn)了屬性的完整轉(zhuǎn)換,總結(jié)指出,該工具類適用于多種數(shù)據(jù)類型,并且代碼簡潔易懂
    2024-12-12
  • 23種設(shè)計模式(4) java生成器模式

    23種設(shè)計模式(4) java生成器模式

    這篇文章主要為大家詳細介紹了23種設(shè)計模式之java生成器模式,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-11-11
  • SpringBoot項目創(chuàng)建使用+配置文件+日志文件詳解

    SpringBoot項目創(chuàng)建使用+配置文件+日志文件詳解

    Spring的出現(xiàn)是為了簡化 Java 程序開發(fā),而 SpringBoot 的出現(xiàn)是為了簡化 Spring 程序開發(fā),這篇文章主要介紹了SpringBoot項目創(chuàng)建使用+配置文件+日志文件,需要的朋友可以參考下
    2023-02-02
  • Spring?Boot3?跨域配置?Cors的方式

    Spring?Boot3?跨域配置?Cors的方式

    這篇文章主要介紹了Spring?Boot3?跨域配置?Cors,通過使用CORS,開發(fā)人員可以控制哪些外部網(wǎng)頁可以訪問他們的資源,從而提高應(yīng)用程序的安全性,本文結(jié)合實例代碼給大家介紹的非常詳細,需要的朋友可以參考下
    2024-01-01
  • 如何去掉IntelliJ IDEA中mybatis對應(yīng)的xml文件警告

    如何去掉IntelliJ IDEA中mybatis對應(yīng)的xml文件警告

    這篇文章主要介紹了如何去掉IntelliJ IDEA中mybatis對應(yīng)的xml文件警告問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • Mybatis官方生成器的使用方式

    Mybatis官方生成器的使用方式

    本文詳細介紹了MyBatisGenerator(MBG)的使用方法,通過實際代碼示例展示了如何配置Maven插件來自動化生成MyBatis項目所需的實體類、Mapper接口和MapperXML文件,MBG通過配置文件和Maven插件,可以大大減少開發(fā)人員在進行CRUD操作時的重復(fù)工作,提升開發(fā)效率和代碼一致性
    2025-01-01
  • 詳解Java 連接MongoDB集群的幾種方式

    詳解Java 連接MongoDB集群的幾種方式

    這篇文章主要介紹了詳解Java 連接MongoDB集群的幾種方式,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-12-12
  • 使用MyBatis攔截器實現(xiàn)SQL的完整打印

    使用MyBatis攔截器實現(xiàn)SQL的完整打印

    當(dāng)我們使用Mybatis結(jié)合Mybatis-plus進行開發(fā)時,為了查看執(zhí)行sql的信息通常我們可以通過屬性配置的方式打印出執(zhí)行的sql語句,但這樣的打印出了sql語句常帶有占位符信息,不利于排錯,所以本文介紹了構(gòu)建MyBatis攔截器,實現(xiàn)SQL的完整打印,需要的朋友可以參考下
    2024-07-07
  • java實現(xiàn)線上環(huán)境遠程debug調(diào)試過程

    java實現(xiàn)線上環(huán)境遠程debug調(diào)試過程

    本文介紹了在Docker容器中配置Tomcat和Spring Boot進行遠程調(diào)試的方法,通過配置`CATALINA_OPTS`或`JPDA`參數(shù),可以在測試環(huán)境中啟動Tomcat或Spring Boot應(yīng)用的debug模式,然后在本地IDEA中設(shè)置斷點進行調(diào)試,從而更高效地定位和解決問題
    2025-02-02
  • 用Java8 stream處理數(shù)據(jù)

    用Java8 stream處理數(shù)據(jù)

    這篇文章主要介紹了用Java8 stream處理數(shù)據(jù),Java 8 API的設(shè)計者重新提出了一個新的抽象稱為流Stream,可以讓我們以一種聲明的方式處理數(shù)據(jù),此外,數(shù)據(jù)流可以充分利用多核架構(gòu)而無需編寫多線程的一行代碼,下面我們一起來看看文章詳細介紹
    2021-11-11

最新評論