• 对图片进行透明化处理-使用java程序


    因需要将一张白色背景图片处理为透明色,因此上网上搜了搜处理方案,可以通过ps,和美图秀秀,但是我电脑上并没有这两个软件,下载安装太耗时。从网上搜了搜发现原来可以使用java代码进行处理,代码如下:

    import java.awt.Graphics2D;
    import java.awt.image.BufferedImage;
    import java.io.File;
    import java.io.IOException;
    
    import javax.imageio.ImageIO;
    import javax.swing.ImageIcon;
    
    
    public class Application {
        public static void main(String[] args) throws IOException {
            BufferedImage image = ImageIO.read(new File("D:\郑州-买房\subway-graph.jpg"));
            // 高度和宽度
            int height = image.getHeight();
            int width = image.getWidth();
    
            // 生产背景透明和内容透明的图片
            ImageIcon imageIcon = new ImageIcon(image);
            BufferedImage bufferedImage = new BufferedImage(width, height, BufferedImage.TYPE_4BYTE_ABGR);
            Graphics2D g2D = (Graphics2D) bufferedImage.getGraphics(); // 获取画笔
            g2D.drawImage(imageIcon.getImage(), 0, 0, null); // 绘制Image的图片
    
            int alpha = 0; // 图片透明度
            // 外层遍历是Y轴的像素
            for (int y = bufferedImage.getMinY(); y < bufferedImage.getHeight(); y++) {
                // 内层遍历是X轴的像素
                for (int x = bufferedImage.getMinX(); x < bufferedImage.getWidth(); x++) {
                    int rgb = bufferedImage.getRGB(x, y);
                    // 对当前颜色判断是否在指定区间内
                    if (colorInRange(rgb)) {
                        alpha = 0;
                    } else {
                        // 设置为不透明
                        alpha = 255;
                    }
                    // #AARRGGBB 最前两位为透明度
                    rgb = (alpha << 24) | (rgb & 0x00ffffff);
                    bufferedImage.setRGB(x, y, rgb);
                }
            }
            // 绘制设置了RGB的新图片
            g2D.drawImage(bufferedImage, 0, 0, null);
    
            // 生成图片为PNG
            ImageIO.write(bufferedImage, "png", new File("D:\郑州-买房\subway-graph2.jpg"));
            System.out.println("完成画图");
        }
    
        // 判断是背景还是内容
        public static boolean colorInRange(int color) {
            int red = (color & 0xff0000) >> 16;// 获取color(RGB)中R位
            int green = (color & 0x00ff00) >> 8;// 获取color(RGB)中G位
            int blue = (color & 0x0000ff);// 获取color(RGB)中B位
            // 通过RGB三分量来判断当前颜色是否在指定的颜色区间内
            if (red >= color_range && green >= color_range && blue >= color_range) {
                return true;
            }
            ;
            return false;
        }
    
        // 色差范围0~255
        public static int color_range = 210;
    }

    代码来自:http://www.cnblogs.com/TheoryDance/p/7094376.html

    处理前后效果对比:

    处理前 处理后
  • 相关阅读:
    用简单C程序分析DOS下的EXE文件【转】
    汇编函数的调用[转自KingofCoders]
    windows下的shellcode剖析浅谈[转自看雪]
    如何写一个简单的病毒程序[转]
    不用注册访问论坛技巧
    函数调用堆栈变化分析[转自看雪]
    IT学生解惑真经(下载)
    Windows 汇编语言编程教程[转]
    ESP定律介绍(转自看雪论坛贴)
    【Anti Virus专题】1.1 病毒的原理 [转自看雪]
  • 原文地址:https://www.cnblogs.com/yy3b2007com/p/10424833.html
Copyright © 2020-2023  润新知