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

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

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

这下能看到了吧,我对你的爱,在每一个字里行间哦~。有关程序员的强势浪漫。实现这个效果,代码非常简单,真实代码大约30行左右。

完整代码在文章最后!依旧是,程序虽然很少,但是并不简单下面是用到的 api

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

BufferedImage构造方法

getGraphics()

getWidth()

getHeight()

getType()

getRGB()

ImageIO:read()

write()

Graphics2DsetColor

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");

}

}

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

附之前作品精选:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java 开发手册》是阿里巴巴集团技术团队的集体智慧结晶和经验总结,经历了多次大规模一 线实战的检验及不断完善,公开到业界后,众多社区开发者踊跃参与,共同打磨完善,系统化地整理成册,当前的版本是泰山版。现代软件业的高速发展对开发者的综合素质要求越来越高,因为不仅 是编程知识点,其它维度的知识点也会影响到软件的最终交付质量。比如:数据库的表结构和索引设 计缺陷可能带来软件上的架构缺陷或性能风险;工程结构混乱导致后续维护艰难;没有鉴权的漏洞代 码易被黑客攻击等等。所以本手册以 Java 开发者为中心视角,划分为编程规约、异常日志、单元测 试、安全规约、MySQL 数据库、工程结构、设计规约七个维度,再根据内容特征,细分成若干二级 子目录。另外,依据约束力强弱及故障敏感性,规约依次分为强制、推荐、参考三大类。在延伸信息 中,“说明”对规约做了适当扩展和解释;“正例”提倡什么样的编码和实现方式;“反例”说明需 要提防的雷区,以及真实的错误案例。 手册的愿景是码出高效,码出质量。现代软件架构的复杂性需要协同开发完成,如何高效地协 同呢?无规矩不成方圆,无规范难以协同,比如,制订交通法规表面上是要限制车权,实际上是保 障公众的人身安全,试想如果没有限速,没有红绿灯,谁还敢上路驶?对软件来说,适当的规范和 标准绝不是消灭代码内容的创造性、优雅性,而是限制过度个性化,以一种普遍认可的统一方式一起 做事,提升协作效率,降低沟通成本。代码字里行间流淌的是软件系统的血液,质量的提升是尽可 能少踩坑,杜绝踩重复的坑,切实提升系统稳定性,码出质量。 我们已经在 2017 杭州云栖大会上发布了配套的 Java 开发规约 IDE 插件,下载量达到 152 万人次,阿里云效也集成了代码规约扫描引擎。次年,发布 36 万字的配套详解图书《码出高效》,本书 秉持“图胜于表,表胜于言”的理念,深入浅出地将计算机基础、面向对象思想、JVM 探源、数据 结构与集合、并发与多线程、单元测试等知识客观、立体地呈现出来。紧扣学以致用、学以精进的目 标,结合阿里巴巴实践经验和故障案例,与底层源码解析融会贯通,娓娓道来。《码出高效》和《Java开发手册》书籍版所得收入均捐赠公益事情,希望用技术情怀帮助更多的人。
前言 《Java 开发手册》是阿里巴巴集团技术团队的集体智慧结晶和经验总结,经历了多次大规模一线实战的检验及不断完善,公开到业界后,众多社区开发者踊跃参与,共同打磨完善,系统化地整理成册,当前的版本是泰山版。现代软件业的高速发展对开发者的综合素质要求越来越高,因为不仅是编程知识点,其它维度的知识点也会影响到软件的最终交付质量。比如:数据库的表结构和索引设计缺陷可能带来软件上的架构缺陷或性能风险;工程结构混乱导致后续维护艰难;没有鉴权的漏洞代码易被黑客攻击等等。所以本手册以 Java 开发者为中心视角,划分为编程规约、异常日志、单元测试、安全规约、MySQL 数据库、工程结构、设计规约七个维度,再根据内容特征,细分成若干二级子目录。另外,依据约束力强弱及故障敏感性,规约依次分为强制、推荐、参考三大类。在延伸信息中,“说明”对规约做了适当扩展和解释;“正例”提倡什么样的编码和实现方式;“反例”说明需要提防的雷区,以及真实的错误案例。 手册的愿景是码出高效,码出质量。现代软件架构的复杂性需要协同开发完成,如何高效地协同呢?无规矩不成方圆,无规范难以协同,比如,制订交通法规表面上是要限制车权,实际上是保障公众的人身安全,试想如果没有限速,没有红绿灯,谁还敢上路驶?对软件来说,适当的规范和标准绝不是消灭代码内容的创造性、优雅性,而是限制过度个性化,以一种普遍认可的统一方式一起做事,提升协作效率,降低沟通成本。代码字里行间流淌的是软件系统的血液,质量的提升是尽可能少踩坑,杜绝踩重复的坑,切实提升系统稳定性,码出质量。
《阿里巴巴 Java 开发手册》是阿里巴巴集团技术团队的集体智慧结晶和经验总 结,经历了多次大规模一线实战的检验及不断完善,系统化地整理成册,回馈给广大 开发者。现代软件业的高速发展对开发者的综合素质要求越来越高,因为不仅是编 程知识点,其它维度的知识点也会影响到软件的最终交付质量。比如:数据库的表结 构和索引设计缺陷可能带来软件上的架构缺陷或性能风险;工程结构混乱导致后续维 护艰难;没有鉴权的漏洞代码易被黑客攻击等等。所以本手册以 Java 开发者为中心视 角,划分为编程规约、异常日志、单元测试、安全规约、MySQL 数据库、工程结构、设 计规约七个维度,再根据内容特征,细分成若干二级子目录。根据约束力强弱及故障 敏感性,规约依次分为强制、推荐、参考三大类。对于规约条目的延伸信息中,“说 明”对规约做了适当扩展和解释;“正例”提倡什么样的编码和实现方式;“反例” 说明需要提防的雷区,以及真实的错误案例。 本手册的旨在码出高效,码出质量。现代软件架构的复杂性需要协同开发完成, 如何高效地协同呢?无规矩不成方圆,无规范难以协同,比如,制订交通法规表面上 是要限制车权,实际上是保障公众的人身安全,试想如果没有限速,没有红绿灯, 谁还敢上路驶。对软件来说,适当的规范和标准绝不是消灭代码内容的创造性、优 雅性,而是限制过度个性化,以一种普遍认可的统一方式一起做事,提升协作效率, 降低沟通成本。代码字里行间流淌的是软件系统的血液,质量的提升是尽可能少踩 坑,杜绝踩重复的坑,切实提升系统稳定性,码出质量。
Java 开发手册》是阿里巴巴集团技术团队的集体智慧结晶和经验总结,经历了多次大规模 一线实战的检验及不断完善,公开到业界后,众多社区开发者踊跃参与,共同打磨完善,系统化地 整理成册。现代软件业的高速发展对开发者的综合素质要求越来越高,因为不仅是编程知识点, 其它维度的知识点也会影响到软件的最终交付质量。比如:数据库的表结构和索引设计缺陷可能带 来软件上的架构缺陷或性能风险;工程结构混乱导致后续维护艰难;没有鉴权的漏洞代码易被黑客 攻击等等。所以本手册以 Java 开发者为中心视角,划分为编程规约、异常日志、单元测试、安全规 约、MySQL 数据库、工程结构、设计规约七个维度,再根据内容特征,细分成若干二级子目录。 另外,依据约束力强弱及故障敏感性,规约依次分为强制、推荐、参考三大类。在延伸信息中, “说明”对规约做了适当扩展和解释;“正例”提倡什么样的编码和实现方式;“反例”说明需要 提防的雷区,以及真实的错误案例。 手册的愿景是码出高效,码出质量。现代软件架构的复杂性需要协同开发完成,如何高效地协 同呢?无规矩不成方圆,无规范难以协同,比如,制订交通法规表面上是要限制车权,实际上是 保障公众的人身安全,试想如果没有限速,没有红绿灯,谁还敢上路驶?对软件来说,适当的规 范和标准绝不是消灭代码内容的创造性、优雅性,而是限制过度个性化,以一种普遍认可的统一方 式一起做事,提升协作效率,降低沟通成本。代码字里行间流淌的是软件系统的血液,质量的提 升是尽可能少踩坑,杜绝踩重复的坑,切实提升系统稳定性,码出质量。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值