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

Java?生成透明圖片的設(shè)置實現(xiàn)demo

 更新時間:2023年02月08日 09:41:47   作者:IT小馬哥  
這篇文章主要為大家介紹了Java?生成透明圖片的設(shè)置實現(xiàn)demo,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

設(shè)置圖片透明

import org.apache.commons.io.FilenameUtils;
import org.apache.commons.io.IOUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.imageio.ImageIO;
import javax.imageio.stream.ImageOutputStream;
import javax.swing.\*;
import java.awt.\*;
import java.awt.font.FontRenderContext;
import java.awt.geom.AffineTransform;
import java.awt.geom.Rectangle2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
/\*\*
 \* 圖片處理工具類
 \*
 \* @author maruifu
 \*/
public class ImageUtils1 {
    private static final Logger log = LoggerFactory.getLogger(ImageUtils.class);
    public static void main(String[] args) {
        String text = "我是小馬哥";
        String filePath = "/Users/maruifu/Desktop/1.png";
        //生成指定文字透明圖片
        createImage(text,filePath,"宋體",45);
        //設(shè)置指定圖片透明
        //setColorInRange(path,path);
    }
    /\*\*
     \* 動態(tài)獲取文字寬高
     \* @param text 文字
     \* @param font 字體
     \* @return
     \*/
    private static int[] getWidthAndHeight(String text, Font font) {
        Rectangle2D r = font.getStringBounds(text, new FontRenderContext(
                AffineTransform.getScaleInstance(1, 1), false, false));
        int unitHeight = (int) Math.floor(r.getHeight());
        // 獲取整個str用了font樣式的寬度這里用四舍五入后+1保證寬度絕對能容納這個字符串作為圖片的寬度
        int width = (int) Math.round(r.getWidth()) + 1;
        // 把單個字符的高度+3保證高度絕對能容納字符串作為圖片的高度
        int height = unitHeight + 3;
        return new int[]{width, height};
    }
    /\*\*
     \* 生成指定文字透明圖片
     \* @param text 文字內(nèi)容 "我是小馬哥"
     \* @param filePath 生成地址 "/Users/maruifu/Desktop/123.png"
     \* @param fontName 字體名稱 "宋體"
     \* @param fontSize 字體大小 45
     \*/
    public static void createImage(String text, String filePath,String fontName,int fontSize)  {
        ImageOutputStream imageOutputStream = null;
        try {
            Font font = new Font(fontName, Font.BOLD,fontSize);
            // 獲取font的樣式應(yīng)用在輸出內(nèi)容上整個的寬高
            int[] arr = getWidthAndHeight(text, font);
            // 設(shè)置背景寬高
            int width = arr[0];
            int height = arr[1];
            BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE\_4BYTE\_ABGR);
            // 獲取圖形上下文對象
            Graphics2D graphics = (Graphics2D)image.getGraphics();
            graphics.clearRect(0, 0, width, height);
            // 填充
            graphics.fillRect(0, 0, width, height);
            // 設(shè)定字體大小及樣式
            graphics.setFont(font);
            // 字體顏色
            graphics.setColor(Color.BLACK);
            // 描繪字符串
            graphics.drawString(text, 0,   font.getSize());
            // 圖片透明度
            setTransparency(image, graphics);
            File jpgFile = new File(filePath);
            if(!jpgFile.exists()) {
                jpgFile.createNewFile();
            }
            // 創(chuàng)建圖片輸出流對象,基于文件對象
            imageOutputStream = ImageIO.createImageOutputStream(jpgFile);
            // 寫入
            ImageIO.write(image, FilenameUtils.getExtension(filePath),imageOutputStream);
        } catch (IOException e) {
            log.error("生成圖片失敗{}",e);
        } finally {
            // 關(guān)閉流
            IOUtils.closeQuietly(imageOutputStream);
        }
    }
    private static void setTransparency(BufferedImage image, Graphics2D graphics) {
        int alpha = 0;
        // 外層遍歷是Y軸的像素
        for (int y = image.getMinY(); y < image.getHeight(); y++) {
            // 內(nèi)層遍歷是X軸的像素
            for (int x = image.getMinX(); x < image.getWidth(); x++) {
                int rgb = image.getRGB(x, y);
                // 對當前顏色判斷是否在指定區(qū)間內(nèi)
                if (colorInRange(rgb)) {
                    alpha = 0;
                } else {
                    // 設(shè)置為不透明
                    alpha = 255;
                }
                // #AARRGGBB 最前兩位為透明度
                rgb = (alpha << 24) | (rgb & 0x00ffffff);
                image.setRGB(x, y, rgb);
            }
        }
        // 繪制設(shè)置了RGB的新圖片
        graphics.drawImage(image, 0, 0, null);
        //釋放畫筆
        graphics.dispose();
    }
    /\*\*
     \* 設(shè)置指定圖片透明
     \* @param sourcePath 源文件地址
     \* @param targetPath 新文件地址
     \*/
    public static void setColorInRange(String sourcePath,String targetPath ) {
        try {
            BufferedImage image = ImageIO.read(new File(sourcePath));
            // 高度和寬度
            int height = image.getHeight();
            int width = image.getWidth();
            // 生產(chǎn)背景透明和內(nèi)容透明的圖片
            ImageIcon imageIcon = new ImageIcon(image);
            BufferedImage bufferedImage = new BufferedImage(width, height, BufferedImage.TYPE\_4BYTE\_ABGR);
            // 獲取畫筆
            Graphics2D g2D = (Graphics2D) bufferedImage.getGraphics();
            // 繪制Image的圖片
            g2D.drawImage(imageIcon.getImage(), 0, 0, null);
            // 圖片透明
            setTransparency(bufferedImage, g2D);
            // 生成圖片為PNG
            ImageIO.write(bufferedImage, FilenameUtils.getExtension(sourcePath), new File(targetPath));
        } catch (IOException e) {
            log.error("設(shè)置圖片透明失敗{}",e);
        }
    }
    /\*\*
     \* 判斷是背景還是內(nèi)容
     \* @param color
     \* @return
     \*/
    public static boolean colorInRange(int color) {
        // 色差范圍0~255
        int colorRange = 210;
        // 獲取color(RGB)中R位
        int red = (color & 0xff0000) >> 16;
        // 獲取color(RGB)中G位
        int green = (color & 0x00ff00) >> 8;
        // 獲取color(RGB)中B位
        int blue = (color & 0x0000ff);
        // 通過RGB三分量來判斷當前顏色是否在指定的顏色區(qū)間內(nèi)
        if (red >= colorRange && green >= colorRange && blue >= colorRange) {
            return true;
        }
        return false;
    }

