zoukankan      html  css  js  c++  java
  • 怎样将蓝底照片换成白底

    方法:美图秀秀 + java程序。

    原来的照片是这样的:

    1. 先用美图秀秀将面积较大的蓝底以及边缘比较光滑的部分先刷成白色,或者抠出来都行。

     2. 用java程序将边缘部分的蓝色调替换成白色,代码如下:

    import java.awt.image.BufferedImage;
    import java.io.File;
    import java.io.FileOutputStream;
    
    import javax.imageio.ImageIO;
    
    public class ImageProcessor {
        public static void main(String[] args) throws Exception {
            File file = new File("xxx.jpg"); //要处理的图片路径
            
            //定义一个RGB的数组,因为图片的RGB模式是由三个 0-255来表示的 比如白色就是(255,255,255)
            int[] rgb = new int[3]; 
            
            BufferedImage bi = null; //用来处理图片的缓冲流
            try {
                bi = ImageIO.read(file); //用ImageIO将图片读入到缓冲中
            } catch (Exception e) {
                e.printStackTrace();
            }
            
            //得到图片的长宽
            int width = bi.getWidth();
            int height = bi.getHeight();
            
            /**
             * 以下是遍历图片的像素,把指定区域内的像素的颜色换成目标颜色
             */
            
            //指定每个区域的范围(x:beginX~endX, y:beginY~endY 围起来的区域)
            int[] beginX = new int[]{230, 230, 1050};
            int[] endX = new int[]{1130, 325, 1130};
            int[] beginY = new int[]{0, 400, 400};
            int[] endY = new int[]{400, 655, 685};
            
            for (int k = 0; k < beginX.length; k++) {
                for (int i = beginX[k]; i < endX[k]; i++) {
                    for (int j = beginY[k]; j < endY[k]; j++) {
                        //得到指定像素(i,j)上的RGB值
                        int pixel = bi.getRGB(i, j);
                        
                        //分别进行位操作得到 r g b上的值
                        rgb[0] = (pixel & 0xff0000) >> 16;
                        rgb[1] = (pixel & 0xff00) >> 8;
                        rgb[2] = (pixel & 0xff);
    
                        //进行换色操作,我这里是要把蓝底换成白底,那么就判断图片中rgb值是否在蓝色范围的像素
                        if (rgb[0] < 155 && rgb[0] > 0 && rgb[1] < 256 && rgb[1] > 105 && rgb[2] < 256 && rgb[2] > 105) {
                            bi.setRGB(i, j, 0xffffff); //是则把该像素换成白色
                        }
    
                    }
                }
            }
            
            System.out.println(file.getName() + "处理完毕!");
            
            /**
             * 将缓冲对象保存到新文件中
             */
            FileOutputStream ops = new FileOutputStream(new File("xxx.jpg")); //生成的新图片路径
            ImageIO.write(bi, "jpg", ops);
            ops.flush();
            ops.close();
        }
    }

    处理后:

    3. 再用美图秀秀把周围未去除的蓝色部分刷成白色。

    4. 这样基本上就完成了,如果不满意,还可以用美图秀秀中的“局部变色笔”,用黑色在头发边缘处刷一刷。

    大功告成!!!!

  • 相关阅读:
    ubuntu如何设置Python的版本
    PHP队列之理论篇
    ubuntu系統如何啟動root用戶登陸?
    如何绑定腾讯企业邮箱?
    VMware虚拟机安装Ubuntu并设置root登陆
    毕业生,如何选择高薪资与学习机会?
    如何改变memcached默认的缓存时间?
    PHP常用函数之数组篇
    如何安装并使用bower包依赖工具
    z-score
  • 原文地址:https://www.cnblogs.com/strugglion/p/7076943.html
Copyright © 2011-2022 走看看