java代码30行实现用我爱你重绘女朋友美照(我对你的爱,在每一个字里行间)

2023-11-23 13:30

本文主要是介绍java代码30行实现用我爱你重绘女朋友美照(我对你的爱,在每一个字里行间),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

闲言少许,我先上效果图。

左边是原图片,右边是文字替换的图片,是不是看出什么效果?我来放大一下!

在这里插入图片描述

这下能看到了吧,我对你的爱,在每一个字里行间哦~。有关程序员的强势浪漫。实现这个效果,代码非常简单,真实代码大约30行左右。完整代码在文章最后!依旧是,程序虽然很少,但是并不简单下面是用到的 api

java api学习手册:https://www.matools.com/api/java8

我们在代码中用到的类和方法。大家可以去上面链接学习一下哦

BufferedImage

  • 构造方法
  • getGraphics()
  • getWidth()
  • getHeight()
  • getType()
  • getRGB()

ImageIO:

  • read()
  • write()

Graphics2D

  • setColor
  • drawString

我来依次讲解一下每行代码的作用。

首先先定义一个我们想要在图片中展示的内容

String base = "我爱你";

我们再读取我们想要转换的图片,这里呢,我们使用 ImageIO 中提供的静态方法 read(),传入一个文件,read() 方法回返回一个 BufferedImage 类型的图片缓存流。我们通过new File(path),来创建一个文件流。

BufferedImage image = ImageIO.read(new File(path));

我们再创建一个 BufferedImage 用于放置我们输出文字的图片。参数呢就是图片的宽度,图片的高度,和图片的类型。

BufferedImage newImage = new BufferedImage(image.getWidth(),image.getHeight(), image.getType());

创建一个2D坐标转换及绘图相关的类 Graphics2D,用来设置每个像素点的颜色、字体大小和字体样式。

Graphics2D graphics2d = (Graphics2D) newImage.getGraphics();

设置字体风格、样式和大小

graphics2d.setFont(new Font("宋体", Font.BOLD, 12));

下面就是写一个for循环,循环遍历每一个像素点,将每隔12个像素点就替换为文字。