以上就是Java 生成透明圖片設(shè)置及實現(xiàn)示例,更多關(guān)于Java 生成透明圖片的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • java實現(xiàn)簡單發(fā)送郵件功能

    java實現(xiàn)簡單發(fā)送郵件功能

    這篇文章主要為大家詳細介紹了java實現(xiàn)簡單發(fā)送郵件功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • idea開啟mybatis控制臺SQL日志打印的代碼示例

    idea開啟mybatis控制臺SQL日志打印的代碼示例

    本文主要介紹了idea開啟mybatis控制臺SQL日志打印的方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-12-12
  • 詳解SpringMVC的兩種實現(xiàn)方式

    詳解SpringMVC的兩種實現(xiàn)方式

    這篇文章主要介紹了SpringMVC的兩種實現(xiàn)方式,方式一是通過實現(xiàn)Controller接口,方式二是使用注解開發(fā),本文結(jié)合示例代碼給大家介紹的非常詳細,需要的朋友可以參考下
    2022-10-10
  • Java實現(xiàn)數(shù)據(jù)脫敏的方法詳細講解

    Java實現(xiàn)數(shù)據(jù)脫敏的方法詳細講解

    這篇文章主要給大家介紹了關(guān)于Java實現(xiàn)數(shù)據(jù)脫敏的相關(guān)資料,數(shù)據(jù)脫敏是指對某些敏感信息通過脫敏規(guī)則進行數(shù)據(jù)的變形,實現(xiàn)敏感隱私數(shù)據(jù)的可靠保護,需要的朋友可以參考下
    2023-06-06
  • github上的java項目怎么運行(面向小白)

    github上的java項目怎么運行(面向小白)

    這篇文章主要介紹了github上的java項目怎么運行(面向小白),今天從github把我以前寫的一個小demo下載下來了,第一次下載項目,摸索了一個多小時,才運行起來,需要的朋友可以參考下
    2019-06-06
  • Java之Mybatis的二級緩存

    Java之Mybatis的二級緩存

    本文主要介紹Java中Mybatis的二級緩存,緩存就是一塊內(nèi)存空間,保存臨時數(shù)據(jù),它是SqlSessionFactory的緩存,對Mybaits感興趣的小伙伴可以參考閱讀
    2023-03-03
  • spring?boot項目中集成rocketmq詳細步驟

    spring?boot項目中集成rocketmq詳細步驟

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

    SpringBoot簡單實現(xiàn)文件上傳

    這篇文章主要介紹了SpringBoot簡單實現(xiàn)文件上傳,文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,感興趣的小伙伴可以參考一下
    2022-09-09
  • MyBatisPlus代碼生成器的使用示例

    MyBatisPlus代碼生成器的使用示例

    本文主要介紹了MyBatisPlus代碼生成器的使用示例,通過 AutoGenerator 可以快速生成 Entity、Mapper、Mapper XML、Service、Controller 等各個模塊的代碼,感興趣的可以了解一下
    2021-12-12
  • Java設(shè)計模式之中介模式(Mediator模式)介紹

    Java設(shè)計模式之中介模式(Mediator模式)介紹

    這篇文章主要介紹了Java設(shè)計模式之中介模式(Mediator模式)介紹,本文講解了為何使用Mediator模式、如何使用中介模式等內(nèi)容,需要的朋友可以參考下
    2015-03-03

最新評論

开远市| 铜陵市| 上犹县| 皮山县| 上栗县| 成武县| 孟州市| 叶城县| 辛集市| 来安县| 锦州市| 东台市| 宝山区| 金华市| 仙游县| 抚松县| 建平县| 平乡县| 榆林市| 玛曲县| 清水县| 南溪县| 武义县| 鄂托克旗| 乌海市| 尚义县| 治多县| 醴陵市| 宿州市| 莎车县| 桑植县| 石狮市| 宁陕县| 信宜市| 黄大仙区| 安义县| 嵩明县| 封丘县| 卓尼县| 安达市| 周口市|