java将图片至暗的实现方法

之前也写过一个代码给一张图片然后把图片变暗,今天我们换一种思路,或者是是另外的一种方式将图片至暗,当然方法也是很简单的,但是对于菜鸟的我在这个地方停留了一天半的时间,将图片至暗

现在我们要将这样的一张图片

java将图片至暗的实现方法

变成为

java将图片至暗的实现方法

虽然说变暗之后确实没有之间亮的好看,但是不管了,反正那么漂亮的美女和我的关系我不太大,如果说硬是有关系的话,那应该是在梦中了,好了我们直接上代码

package com.epoint.wdg.test; 

import java.awt.Color;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException; 

import javax.imageio.ImageIO; 

public class ImgTest {
  public static void main(String[] args) throws IOException {
    File file=new File("C://Users/wdg/Desktop/people.png");
    //showParamterofImg(file);
    File file2=changeImgtoGray(file);
    grayPicToBW(file2);
  }
  public static void getRGB(File file) throws IOException{
    int []rgb =new int[3];
    BufferedImage img=ImageIO.read(file);
    int pixel=img.getRGB(2, 3);
    // 下面三行代码将一个数字转换为RGB数字
    rgb[0] = (pixel & 0xff0000) >> 16;
    rgb[1] = (pixel & 0xff00) >> 8;
    rgb[2] = (pixel & 0xff);
    System.out.println(rgb[0]+"-"+rgb[1]+"-"+rgb[2]); 

  }
  //把图片变灰色
  public static File changeImgtoGray(File file) throws IOException{
    float []rgb =new float[3];
    BufferedImage img=ImageIO.read(file);
    //现在我需要获取到没一点的rgb
    int y=img.getHeight();
    int x=img.getWidth();
    BufferedImage grayImage = new BufferedImage(x, y, BufferedImage.TYPE_BYTE_GRAY);
    for(int i=0;i<x;i++){
      for(int j=0;j<y;j++){
        int pixel=img.getRGB(i, j);
      // grayImage.setRGB(startX, startY, w, h, rgbArray, offset, scansize);
         rgb[0] = (pixel & 0xff0000) >> 16;
         rgb[1] = (pixel & 0xff00) >> 8;
         rgb[2] = (pixel & 0xff);
        int gray=(int) (rgb[0] * 0.3 + rgb[1] * 0.59 + rgb[2] * 0.11);
         Color color=new Color(gray,gray,gray);
         img.setRGB(i, j, color.getRGB()); 

      }
    }
    File newFile = new File("C://Users/wdg/Desktop/"+"/method5.jpg");
    ImageIO.write(img, "jpg", newFile);
    // grayPicToBW(newFile);
    return newFile;
  } 

其中最为重要的是这一部分:

int y=img.getHeight();
int x=img.getWidth(); 

for(int i=0;i<x;i++){
  for(int j=0;j<y;j++){
    int pixel=img.getRGB(i, j);
     rgb[0] = (pixel & 0xff0000) >> 16;
     rgb[1] = (pixel & 0xff00) >> 8;
     rgb[2] = (pixel & 0xff);
    int gray=(int) (rgb[0] * 0.3 + rgb[1] * 0.59 + rgb[2] * 0.11);
     Color color=new Color(gray,gray,gray);
     img.setRGB(i, j, color.getRGB()); 

  }
}
  File newFile = new File("C://Users/wdg/Desktop/"+"/method5.jpg");
  ImageIO.write(img, "jpg", newFile);  

这一部分是获取到到图片的每一点的像素或者说ARGB:

int pixel=img.getRGB(i, j); 

然后进一步的获取到RGB,然后我们获取到这点像素的灰度值,

int gray=(int) (rgb[0] * 0.3 + rgb[1] * 0.59 + rgb[2] * 0.11); 

并且创建一个颜色:

lor color=new Color(gray,gray,gray); 

img.setRGB(i, j, color.getRGB());

这样我们将图片打印出来就是我们第二张图片那样了

以上这篇java将图片至暗的实现方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

时间: 2017-05-30

Java实现图片对比功能

之前用按键精灵写过一些游戏辅助,里面有个函数叫FindPic,就上在屏幕范围查找给定的一张图片,返回查找到的坐标位置. 现在,Java来实现这个函数类似的功能. 算法描述: 屏幕截图,得到图A,(查找的目标图片为图B): 遍历图A的像素点,根据图B的尺寸,得到图B四个角映射到图A上的四个点: 得到的四个点与图B的四个角像素点的值比较.如果四个点一样,执行步骤4:否则,回到步骤2继续: 进一步对比,将映射范围内的全部点与图B全部的点比较.如果全部一样,则说明图片已找到:否则,回到步骤2继续: 这里

JAVA比较两张图片相似度的方法

本文实例讲述了JAVA比较两张图片相似度的方法.分享给大家供大家参考.具体如下: 摘要: importjava.awt.image.BufferedImage; importjava.io.File; importjavax.imageio.ImageIO; /***比较两张图片的相似度*@authorGuihua**/publicclassBMPLoader{//改变成二进制码 publicstaticString[][]getPX(Stringargs){int[]rgb=newint[3]

Java保留两位小数的实现方法

 Java保留两位小数的实现方法 采用四舍五入的方式 : 该方式来自网络 import java.math.BigDecimal; import java.text.DecimalFormat; import java.text.NumberFormat; public class format { double f = 111231.5585; public void m1() { BigDecimal bg = new BigDecimal(f); double f1 = bg.setSca

Java 交换两个变量的数值实现方法

一.参数传递方法 为解决标题问题,首先介绍参数传递方法.目前各类程序设计语言的参数传递方法主要有三种: 1.按值传递 2.按引用传递 3.按指针传递 其中按值传递表示方法(函数)接收的是调用者提供的变量的拷贝,不改变参数的值:按引用传递表示方法(函数)接收的调用者提供的变量地址:按指针传递表示方法(函数)接收的是调用者提供的指针的拷贝,不改变指针的值和地址,但可以改变指针所指向的地址. 二.Java参数传递方法 Java提供的参数传递方法,很遗憾只有一种,按值传递.也就是说,方法得到的是所有参数

Python比较两个图片相似度的方法

本文实例讲述了Python比较两个图片相似度的方法.分享给大家供大家参考.具体分析如下: 这段代码实用pil模块比较两个图片的相似度,根据实际实用,代码虽短但效果不错,还是非常靠谱的,前提是图片要大一些,太小的图片不好比较.附件提供完整测试代码和对比用的图片. 复制代码 代码如下: #!/usr/bin/python # Filename: histsimilar.py # -*- coding: utf-8 -*- import Image def make_regalur_image(img

java实现两台服务器间文件复制的方法

本文实例讲述了java实现两台服务器间文件复制的方法.分享给大家供大家参考.具体分析如下: 通常我们使用最多的文件复制功能就是同服务器之间的文件复制功能,这里介绍的是在普通文件复制上功能升级,可以实现两台服务器实现文件的复制,下面一起来看看代码. 1.服务器端 复制代码 代码如下: package sterning; import java.io.BufferedInputStream; import java.io.DataInputStream; import java.io.DataOut

java 交换两个数据的方法实例详解

java 交换两个数据的方法 1:利用数组,即先把要交换的数字放在数组中 ,比如在一些数组排序中可能用到 public static void swap2(int[] arr,int a,int b){ int temp =arr[a]; arr[a] = arr[b]; arr[b] = temp; } 2:通过创建对象,这样就把两个整数的值 引入到了 对象中 可以实现 两个整数的交换.当然 ,若要其他基本数据类型只需要更改一下A中的类型即可. public static void swap(

python实现基于两张图片生成圆角图标效果的方法

本文实例讲述了python实现基于两张图片生成圆角图标效果的方法.分享给大家供大家参考.具体分析如下: 使用pil的蒙版功能,将原图片和圆角图片进行叠加,并将圆角图片作为mask,生成新的圆角图片 from PIL import Image flower = Image.open('flower.png') border = Image.open('border.png') source = border.convert('RGB') flower.paste(source, mask=bord

java获取两个数组中不同数据的方法

本文实例讲述了java获取两个数组中不同数据的方法.分享给大家供大家参考.具体实现方法如下: public static <T> List<T> compare(T[] t1, T[] t2) { List<T> list1 = Arrays.asList(t1); List<T> list2 = new ArrayList<T>(); for (T t : t2) { if (!list1.contains(t)) { list2.add(t)

Java判断两个日期相差天数的方法

本文实例讲述了Java判断两个日期相差天数的方法.分享给大家供大家参考.具体如下: import java.util.Calendar; public class DateDifferent{ public static void main(String[] args){ Calendar calendar1 = Calendar.getInstance(); Calendar calendar2 = Calendar.getInstance(); calendar1.set(2007, 01,

java计算两个时间相差天数的方法汇总

问题描述: 输入:两个日期 输出:两个日期相差的天数 具体代码实现 方法1: 通过Calendar类的日期比较.注意:这里需要考虑一下: 日期是跨年份的,如一个是2012年,一个是2015年的 年份是分闰年和平年的,各自的天数不同 /** * date2比date1多的天数 * @param date1 * @param date2 * @return */ public static int differentDays(Date date1,Date date2) { Calendar cal