index
for (int y = 0; y < image.getHeight(); y += 12) {for (int x = 0; x < image.getWidth(); x += 12) {//循环每一个像素点}
}

for 循环中的的内容:获取图片当前位置像素的颜色

int pixel = image.getRGB(x, y);

for 循环中的的内容:分离出rgb三种颜色,分别进行灰度和二值化处理,想具体研究可以去找资料学习

int r = (pixel & 0xff0000) >> 16, g = (pixel & 0xff00) >> 8, b = pixel & 0xff;

for 循环中的的内容:通过graphics2d设置字体颜色

graphics2d.setColor(new Color(r, g, b));

for 循环中的的内容:在当前位置上绘上一个文字

graphics2d.drawString(String.valueOf(base.charAt(index % base.length)), x, y);

for 循环中的的内容:当前文字被绘上以后绘制下一个文字

index++;

最后,我们通过 ImageIO 方法,把图片重新绘制,并输出。

ImageIO.write(newImage, "JPG", new FileOutputStream("F:\\temp.jpg"));

在主方法中调用刚刚写的方法。

public static void main(final String[] args) {FontImage.createAsciiPic("F:\\girl.jpg");System.out.println("OK");
}

完整代码

import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileOutputStream;public class MyFontImage {public static void createFongImg(String path){String base = "我爱你";try{BufferedImage image = ImageIO.read(new File(path));BufferedImage newImage = new BufferedImage(image.getWidth(),image.getHeight(),image.getType());Graphics2D graphics2D = (Graphics2D) newImage.getGraphics();graphics2D.setFont(new Font("宋体",Font.BOLD,12));int index = 0;for(int y = 0; y < image.getHeight(); y += 12){for (int x = 0; x < image.getWidth(); x += 12){int pxcolor = image.getRGB(x,y);int r = (pxcolor & 0xff0000) >> 16,g = (pxcolor & 0xff00) >> 8,b = pxcolor & 0xff;graphics2D.setColor(new Color(r, g, b));graphics2D.drawString(String.valueOf(base.charAt(index % base.length())), x, y);index++;}}ImageIO.write(newImage, "JPG", new FileOutputStream("F:\\temp.jpg"));}catch (Exception e){e.printStackTrace();}};public static void main(String args[]){MyFontImage.createFongImg("F:\\girl.jpg");System.out.println("OK");}
}

喜欢的记得 点赞、关注 哦,不定期分享程序员的骚操作和强势浪漫!

附之前作品精选:

用vb语言七行写一个QQ轰炸机(附一个抖音很火的小程序)

浪漫程序员会表白之抖音旋转立方体照片墙

抖音上的时钟屏保,被我改造完用来表白

这篇关于java代码30行实现用我爱你重绘女朋友美照(我对你的爱,在每一个字里行间)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/418293

相关文章

pandas中位数填充空值的实现示例

《pandas中位数填充空值的实现示例》中位数填充是一种简单而有效的方法,用于填充数据集中缺失的值,本文就来介绍一下pandas中位数填充空值的实现,具有一定的参考价值,感兴趣的可以了解一下... 目录什么是中位数填充?为什么选择中位数填充?示例数据结果分析完整代码总结在数据分析和机器学习过程中,处理缺失数

Golang HashMap实现原理解析

《GolangHashMap实现原理解析》HashMap是一种基于哈希表实现的键值对存储结构,它通过哈希函数将键映射到数组的索引位置,支持高效的插入、查找和删除操作,:本文主要介绍GolangH... 目录HashMap是一种基于哈希表实现的键值对存储结构,它通过哈希函数将键映射到数组的索引位置,支持

Java学习手册之Filter和Listener使用方法

《Java学习手册之Filter和Listener使用方法》:本文主要介绍Java学习手册之Filter和Listener使用方法的相关资料,Filter是一种拦截器,可以在请求到达Servl... 目录一、Filter(过滤器)1. Filter 的工作原理2. Filter 的配置与使用二、Listen

Pandas使用AdaBoost进行分类的实现

《Pandas使用AdaBoost进行分类的实现》Pandas和AdaBoost分类算法,可以高效地进行数据预处理和分类任务,本文主要介绍了Pandas使用AdaBoost进行分类的实现,具有一定的参... 目录什么是 AdaBoost?使用 AdaBoost 的步骤安装必要的库步骤一:数据准备步骤二:模型

Spring Boot中JSON数值溢出问题从报错到优雅解决办法

《SpringBoot中JSON数值溢出问题从报错到优雅解决办法》:本文主要介绍SpringBoot中JSON数值溢出问题从报错到优雅的解决办法,通过修改字段类型为Long、添加全局异常处理和... 目录一、问题背景:为什么我的接口突然报错了?二、为什么会发生这个错误?1. Java 数据类型的“容量”限制

使用Pandas进行均值填充的实现

《使用Pandas进行均值填充的实现》缺失数据(NaN值)是一个常见的问题,我们可以通过多种方法来处理缺失数据,其中一种常用的方法是均值填充,本文主要介绍了使用Pandas进行均值填充的实现,感兴趣的... 目录什么是均值填充?为什么选择均值填充?均值填充的步骤实际代码示例总结在数据分析和处理过程中,缺失数

Java对象转换的实现方式汇总

《Java对象转换的实现方式汇总》:本文主要介绍Java对象转换的多种实现方式,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录Java对象转换的多种实现方式1. 手动映射(Manual Mapping)2. Builder模式3. 工具类辅助映

SpringBoot请求参数接收控制指南分享

《SpringBoot请求参数接收控制指南分享》:本文主要介绍SpringBoot请求参数接收控制指南,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Spring Boot 请求参数接收控制指南1. 概述2. 有注解时参数接收方式对比3. 无注解时接收参数默认位置

Go语言开发实现查询IP信息的MCP服务器

《Go语言开发实现查询IP信息的MCP服务器》随着MCP的快速普及和广泛应用,MCP服务器也层出不穷,本文将详细介绍如何在Go语言中使用go-mcp库来开发一个查询IP信息的MCP... 目录前言mcp-ip-geo 服务器目录结构说明查询 IP 信息功能实现工具实现工具管理查询单个 IP 信息工具的实现服

利用Python调试串口的示例代码

《利用Python调试串口的示例代码》在嵌入式开发、物联网设备调试过程中,串口通信是最基础的调试手段本文将带你用Python+ttkbootstrap打造一款高颜值、多功能的串口调试助手,需要的可以了... 目录概述:为什么需要专业的串口调试工具项目架构设计1.1 技术栈选型1.2 关键类说明1.3 线程模