图片转字符画&图片转灰度图

import java.awt.image.BufferedImage;
import java.io.BufferedOutputStream;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.awt.Color;

import javax.imageio.ImageIO;

/* 
* @author zzf 
* @date 2019年1月14日 下午3:53:47 
*/
public class ImageDemo {
	public static void main(String[] args) throws IOException {
		final String base = "龓鑫森我爱朋你可友中五么小三二一 ";// 从复杂到简单
		final String path = "C:\\Users\\11577\\Desktop\\timg_副本.jpg";
		OutputStream out=new FileOutputStream(new File("D:\\a.txt"));
		//创建字节流缓冲区,加快写出速度        
		BufferedOutputStream bout=new BufferedOutputStream(out);        
		//创建字符输出流对象        
		BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(bout, "utf-8"));
		//获取图片
		final BufferedImage image = ImageIO.read(new File(path));
		//读取图片的像素,高度为8个每行,宽度为4个每行
		for (int y = 0; y < image.getHeight(); y += 8) {
			for (int x = 0; x < image.getWidth(); x += 4) {
				final int pixel = image.getRGB(x, y);//得到这个点ARGB像素值
				//获取r,g,b的值
//				final int 
//					r = (pixel & 0xff0000) >> 16, 
//					g = (pixel & 0xff00) >> 8,
//					b = pixel & 0xff;
				Color color=new Color(pixel);
				//将rgb值转化成灰度值,这里r、g、b之前的常数是固定值,这个公式是rgb转换灰度值的一种加权常用算法
				final float gray = 0.299f * color.getRed() + 0.587f * color.getGreen() + 0.114f * color.getBlue();
				//这里base我们是自己设置的,长度为n,然后加1,然后灰度值与这个值乘法,然后再做除法,
				//最终得到的index值得范围为0-n+1,可以知道值越小,颜色越黑,反之越白
				final int index = Math.round(gray * (base.length() + 1) / 255);
				//如果index的值在0-n范围就对应的使用base字符串中对应位置的字符代替,超出范围的用空白代替
				String pixels=index >= base.length() ? "   " : String.valueOf(base.charAt(index));
				bw.write(pixels);
				//因为空格在txt文件中间隔小所以要再加两个
				if(pixels.equals(" ")) {
					bw.write(" ");
					bw.write(" ");
				}
				System.out.print(pixels);
				
			}
			bw.write("\r\n");
			System.out.println();
		}
		bw.close();
		bout.close();
		out.close();
	}

}

这里我用一张猪做试验:

最后效果图:

 

ok,下面再看下将图片转灰度图片:

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

import javax.imageio.ImageIO;

/* 
* @author zzf 
* @date 2019年1月14日 下午3:53:47 
*/
public class ImageDemoTwo {
	public static void main(String[] args) throws IOException {
		final String path = "C:\\Users\\11577\\Desktop\\QQ截图20190115100010.png";
		//获取图片
		final BufferedImage image = ImageIO.read(new File(path));
		//读取每个图片的像素
		for (int y = 0; y < image.getHeight(); y ++ ) {
			for (int x = 0; x < image.getWidth(); x ++) {
				final int pixel = image.getRGB(x, y);//得到这个点ARGB像素值
				//获取r,g,b的值
//				final int 
//					r = (pixel & 0xff0000) >> 16, 
//					g = (pixel & 0xff00) >> 8,
//					b = pixel & 0xff;
				Color color=new Color(pixel);
				//将rgb值转化成灰度值,这里r、g、b之前的常数是固定值,这个公式是rgb转换灰度值的一种加权常用算法
				final float gray = 0.299f * color.getRed() + 0.587f * color.getGreen() + 0.114f * color.getBlue();
				image.setRGB(x, y,new Color((int) gray,(int) gray,(int) gray).getRGB());
			}
		}
		ImageIO.write(image, "png", new File("D:\\a.png"));
	}
}

ok~nice

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值