怎样将蓝底照片换成白底

方法:美图秀秀 + 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. 这样基本上就完成了,如果不满意,还可以用美图秀秀中的“局部变色笔”,用黑色在头发边缘处刷一刷。

大功告成!!!!

时间: 2024-10-13 11:21:13

怎样将蓝底照片换成白底的相关文章

白底黑字!Android浅色状态栏黑色字体模式(另)

小彬什么都想做任重致远 关注 2016.06.30 10:16* 字数 489 阅读 3234评论 3喜欢 12 前言 由于该死不死的设计湿,设计了一套白色状态栏的UI.当然在iOS上可以实现自适应,但是安卓上比较麻烦,所以一直没有搞.最近看到一篇文章<白底黑字!Android浅色状态栏黑色字体模式>里面提及到解决办法,才豁然开朗. MIUI 8.0截图 Screenshot_2016-06-30-09-39-51-101_com.linkit.lan.png 懒得打字,引用原作者的话 在An

html 转字符串换成代码

1. [文件] htmlToCode.html <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http

如何用PS把数码拍摄的荷花照片制作成中国风的效果

今天小编教大家把数码拍摄的荷花照片制作成中国风的效果,整个教程虽然简单,但是效果还真的不错,其实这类教程素材是不限的,我们教程里用到了荷花的照片,制作出来比较符合中国风的感觉,同学们可以拓展一下,看看换个素材,人物或者动物,说不定效果也很棒. 首先我们先将一张荷花的图片导入到ps中,ctrl+J复制一层,利用魔棒工具把白色的背景选中,按delete删除.接着将它转换为智能对象. 选中这个图层之后找到滤镜-camera raw 滤镜调整里面的参数,具体参数如下 接着把卷轴的素材放置到画布中,把刚才

delphi 怎么将一个文件流转换成字符串(String到流,String到文件,相互转化)

//from   http://kingron.myetang.com/zsfunc0d.htm (*//   标题:充分利用pascal字符串类型   说明:和PChar不同,string可以保存#0字符在其中;示例文件.内存流字符串之间转换   设计:Zswang   日期:2002-01-25   支持:[email protected]   //*) ///////Begin   Source   function   StringToFile(mString:   string;  

将 Photoshop CC 2015.5 英文界面换成中文, 英文与中文界面互换

注:转载或引用请注明出处 在英文的win server 2012 r2 上安装PS CC 2015.5 时,安装程序自动按成了英文版的PS,那么如何将英文换成中文呢? 网上大多将的是将中文换成英文,经过尝试后,发现了将英文换成中文的方法如下: 0. 先关闭PS 1. 下载zh_CN的语言包,我共享如下: http://pan.baidu.com/s/1pK9n4U3 注意,此处的语言包对应PS版本为: 2. 在将安装路径中:Adobe\Adobe Photoshop CC 2015.5\AMT\

php 把数字1-1亿换成汉字表述,例如 150 转成 一百五十

直接上实例 写到 千亿上了. /** * @author  ja颂  * 把数字1-1亿换成汉字表述,如:123->一百二十三 * @param [num] $num [数字] * @return [string] [string] */function numToWord($num){ $chiNum = array('零', '一', '二', '三', '四', '五', '六', '七', '八', '九'); $chiUni = array('','十', '百', '千', '万',

终于忍不了xfce的界面,换成kde吧,超极酷!相信每个人都会爱上它的!

开始之前先BB一段无关紧要的缘由. 之前因为自己的笔记本和实验室的台式电脑配置都奇差,所以装的都是xfce,资源占用比较小嘛(就这样都经常卡)... 如今鸟枪换成机关枪,新电脑是G3258的CPU,低端之王吧,用来跑Linux和写程序,顺便日常上网看电影使用还是够的.主要看中了它功率低,还能超频,又是奔腾20周年纪念款,算是值得吧. 昨天给新电脑装完系统,还是用的xfce+lightdm的组合,本想奢侈一把,装个cairo-dock,比xfce自带的panel要好看那么一丢丢.结果发现cairo

oracle 的 sqldeveloper换成英文界面

在软件D:\sqldeveloper\ide\bin目录下找到ide.conf添加 AddVMOption -Duser.language=en AddVMOption -Duser.country=US oracle 的 sqldeveloper换成英文界面,布布扣,bubuko.com

流转换成字符串

public class StreamUtil { /** * 流转换成字符串 * @param is 流对象 * @return 流转换成的字符串 返回null代表异常 */ public static String streamToString(InputStream is) { //1,在读取的过程中,将读取的内容存储值缓存中,然后一次性的转换成字符串返回 ByteArrayOutputStream bos = new ByteArrayOutputStream(); //2,读流操作,读