Java圖片寫文字

public void addWaterMarkByResource(String resourcePath, String tarImgPath, String waterMarkContent, Color markContentColor, Font font,int x,int y)
    {
        try {

            System.out.println("addWaterMarkByResource");
            // 讀取原圖片信息
           var imageStream =  this.getClass().getResourceAsStream(resourcePath);
            Image srcImg = ImageIO.read(imageStream);//文件轉化爲圖片
            System.out.println("讀取原圖成功");
            addWaterMark(srcImg,tarImgPath,waterMarkContent,markContentColor,font,x,y);

        } catch (Exception e) {
            // TODO: handle exception
            System.out.println("addWaterMarkByResource error:"+e.getLocalizedMessage());
        }

    }

    /**
     * @param srcImgPath 源圖片路徑
     * @param tarImgPath 保存的圖片路徑
     * @param waterMarkContent 水印內容
     * @param markContentColor 水印顏色
     * @param font 水印字體
     */
    public void addWaterMark(String srcImgPath, String tarImgPath, String waterMarkContent, Color markContentColor, Font font,int x,int y) {

        try {
            // 讀取原圖片信息
            //this.getClass().getResourceAsStream("")
            File srcImgFile = new File(srcImgPath);//得到文件
            Image srcImg = ImageIO.read(srcImgFile);//文件轉化爲圖片
            addWaterMark(srcImg,tarImgPath,waterMarkContent,markContentColor,font, x, y);

        } catch (Exception e) {
            // TODO: handle exception
            System.out.println("addWaterMark1 error:"+e.getLocalizedMessage());
        }
    }

    public  void addWaterMark(Image srcImg,String tarImgPath, String waterMarkContent, Color markContentColor, Font font,int x,int y)
    {
        try
        {
            System.out.println("addWaterMark111111111111");
            if(srcImg==null)
            {
                System.out.println("addWaterMark srcImg is null");
            }
            int srcImgWidth = srcImg.getWidth(null);//獲取圖片的寬
            int srcImgHeight = srcImg.getHeight(null);//獲取圖片的高

            // 加水印
            BufferedImage bufImg = new BufferedImage(srcImgWidth, srcImgHeight, BufferedImage.TYPE_INT_RGB);
            Graphics2D g = bufImg.createGraphics();

            // 設置圖片背景色是透明的,否則生成的圖片可能會出現黑邊
            bufImg = g.getDeviceConfiguration().createCompatibleImage(srcImgWidth,srcImgHeight,Transparency.TRANSLUCENT);
            g.dispose();
            g = bufImg.createGraphics();
            //-------

            g.drawImage(srcImg, 0, 0, srcImgWidth, srcImgHeight, null);
            g.setColor(markContentColor); //根據圖片的背景設置水印顏色
            g.setFont(font);              //設置字體

            // 使文字顯示更清晰,否則文字可能模糊
g.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,RenderingHints.VALUE_TEXT_ANTIALIAS_LCD_HRGB);
            System.out.println("setfont22222222");
            //設置水印的座標
            //int x = srcImgWidth - 2*getWatermarkLength(waterMarkContent, g);
            //int y = srcImgHeight - 2*getWatermarkLength(waterMarkContent, g);
            if(x==-1)
            {

                x = (srcImgWidth - getWatermarkLength(waterMarkContent, g))/2;

            }
            if(y==-1)
            {

                y = (srcImgHeight - getWatermarkHeight(waterMarkContent,g))/2;

            }
            g.drawString(waterMarkContent, x, y);  //畫出水印
            g.dispose();

            System.out.println("tarImgPath:"+tarImgPath);
            int c = tarImgPath.lastIndexOf("/");
            var path = tarImgPath.substring(0,c+1);
            System.out.println("temppath:"+path);
            File imgFile=new File(path);
            if (!imgFile.exists()){
                System.out.println("addWaterMark 創建文件夾");
                imgFile.mkdirs();
            }

            // 輸出圖片
            FileOutputStream outImgStream = new FileOutputStream(tarImgPath);
            ImageIO.write(bufImg, "png", outImgStream);
            System.out.println("添加水印完成");
            outImgStream.flush();
            outImgStream.close();

    } catch (Exception e) {
        // TODO: handle exception
            System.out.println("addWaterMark2 error:"+e.getLocalizedMessage());
    }

}

    public int getWatermarkLength(String waterMarkContent, Graphics2D g) {
        return g.getFontMetrics(g.getFont()).charsWidth(waterMarkContent.toCharArray(), 0, waterMarkContent.length());
    }

    public int getWatermarkHeight(String waterMarkContent, Graphics2D g)
    {
        int p = g.getFontMetrics(g.getFont()).getHeight();
        return p;
    }

參考資料
用Java實現給圖片添加文字

解決java壓縮圖片透明背景變黑色的問題
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章