前言
文字换行算法详解
,传送门:java制作海报一:java使用Graphics2D 在图片上写字,文字换行算法详解
头像切割成圆形方法详解
,传送门:java制作海报二:java使用Graphics2D 在图片上合成另一个照片,并将照片切割成头像,头像切割成圆形方法详解
获取微信二维码详情
,传送门:java制作海报三:获取微信二维码详情,并改变大小,合成到海报(另一张图片)上
java BufferedImage 转 InputStream
和 png 图片合成到模板(另一个图片)上时,透明部分变成了黑色
,传送门:java制作海报四:java BufferedImage 转 InputStream 上传至OSS。png 图片合成到模板(另一个图片)上时,透明部分变成了黑色
java 整合echarts 画出 折线图
,传送门:
Graphics2D的RenderingHints方法参数详解,包括解决文字不清晰,抗锯齿问题
,传送门:java制作海报六:Graphics2D的RenderingHints方法参数详解,包括解决文字不清晰,抗锯齿问题
项目部署到linux下中文不显示,echarts图上的中文也不显示问题
,传送门:java制作海报七:java Graphics2D 合成图片 在 linux下中文不显示,echarts图上的中文也不显示问题
- 本次博客主要是 稍微说一下
头像切割成圆形方法
,这里的代码都在 PosterUtil.java
中
一、核心代码
public static BufferedImage drawImgToCircle(String imgUrl, int width) throws IOException {
BufferedImage avatarImage = ImageIO.read(new URL(imgUrl));
BufferedImage formatAvatarImage = new BufferedImage(width, width, BufferedImage.TYPE_4BYTE_ABGR);
Graphics2D graphics = formatAvatarImage.createGraphics();
{
graphics.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
int border = 1;
Ellipse2D.Double shape = new Ellipse2D.Double(border, border, width - border * 2, width - border * 2);
graphics.setClip(shape);
graphics.drawImage(avatarImage, border, border, width - border * 2, width - border * 2, null);
graphics.dispose();
}
return formatAvatarImage;
}
二、测试代码,可直接生成
package com.feng.controller;
import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.geom.Ellipse2D;
import java.awt.image.BufferedImage;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.URL;
public class Test3_HeadImageToCircle {
public static void main(String[] args) throws IOException {
String url = "https://img-blog.csdn.net/20180529211243786?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3plbmdyZW55dWFu/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/7";
BufferedImage avatarImage = ImageIO.read(new URL(url));
int width = 120;
BufferedImage formatAvatarImage = new BufferedImage(width, width, BufferedImage.TYPE_4BYTE_ABGR);
Graphics2D graphics = formatAvatarImage.createGraphics();
{
graphics.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
int border = 1;
Ellipse2D.Double shape = new Ellipse2D.Double(border, border, width - border * 2, width - border * 2);
graphics.setClip(shape);
graphics.drawImage(avatarImage, border, border, width - border * 2, width - border * 2, null);
graphics.dispose();
}
try (OutputStream os = new FileOutputStream("C:\\Users\\admin\\Desktop\\test2.png")) {
ImageIO.write(formatAvatarImage, "PNG", os);
}
{
graphics = formatAvatarImage.createGraphics();
graphics.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
int border = 3;
Stroke s = new BasicStroke(4.5F, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND);
graphics.setStroke(s);
graphics.setColor(Color.WHITE);
graphics.drawOval(border, border, width - border * 2, width - border * 2);
graphics.dispose();
}
try (OutputStream os = new FileOutputStream("C:\\Users\\admin\\Desktop\\test3.png")) {
ImageIO.write(formatAvatarImage, "PNG", os);
}
{
url = "https://img-blog.csdn.net/20180529213113521";
BufferedImage srcImg = ImageIO.read(new URL(url));
BufferedImage blankImage = new BufferedImage(srcImg.getWidth(), srcImg.getHeight(), BufferedImage.TYPE_INT_RGB);
graphics = blankImage.createGraphics();
graphics.drawImage(srcImg, 0, 0, null);
int x = (blankImage.getWidth() - width) / 2;
int y = (blankImage.getHeight() - width) / 2;
graphics.drawImage(formatAvatarImage, x, y, width, width, null);
try (OutputStream os = new FileOutputStream("C:\\Users\\admin\\Desktop\\test4.png")) {
ImageIO.write(blankImage, "PNG", os);
}
}
}
}
三、生成的图片如下
